状況はこんな感じです。ラップトップAとワークステーションBという2台のコンピュータがあります。 Bには固定IPがあり、Aには動的IPがあり、BからAへの接続を避けたい(Sshトンネル設定など、パラメータのためにBからAへのSSHは不可能であると仮定します)。
/home/user/foo.git
両方のシステムにgitリポジトリがあります。問題:A:/home/user/foo.git
Aの変更を処理し、マージB:/home/user/foo.git
。結局のところ、両方のリポジトリは同じでなければなりません。
私が考えることができる最も簡単な解決策は次のとおりです。
A:~$ cd foo.git
A:~/foo.git$ git commit -a
A:~/foo.git$ ssh B
B:~$ cd foo.git
B:~/foo.git$ git commit -a
B:~/foo.git$ logout
A:~/foo.git$ git pull ssh://B/home/user/foo.git
A:~/foo.git$ git push ssh://B/home/user/foo.git master
(これを行うには、これに対する答えで説明されているように、Bのgit設定を変更し、受信後にフックを追加する必要がありました。スタックオーバーフローの質問)
私の質問:
1)上記の内容は正しいですか? 2)同じ目標を達成するより簡単な方法はありますか?
答え1
あなたが受け取った後フック私の考えでは、非常に怖い警告がいくつかあります!
同様の設定がありますが、サーバーBには2つのストレージコピーがあります。 1つは、デフォルトのリモート(「ソース」)として使用されるベアストアです。これにより、「git push」と「git pull」のパラメータを指定する必要はありません。最後に、あなたが言及したコマンドを単純化したのがこれです。 (私の場合、Bはサーバーです。そのままにすることができるARMボックスがあります。)
「Gitを実際に使用しない」場合、これは必ずしも最善の考えではありません。 Gitは強力に設計されていますが、UIはまだ他のDVCSほど一貫性がありません。この目的のためのより簡単なツールは次のとおりです。
http://git-annex.branchable.com/assistant/(新しい - まだ試していません)
http://www.cis.upenn.edu/~bcpierce/unison/(古いスタンバイ、SSH経由で動作)
Dropbox(無料ではなくインターネット接続が必要ですが、柔軟でLAN経由での転送も最適化されています)
あるいは、MercurialやDarcsもあります。私はどちらも追加のベアリポジトリを要求したり、コミットフックを心配するGitの問題を避けると思います。 MercurialはGitよりもユーザーフレンドリーでなければなりません。 Darcsのデザインは他のDVCSとは異なるため、これが最善のアイデアではない可能性があります。ドキュメントを見ると、Bazaarはこのシナリオについて懐疑的なようです。
答え2
BからAにSSHを接続できないが、AからBにSSHを接続できる場合リバースSSHトンネルの設定。
答え3
私の考えにはそれがあなたに悪いようだgit
、私も考えるrsync
ファイルを同期状態に保つため、作業に適しています。私の考えでは、次の理由でgitは理想的ではありません。
- 明らかに、分岐/バージョン管理/分散モデルは必要ありません。
- ファイルを処理する必要があります。 gitはファイルを直接処理しません。つまり、gitはファイルシステム(デフォルトではファイルとディレクトリ)のすべての「オブジェクト」をSHA1ハッシュとして扱うので、実際にファイルを回復する方法はありません。特定のファイルについてgitが知ることができる唯一のことは、ブランチの内容が変更されたかどうかだけであり、途中で実際のトレースも維持しません。たとえば、チェックサムはコミット時に実行されるのではなく、コミット時に実行されます。ステージにファイルを追加します。