如何在git中获取所有修订的文件?

时间:2013-09-09 14:38:06

标签: git version-control

我在git中有1000多个XML版本,我编写了一个脚本来解析和处理XML数据。 在这一年中,XML的内容被更改并提交给git。 我想检查从当前提交到第一次提交的旧XML的内容。 是否有可能将所有文件都添加到git中,包括已删除的文件在不同名称的同一文件夹中?

3 个答案:

答案 0 :(得分:1)

你总是可以写一个小的bash脚本来为你做这件事。

dir=files;
filename=$1;

mkdir $dir;

for hash in $(git log --pretty=%H $filename); do
    git checkout $hash $filename;
    cp $1 $dir/$hash\_$filename;
done

这会将文件的所有版本放在名为files的文件夹中。你可以使它更精细。在命令行上提供文件夹名称,检查文件夹是否存在等。主要想法就在那里。

答案 1 :(得分:0)

如果要查看两次提交之间所有文件的所有更改,请使用git diff

git diff longhashfirstcommit..longhashfromlatestcommit

您可以通过运行git log来获取提交哈希值。

更多信息。

http://linux.die.net/man/1/git-diff
http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Viewing-Your-Staged-and-Unstaged-Changes

答案 2 :(得分:0)

假设你很乐意做一些shell脚本,你应该能够将git管道结合起来以获得你想要的东西。

git rev-list --all将列出存储库中所有修订版的哈希值 git ls-tree -r <hash>将为您提供提交(或其他树形图)中所有文件的列表。您可以通过筛选此列表来拆分XML文件,并提取它们的哈希值 git show <hash>将根据其哈希值为您提供文件的内容。您可以将该内容重定向到任何您喜欢的位置。

为了帮助您入门,以下管道将为您提供所有XML文件的列表及其哈希和文件名:

for i in `git rev-list --all` ; do git ls-tree -r $i ; done | grep ".xml$"