2017-08-24 7 views
1

私はgit repoを持っていますが、1つのファイルにはほとんど毎日新しいコミットが追加されています。Git extractは別のファイルとしてコミットします

新しいディレクトリへのすべてのコミットを見て、ファイルのコピーを抽出したいと思います。

ファイルがコミットされた日時に応じて日付がスタンプされるのが理想的です(2017_08_24.txt)。

私は既にgit format-patch -o directory --root HEADを試しましたが、これはコミット時に見たときの完全なファイルではなく、変更ログをエクスポートします。

+0

特定のリビジョンからファイルバージョンを取得する方法について十分な質問があるので、これを複製として閉じます。ファイルのすべてのバージョンを取得して保存するためのスクリプトを作成するタスクはOPに任されます(これはコード作成サービスではないことに注意してください)。 'git log'(これは単にコミットIDを表示するために呼び出すことができます)と組み合わせて、これはあまり難しいことではありません。 – poke

答えて

1

git show <commit>:<file>をコミット

おかげで、特定の場合

0

は、あなたがこの

git show 23uggf2f8g:myfile.txt > backupDir/oldVersion.txt 

のようにファイルのバージョンを取得することができますコミットしかし、私はあなたがすべてのために自動的にそれを行うためのスクリプトを記述する必要があることを考えます特定のコミットハッシュと同じように、ファイルの内容を取得します。 git logを使用してファイルのすべてのコミットを取得し、xargsを使用してgit showに渡すことができます。

次のコマンドラインは、元の名前とコミットハッシュに一連のファイルを抽出します彼らに連接:

$ git log --format="%H" /path/to/file | \ 
xargs -I % sh -c "git show %:/path/to/file > /path/to/target/filename.%" 
1

ここではbashスクリプトです。完全にテストされていません。あなたは好きなようにそれを変更することができます。

#!/bin/bash 

branch=$1 
file=$2 

git log --pretty=%H $branch | while read hash;do 
    object="$branch:$file" 
    objecthash=$(git rev-parse $object 2>/dev/null) 
    if [ "$object" != "$objecthash" ];then 
     git cat-file -p $objecthash > $(git log -1 --pretty=%cd --date=format:%Y%m%d_%H%M%S $hash).txt 
    else 
     echo "$file does not exist in $hash" 
    fi 
done 
関連する問題