2013-01-07 9 views
16

多くの検索の後で、移動したファイルの完全な履歴をGitで、さらに重要なGitkで表示するのに使いやすい方法は見つけられませんでした。 "git log --follow [filePath]"と "gitk --follow [filePath]"を使用すると、ファイルが関わっているコミットが得られますが、移動前のファイルの実際の変更履歴は表示されません。したがって、私は粗ではあるがシンプルな回避策を思いついた。移動したファイルの完全な履歴を表示するのにgitkを使用する

  1. 移動されたファイルに対してgitkを実行します: "gitk [newFilePath]"。最初のコミットのSHA1 IDをコピーします。これは、ファイルが移動された場所のコミットでなければなりません。
  2. コピーしたSHA1 ID:gitk [SHA1ID]にgitkを実行します。最新のコミットは、移動が発生したときでなければなりません。移動したファイルを探し、古いパスをコピーします。
  3. 我々だけコピーSHA1のIDと古いファイルパスのgitkを実行します。「gitk [SHA1ID] - [oldFilePath]」

このプロセスでは、あなたが前にファイルの履歴を表示することができます動く複数の移動があった場合、上記の処理を繰り返すことができます。

この問題の解決策がある場合、特にこれらの手順を組み合わせて移動履歴を表示する方法がある場合は、非常に感謝しています。

答えて

7

あなたがそれぞれに行われた変更はでも、ファイルの名前が変更されたコミット確認したい場合は、あなたがgit logのオプション-pを使用することができます。

git log -p --follow [file/with/path] 
+0

これは優れたソリューションです!私は他の誰かのソリューションが "git log --follow"で-pスイッチを使うのを見たことがあります。それをgitkで見るのが好ましいでしょうが、私は間違いなくこの方法を使用します! –

+0

もしあなたが(まだ)これを行うためのGUI方法を探しているなら - SourceTreeを試してみてください(私の答えのリンク) – Chris

3

ここであなたの歴史を示すべきであるbashの機能があります

# bash 
gitk_follow() { 
    while (("$#")); do 
    git log --oneline --name-status --follow $1; 
    shift; 
    done | perl -ne 'if(s{^(?:[ACDMRTUXB]|R\d+)\s+}{}) { s{\s+}{\n}g; print; }' | sort -u 
} 

# used as: 
gitk $(gitk_follow some_file) 

更新:彼らは別のシェルのためにそれを必要とする場合、そのすべての化身でファイル(使用してgitk)の...私は読者への課題として残しておきます:

最後のバージョンでgit logの出力に十分な注意を払わなかったので、perlを使用するように変更されました。

+0

とてもいいです、ありがとう!私は '--'でそれを使う必要がありました:' gitk-$(gitk_follow some_file) '。 –

0

また、Atlassianによって開発されたSourceTreeアプリケーション(GUI)を使用することもできます。アプリケーションの中でファイルを右クリックし、「選択したログ...」を選択することができます。

Log Selectedそれはあなたが「名前が変更されたファイルをフォロー」することを可能にするポップアップウィンドウで

enter image description here

私はまたGitHub for Macを使用していますが、まだ、そこでの機能のようなものを見ませんでした。

ファイル名を強要するために別のgitのログオプションとのawkを使用して

+0

にはこれに対応するLinux版がありませんか? –

0

シンプルな機能を(私はそれらのいずれかと提携していないのです!)(そして「 - 」はそのgitkが含まれている必要があります):

# bash 
gitk_follow() { 
    while (("$#")); do 
    git log --pretty="" --name-status --follow $1; 
    shift; 
    done | awk '{print $NF}' | sort -u 
} 

# used as: 
gitk -- $(gitk_follow some_file) 
関連する問題