2012-03-30 6 views
71

以上の指定されたファイル内の1行に様々な変更をすべて表示します(ジャバスクリプト)ので、同じように、私は変数に割り当てられた一意の識別子を持っている(/lib/client.js言う)ファイル: var identifier = "SOME_IDENTIFIER";Gitリポジトリ:</p> <p>私が持っている:私は周りを見回した、そしてこれが可能であるかどうかわからないけど、ここにきた全体のgitの歴史

あなたは、バージョン番号のような識別子を考えることができます。定期的に、我々はよこの変数を新しい識別子に変更します。

私がやりたかったのは、これまでに使用したすべての固有の識別子を見つけることです。どうすればgitでこれを行うことができますか?

私はgitの履歴を検索し、"var identifier ="に一致する行を印刷する方法があると思います。私は手動でこのリストを削除することができました。

とにかく、私はここで何か洞察に感謝します。ありがとう。

+2

可能重複[ファイル内の特定の行のコミットログを取得する?](http://stackoverflow.com/questions/8435343/retrieve-the-commit-log-for-a-specific-line-in -a-ファイル) –

答えて

37

git-logおよびgitdiffcoreのマニュアルページを参照してください。私は、このコマンドはそれを行うだろうと考えているが、それはかなり右ではないかもしれません。

git log -G "var identifier =" file.js 

EDIT:ここでは、実際の線を表示するにはbashスクリプトの大まかなスタートです。これはもっとあなたが探しているものかもしれません。

for c in $(git log -G "something" --format=%H -- file.js); do 
    git --no-pager grep -e "something" $c -- file.js 
done 

それはコミットハッシュのリストを作成する--format=%Hを使用して、面白いコミットを見つけるためにgit log -Gを使用しています。それから、それぞれの興味深いコミットを繰り返して、git grepに、そのコミットの行と、正規表現を含むファイル(コミットハッシュを前に付けたもの)を表示するように求めます。


EDIT:コメントで示唆されているように-Gの代わり-Sを使用するように変更。

+0

@Rob - このためのおかげで - しかし、あなたのスクリプトへの小さな編集 - それは –

+0

@AdrianCornishリストされていない参照他のファイルをコミットした場合 - - ファイル名だけが唯一のちょうどそのファイルに影響を与えるのコミットを示して置くことが嬉しかったです役に立った私はOPがただ一つのファイルを見たいと思っていましたが、あなたはファイル名を削除する方がおそらくもっと一般的に便利なスクリプトでしょう。 – rob

+0

私はもっと難しい状況に陥っています。問題のファイルは、paht_a/fileからpath_b/fileに移動しました。これでpath_bでファイルを作成すると、ファイルがpath_aからpath_bに移動するまでの変更が表示されます。私はpath_aでそれを行う場合、それは私に語った 致命的な:ない作業ツリー内の未知のリビジョンまたはパス:あいまいな引数「ファイル」。 –

12

あなたはまた、gitkでこれを行うことができますし、横にあるテキストボックスに、「VAR識別子=」を入力してください:「という文字列を追加/削除」、ドロップダウン選択し、「コミット」では

gitk file.js 

をその文字列を含む行を追加または削除するコミットが強調表示されます。あなたはロブの答え@少しだけを適応させる場合は、必要なすべての視覚的な比較である場合

+0

これは、「var identifier =」を含む行が追加されたコミットを特定するのに役立ちましたが、この行を変更した後続のコミットを示していません。 – findchris

+2

'git blame file.js'や' git gui blame file.js'を試しましたか? –

+0

私はgit blameが何をするのか知っています。私はリビジョンの完全な履歴を探していますが、単一の差分はありません。 – findchris

6

git logは基本的に、あなたのためにこれを行います。

git log -U0 -S "var identifier =" path/to/file 

-U0は、パッチ・モードで出力(-p)、およびショーを意味し、パッチの周りのコンテキストのゼロ行。

git log -U0 -S "var identifier =" branchname1 branchname2 -- path/to/file 

は差分ヘッダを抑制するための方法があるかもしれませんが、私は1つの知らない:

あなたも、支店間でこれを行うことができます。

+0

私のために働いた!ありがとう。 –

54

git 1.8以降です。4には、より直接的な方法で質問に答えることができます。

git log -L110,110:/lib/client.js 

これは、すべてのコード行を触ったコミット返します。その行110を想定すると

は、これを行う、var identifier = "SOME_IDENTIFIER";を言っラインです。

[Git Documentation( "-L" コマンドラインparamenterを参照してください)]

2

magitでは、あなたはそれは、ファイルをお願いしますと起動し、終了行う

l, =L 

でこれを行うことができます。

関連する問題

 関連する問題