我在 git 中有 1000 多个 XML 版本,我编写了一个脚本来解析和处理 XML 数据。在这一年中,XML 的内容发生了变化并提交给了 git。我想检查从当前提交到第一次提交的旧 XML 的内容。是否有可能将所有文件的所有版本都添加到 git 中,包括在同一个文件夹中以不同名称删除的文件?
3 回答
你总是可以只写一个小 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 的文件夹中。你可以把它做得更精细。在命令行提供文件夹名称,检查文件夹是否存在等。位主要思想就在那里。
如果您想查看两次提交之间所有文件的所有更改,请使用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
假设您很乐意编写一些 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$"