1

git リポジトリを更新するスクリプトが必要です。レポのあるフォルダーが存在する場合はレポを更新し、そのようなフォルダーがない場合はレポを複製したい。

そのスクリプトに2つのことを指定したい:

  • git リモート URL (例ssh://git.example.com/var/git/repo.git)
  • git リポジトリがあるべき場所 (例/var/lib/git/repo)

この種のスクリプトを作成することはそれほど難しくありませんが、このタスクは非常に一般的なものであり、既に解決されていると思います。

作業は非常に簡単ですが、慎重に行う必要があることがいくつかあります。たとえば、レポのメイン ブランチはマスターにはできませんが、エラーが発生した場合にスクリプトがゼロ以外の終了ステータスを与える必要があり、レポに何らかの変更があった場合に機能する必要があります。

私の質問は、リポジトリのクローン作成または更新のタスクを慎重に解決するためにどのスクリプトを使用できるかということです。

4

3 に答える 3

3

ここに簡単なルビーコードがあります

REPO_PATH = '/Users/full_path/to_repo'
REPO_NAME = 'xxx'
GITHUB_URL = 'git@github.com:xxx/xxx.git'   

def change_dir_to_repo
  Dir.chdir(REPO_PATH)
  puts system('pwd')
end   

def git_repo_exists?
  if Dir.exists?(REPO_NAME)
    puts "Git repo #{REPO_NAME} exists."
    update_git_repo
  else
    puts "Git repo #{REPO_NAME} does not exists."
    clone_git_repo
  end
end   

def clone_git_repo
  system("git clone #{GITHUB_URL}")
  puts "Done"
end  

def update_git_repo
  puts "Changing directory to #{REPO_NAME}"
  Dir.chdir(REPO_NAME)
  puts "Changing branch to master"
  system('git checkout master')
  puts "updating git repo"
  system('git pull')
  puts "Done"
end  

change_dir_to_repo
git_repo_exists?
于 2013-09-13T11:38:40.350 に答える
1

すぐにこれを行う必要がある場合は、node を試してみます。これは、git 統合用の優れたライブラリを提供しているためです。これらのいずれにも慣れていない場合は、bash よりも少し簡単だと思います。スクリプトは次のことを行います。

1) フォルダーへの移動と単純なgit status.

fatal: Not a git repository

1.a) git リポジトリでない場合は、単純な「git clone url」でうまくいき、スクリプトが存在します。

2.a) わかりました。エラーがなければ、git ステータスは、変更のないクリーンなブランチを提供するか、変更があることを通知します。

2.aa) 今すぐ更新したい場合は、「git pull --ff-only」を実行して、不要なマージを防ぎます。これが失敗した場合は、問題を手動で解決する必要があると思います。

2.ab) ローカルに変更がある場合は、スクリプトも終了します。

使用するライブラリ:

私はギフトが好きですが、npm を調べれば他にもたくさんあります。私の提案に従わない場合は、bash スクリプトでも同様です。

これが役に立ったことを願っています。

于 2013-09-13T10:58:02.397 に答える
0

バンはビルドサーバーでも実行できます

#peventing failure  
mkdir $rep || true
#succeeds always
cd $rep
#one of them will do the job!
git clone $REMOTE_URL . || git pull

Build Server で実行する場合は、Couleur appen git Status を使用します。

于 2015-06-01T23:18:43.287 に答える