【问题标题】:How do I cat revisions of a file, following it through renames?如何通过重命名跟踪文件的修订?
【发布时间】:2013-05-17 09:12:00
【问题描述】:

我可以做到这一点:

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

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

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

【问题讨论】:

    标签: git history


    【解决方案1】:

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

    `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 只存储到第二个,而变基往往会同时创建许多提交。养育保持顺序,但这意味着我必须在循环中处理顺序,而不是基于git showgit log 信息之类的任何东西。

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2017-08-04
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多