2

変更をコミットする前に、ファイル(または理想的にはツリー)の新しいgit shaを判別する方法はありますか?

バックグラウンド:

リポジトリの別のディレクトリにあるファイルが変更されるたびに、リポジトリ内の1つのファイルの文字列を一意の値に自動的に変更しようとしています。

これを行う簡単な方法は、サブディレクトリツリーのshaを一意の文字列として使用するgitフックを作成することだと思っていました。これは、git ls-treeを使用してコミット後のフックとして実行するのは簡単なようですが、毎回文字列をコミットするために追加のダミーコミットが必要になり、余分なノイズが発生します。

これまでのところ、これはgit hash-objectを実行することで可能であると判断しましたが、最終的にのハッシュを計算するために、ディレクトリ内のファイルのハッシュを再帰的に構築するためのやや複雑なスクリプトを作成する必要があります。ディレクトリ(ツリー)。もっと簡単なオプションがあるのだろうかと思います。

4

2 に答える 2

3

これはあなたの答えを正確にカバーしているわけではありませんが、実際に最初に新しいコミットを作成せずに、コミットでツリーのインデックスがどのようになるかを計算する方法を次に示します。

を実行するgit write-tree --prefix <subdirectory>/と、インデックスにあるツリーをディスクに書き込み、ハッシュを返します。これは、コミットが実行されたときにとにかく作成されるオブジェクトとまったく同じです。

于 2012-04-20T18:53:10.757 に答える
0

上記の私のコメントを参照してください...しかし、ディレクトリツリーのある種の一意の識別子を取得したい場合は、次のようにすることができます。

find directory -type f -print0 | 
  xargs -0 git hash-object | 
  git hash-object --stdin

これにより、ディレクトリ内のすべてのファイルのハッシュが計算されます...次に、ハッシュのリストのハッシュが計算されます。

于 2012-04-20T18:21:27.153 に答える