2009-04-04 7 views
3

git diff rev^ rev、さらにはgit show -p revのようなもので生成されたパッチファイルを受け取った場合、どのコミットが差分されているのかをどのように発見できますか?diffがどのコミットから構成されているかをどのように発見できますか?

私は肯定的ではありませんが、これはgitにも関係しますが、cvs/svnに含まれているパッチヘッダーのファイルのパスやリビジョン番号に注目して、私が受け取ったパッチ、正しいソースまたはリビジョンに対してdiffingしています。我々はgitのdiffのヘッダを調べる場合

具体的には、:

diff --git a/lib/blueprint/semantic_class_names.rb b/lib/blueprint/semantic_class_names.rb 
index 41bd496..c17af1d 100644 
--- a/lib/blueprint/semantic_class_names.rb 
+++ b/lib/blueprint/semantic_class_names.rb 

私は、この差分に関与コミットについての特徴的な情報を見つけることができません。インデックスラインがありますが、これは省略可能なコミットハッシュではなく、ファイルの差分部分のハッシュであると仮定できます。コミット・シグネチャとは必ずしも一致しません。

私がいくつかのファイルを比較し、メールで送信されたパッチで古い学校に行くことを決めた場合、私が作ったパッチを送信する前に正しいファイルとバージョンを比較したことをすぐに再確認する方法はありませんヘッダーをすばやく見ていますか?私はリビジョンが分散性質のためにcvs/svnにあるようにgitでは意味がないと理解していますが、ヘッダー内のファイルの少なくともコミット署名を見るのは気にならない唯一の人ですか?

+0

興味深い質問です。私は応答を楽しみにしています。 –

答えて

1

あなたがgit show <rev>、(またはgit show -p <rev>)を使用する場合は、あなたがコミット識別子を含むパッチを取得するには、次のような

、あなたはこの質問で提供される方法を使用してブロブを含んでコミットを見つけることができます著者、日付、コミットのメッセージとともに表示されます。

 
$ git show rel 
commit 82bf5b5df1e0308939a6e91cf4c7d2dae8088d99 
Author: Brian Campbell 
Date: Thu Mar 5 14:00:54 2009 -0500 

    Update another file 

diff --git a/another b/another 
index 2102854..4083e0c 100644 
--- a/another 
+++ b/another 
@@ -1 +1,3 @@ 
Yet another 
+ 
+More lines 
\ No newline at end of file 

パッチユーティリティは、一般的にパッチの先頭に余分なものを無視するので、この全体の出力は、パッチとして使用する有効にする必要があります。 git format-patchを使用して、自動的に送信されるように書式設定されたものを入手することもできます。具体的には、git send-emailまたはgit imap-sendなどを使用します。

htanataが指摘するように、個々のファイルのdiffヘッダー自体に表示されるのは、ブロブの識別子です。それを使用して、それが来たかもしれないリビジョンを見つけることができますが、それは遅くて必ずしも正しいとは限りません。コミットを参照する必要がある場合は、パッチでコミットに言及したヘッダーを残す方が良いでしょう。

0

特定のBLOB IDを導入したコミットを、ツリー内の既知のパスで簡単に見つけることができます。

blob_pathはパッチの影響を受けるツリー内のパスに設定され、blob_sha1はパッチからの省略形sha1(つまり、パッチ内のdiff行の直後にある "index"に続くもの)です。この短いスクリプトでは、ファイルのクールの

for h in $(git log --pretty=format:%H "$blob_path") 
do 
    test "$(git rev-parse "$h:$blob_path")" = "$(git rev-parse "$blob_sha1")" && 
     echo $h 
done 

、あなたは、最新のはまだあなたがそれをgit log --pretty=format:%H "$blob_path"で直前に表示されますコミットの親を表示したい場合には、ファイル、そのバージョンを持っていることをコミットしたい場合があります。

関連する問題