2011-11-25 15 views
4

私は複数のファイルを含むgitリポジトリを持っています。gitでファイルのすべてのリビジョンを取得する

特定のファイルfoo.barのすべてのリビジョン(差分ではない)を取得し、0001-{date}-{sha}-foo.bar0002-{date}-{sha}-foo.barなどのように新しいフォルダに保存する必要があります。

どうすればいいですか?

+0

[多分これは役に立ちますか?](http://stackoverflow.com/questions/278192/view-the-change-history-of-a-file-using-gitversioning) –

答えて

6

あなたは著者日付をしたいと仮定すると、UNIXタイムスタンプがOKであること:

 
i=0 
git log --reverse --format=%H\ %at $file | 
while read hash date; do 
    git show $hash:$file > $(dirname $file)/$i-$hash-$date-$(basename $file) 
    : $((i += 1)) 
done 

は、あなたが欲しいものを行う必要があります。異なる日付が必要な場合は、指定子で%を変更してください。 しかし、UNIXのタイムスタンプは、名前のスペースを処理する必要がないので、いいです。明らかに、 あなたが選んだ場合、それに対処する方法があります。

4

あなたはあなたのような何かを与えるであろう、git log --pretty="%ct %H" -- foo.barを使用することができます。

1322212187 f75e724eec4e11a720d4620b3ca09eff91bb754e 
1311666567 d6b578f1b778c67d78322d914d3ab46e02d12f6c 
1311584563 cb76c3e39553cf20c9e96ad3d2c963b905d19180 
1311321178 bec391005805ca01e9c7b11032b456d426f4fa52 
89 b29afbf8c4ca7e8f178cec981b5d3d14f0abeb15 
1311081641 74d5747f2094a8f1696344c6c2b94244e52c7cc9 

最初の列は、コミット(UNIX)のタイムスタンプで、第二はのcommit SHAです。あなたが好きなことがあれば、何か他のもの(例えば--pretty引数に '%ct'、オプションを見るにはRTFM)を使いたい場合は、日付形式を変更することができます。これから、gitコマンドを書いてその特定のリビジョンの特定のリビジョンをチェックし、シェルスクリプトを使って命名規則にコピーするのは簡単でしょう。

+0

'git log --pretty = "%h%ad%an%s" - foo.bar'が私のために働いていました。 –

関連する問題