0

我可以很好地做到这一点:

git log --format=%h -- filename | while read f; do git show $f:filename; done

但是,如果我尝试添加--followgit log调用中,文件会在目录中移动并更改名称,因此git show调用会在路径更改时失败。我尝试插入各种东西来获取完整路径(fullname=`ls-tree --name-only $f -- filename`等)并将其传递给git show,但没有任何效果,而且我在 google 和 SO 搜索中找不到太多东西。我觉得我错过了一些明显的东西,比如一个git log --format把戏。

我也接受只获取文件曾经的所有完整路径名,以及获取不再存在路径的完整历史记录的方法。然后我可以分阶段进行,当然我更喜欢一次性方法。

4

1 回答 1

0

我设法用这个提取了我需要的数据:

`git log --follow --format='%h' --name-only -- filename | vim -`

Vim 收到的信息是这样的:

21acc7c

work/oldname
dea4a67

work/filename
103b0ee

work/subfolder/filename
387b384

work/filename
741bbc7

filename

etc...

我确实:g/filename/norm kkJJ加入了他们:

21acc7c work/oldname
dea4a67 work/filename
103b0ee work/subfolder/filename
387b384 work/filename
741bbc7 filename

这让我可以将事情正则表达式转换成我需要的东西,尽管我不得不跳过一些环节来保持事情的排序,因为 git 只存储到第二个,而 rebase 往往会同时创建许多提交。养育保持顺序,但这意味着我必须处理循环中的顺序,而不是基于任何类似git showgit log信息。

于 2013-05-17T11:19:15.697 回答