1

ローカルマシン(A)、テストサーバー(B)、リポジトリサーバー(C)があります。
私は次のワークフローを持っています:

  1. Aに何かをコーディングする
  2. テストマシンBへのミラー変更
  3. それがうまく機能する場合は、BからCにコミットします

今のところ、ミラーリングにrsyncを使用していますが、リポジトリが大きくなるため、Bからファイルリストを取得するのに時間がかかります(約10秒)。rsyncの代わりにGitを使用したいのは、はるかに高速でローカル履歴があるためです。リポジトリCと一緒に。

問題は、gitを使用してライブミラーリングを行う方法が見つからないことです。できます

git add . && git commit -m "mirroring" && git push

ローカルマシン上ですが、サーバーはどうですか?

数秒ごとにcronjobです

git checkout | awk '{print $2;}' | git checkout

正しい方法ですか?

PS:私はgitを初めて使用しますが、この仕事にはもっと適切なツールがあるかもしれません。

4

3 に答える 3

1

Gitを使用したライブミラーリングは、 gitフックを介して実行できます。

ブランチが更新された後にupdateアクションリグを実行できるフックを設定できます。このフックをサーバーBに設定します。フックに変更をプッシュするたびに、フックはのサイトで起動されます。このフックの内部では、変更を前方にプッシュすることができます(リモートを作成する必要があります)。フックは次のようになります。BC

#!/bin/bash
git push remote-of-c $3:$1
[ $? -ne 0 ] && { 
  echo 'Mirroring failed, check server settings and try again.'
  exit 1
}

したがって、更新するたびにBCも更新されます。そのプッシュ中に何かが失敗した場合、コンソールに関連するメッセージが表示され、最初のプッシュは成功しません。それが「ミラーリング」と呼ばれていますね。

于 2010-09-18T07:24:47.553 に答える
0

適切な仕事に適切なツールを使用してください。unisonミラーリングを行うために、またはそのようなものを使用します。

また、BではなくAからコミットします。したがって、テスト環境で.gitディレクトリのミラーリングをスキップできます。これにより、処理が高速化されます。次に、「ミラーリング」メッセージの無限のリストを表示する代わりに、何が変更されたのか、そしてその理由について、より意味のあるコミットメッセージを残すことができます。

于 2010-09-18T00:25:15.440 に答える
-1

ミラーリングツールは必要ないと思います。gitはそれに最適のようです。fsetoが言ったように、Aでコミットすることもお勧めします。変更をCにコピーするには、を使用する必要がありますgit push。次に、理解する必要があるのは、Bには作業ツリーがあるため、それをプッシュすることは間違いなく進むべき道ではないということです。ベアリポジトリ(作業ツリーのないリポジトリ:サーバーCにあるべきもの)にのみプッシュできます(少なくとも、プッシュする必要があります)。

代わりに、Bでは、Aから変更をフェッチできます(Bはgit cloneAのaです)。もちろん、これはcronジョブで設定できます。これは、Aのブランチを切り替えたり、コミットやブランチなどを削除したりする場合でも、サーバーAからの送信git pullを常に反映することを除いて、ほぼaになります。したがって、Bでは、次のコマンドを実行します。HEAD

git fetch origin ; git checkout origin/HEAD

このコマンドは「切り離されたHEAD」状態を作成するため警告しますが、Bでコミットしたくないので問題ありません。

最後に、サーバー部分:

  1. Cの場合:サーバーリポジトリを作成するgit init --bare
  2. B(またはA?)の場合:サーバーをリモートとして追加します。git remote add server <repo-C>
  3. B(またはA?)の場合:すべてが正常に機能する場合は、変更をサーバーにプッシュします。例:git push server HEAD:master。私は一般的なものとしてHEADを書いていますが、代わりにブランチを使用することをお勧めします。

私の説明が理解できることを願っています...:)

于 2010-09-18T07:11:50.827 に答える