この特定の目的でgitをどのように使用できますか?

この特定の目的でgitをどのように使用できますか?

状況はこんな感じです。ラップトップAとワークステーションBという2台のコンピュータがあります。 Bには固定IPがあり、Aには動的IPがあり、BからAへの接続を避けたい(Sshトンネル設定など、パラメータのためにBからAへのSSHは不可能であると仮定します)。

/home/user/foo.git両方のシステムにgitリポジトリがあります。問題:A:/home/user/foo.gitAの変更を処理し、マージ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が知ることができる唯一のことは、ブランチの内容が変更されたかどうかだけであり、途中で実際のトレースも維持しません。たとえば、チェックサムはコミット時に実行されるのではなく、コミット時に実行されます。ステージにファイルを追加します。

関連情報