git add-on - 2つのリポジトリが同じであることを確認する方法

git add-on - 2つのリポジトリが同じであることを確認する方法

別のGit添付ファイルストアからコンテンツを複製、同期、インポートするときに同じミラーが設定されていることを確認するにはどうすればよいですか?

過去には、ファイル間の比較を実行するためにunisonなどのツールを使用していましたが、これは時間とメモリの集約的でした。

完全性チェックを実行する他のオプションはありますか?これに対する主な動機は、既存のリポジトリを複製したが、サイズが小さくなったためである。以前のリポジトリで使用されていないオブジェクトや参照されていないオブジェクトがあったため、小さいと予想しましたが、サイズはかなり異なります。

だから実行できることを確認したいと思います。

答え1

git fsckGitには、Gitメタデータ構造の一般的な問題を指摘するための完全性チェック()が組み込まれています。git gcぶら下がったものやその他の不要なものを取り除くガベージコレクタ()もあります。

データの整合性に関しては...基本的にこれはgitが提供する保証であり、入力したデータは取り出すデータです。git log(最後のコミットのハッシュでも) 同じならデータも同じです。 gitのすべてのステップは、データ、メタデータ、および以前のデータに対してチェックサムを実行します。これはブロックチェーンと似ています。データがどこからでも変更されると、チェックサムも変更されます。チェックサムが一致しない場合、gitはチェックアウト中に多くの苦情を表示します。

Linus TorvaldsはYoutubeで見られるgit(2007-2008?)についての古い講演を持っており、IIRCではデータの整合性の側面についても話しています。以下は追加文書です。https://git-scm.com/book/en/Git-Internals-Git-Objects

実際、人々はこの問題をgitが魔法のように解決してくれるので心配しません。ソースに追いつくために変更をプル/プッシュ/コミットする必要があるかどうかを確認するには、「git status」を実行します。

余分なスペースを使用するには他の理由があるかもしれません。git stash使ったことがあるなら、おそらく空間を占めているでしょう。

これもリポジトリの複製に違いがある部分です。 gitはコミットされていないローカルコンテンツに興味がありません。コミットされない場合、クローンに関する限り存在しません。

答え2

次のようにして、gitannexが期待どおりに機能していることを確認しました。

  1. .gitコンテンツを含むソートされた一意のファイルのリストを取得します(これにより、すべてのgit添付ファイルのコンテンツが保証されます)。
  2. .gitコンテンツを含むソートされた一意のリンクのリストを取得します(これにより、ストレージ構造が同じであることが保証されます)。
  3. ファイルリストの比較、添付ファイル/転送ディレクトリを無視、gitオブジェクトは異なる場合があり、git添付ファイルの内容は同じでなければなりません。
  4. リンクされたリストを比較すると同じでなければなりません。
  5. gitannex fsckを実行するか、すべてのファイルのチェックサムを比較します(これはファイルシステムの問題です)。

これはうまくいきますが、少し難しいかもしれません。さらに、ミラーは部分コピーに過ぎず、プロセスがより複雑になる可能性があります。このミラーを使用すると、期待するものを比較できます。

関連情報