Git extract作为单独的文件提交

时间:2017-08-24 07:57:57

标签: git version-control

我有一个git repo,其中一个文件几乎每天都会添加新的提交。

我希望在每次提交到新目录时查看该文件的副本。

理想情况下,文件将根据提交时间标记日期(2017_08_24.txt)。

我已经尝试了git format-patch -o directory --root HEAD,但这会导致更改日志,而不是查看提交时的完整文件。

由于

3 个答案:

答案 0 :(得分:1)

git show <commit>:<file>会将文件内容放在特定的提交哈希中。您可以使用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 :(得分: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

答案 2 :(得分:0)

对于特定提交,您可以检索文件版本,如

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

但我认为你必须编写一个脚本来自动完成每次提交