3

これが私の状況です。ラップトップとサーバーの両方に一連のファイルを保持しています。rsync を使用して、2 つの場所の間で既に同期を設定しています。最近、これらのファイルの特定の部分をソース管理下に置く必要があると判断しました。私はgitこれに使用しています。

だから私はshared/rsyncを使って同期しています。それから私はshared/stuff/gitの制御下にあるものを持っています。ローカルのリポジトリの両方の場所から git を使用します。私は一度に 1 つのコピーだけを操作し、常にファイルを前後に同期しています。

これらのファイルを扱っているのは私だけであり、これらのファイルが存在する場所はこれら 2 つの場所だけです。私が持っている唯一の理由gitは、今日、誤ってコードを削除してしまい、元に戻すことができなかったためです。

だから私の本当の質問:rsync壊れる何かをしgitますか? それともその逆?

編集: 好奇心旺盛な人のために、同期に git の代わりに rsync を使用している理由は、shared/ フォルダーの同期を維持するための優れたシステムが既にあり、その中に git リポジトリを保持したいからです。

4

3 に答える 3

4

何も問題はありません。

git オブジェクト: コミット、ツリー、ブロブは不変であるため、git オブジェクト ストレージはログのようなものです。「履歴を書き換える」場合でも、何も削除せずに新しいオブジェクトを書き込むだけです。git gc世界を止めて剪定する前ではありません。Git を使用すると、データを失いにくくなります。


リポジトリが非常に大きく、再パックする場合、git はすべてを新しい大きなパック ファイルにパックするため、rsync はオブジェクト データベース全体を再度転送する必要があります。再パックしたい場合はgit repack、古いパックに触れることなく新しいオブジェクトの新しいパックを作成する代わりに使用できます。または、いったん再パックして、大きなパック ファイルを保持するようにマークすることもできます。

という名前のパック ファイルがある場合は、.git/objects/pack-fe017c0e9ea12841cd29458df7bd4421c2b12458.packその横に .keep という名前のファイルを作成します。

touch .git/objects/pack-fe017c0e9ea12841cd29458df7bd4421c2b12458.keep

さて、git gcそのパック ファイルを書き換えませんが、他のすべての小さなパックとオブジェクトを取得して、それらをまとめます。との違いgit repackは、多数の小さなパック ファイルのコレクションを作成しないことです。

于 2009-10-25T00:20:16.040 に答える
3

私はこれを常に行っていますが、rsync の代わりにUnisonを使用しています。違いは、誤って両方のマシンで何かを変更した場合、Unison が問題を検出することです。そして、Unison には rsync アルゴリズムが組み込まれています!

于 2009-10-25T02:03:14.817 に答える
3

1 台のコンピューターでのみリポジトリを編集し、もう 1 台で編集する前に同期する限り、問題ありません。

于 2009-10-25T00:15:08.420 に答える