1

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

4

3 回答 3

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 的文件夹中。你可以把它做得更精细。在命令行提供文件夹名称,检查文件夹是否存在等。位主要思想就在那里。

于 2013-09-09T15:35:56.907 回答
0

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

git diff longhashfirstcommit..longhashfromlatestcommit

您可以从 running 获取提交哈希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

于 2013-09-09T15:19:20.397 回答
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$"
于 2013-09-09T16:02:36.787 回答