【问题标题】:How to make git log show file paths relative to current directory?如何使 git log 显示相对于当前目录的文件路径?
【发布时间】:2017-09-30 17:35:42
【问题描述】:

我目前正在从事的基于 Git 的项目,我通常总是在一个子目录中。

以下是我从存储库根目录的子目录运行命令git log --name-only 时的输出。

commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date:   Mon Mar 27 09:36:24 2017 +1300

    Commit message

 child_dir1_from_root/file1                     |  184 +--
 child_dir2_from_root/file2                     |    2 +-

我如何改为让git log 输出类似下面的内容?这使得比较列出的文件变得非常容易,只需复制文件路径并运行git diff HEAD~ {copied_file_path},而不必手动修改文件路径然后运行命令。

commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date:   Mon Mar 27 09:36:24 2017 +1300

    Commit message

 file1                                          |  184 +--
 ../child_dir2_from_root/file2                  |    2 +-

我查看了git log 文档,但没有什么特别突出的。我可以编写一个脚本来执行此操作,但我很好奇 Git 是否有内置方式。

【问题讨论】:

    标签: git diff git-diff git-difftool


    【解决方案1】:

    您可以将--relative='PATH' 添加到您想要的子目录中。

    【讨论】:

    • 嗯,这似乎排除了指定目录之外的更改,这不是我想要的。
    【解决方案2】:

    为了在git log --name-only 的输出中使用路径,请将选项--git-dir 添加到git diff

    git --git-dir="$(git rev-parse --show-toplevel)"/.git diff HEAD~ child_dir1_from_root/file1
    

    为了方便使用,请在配置中创建一个别名。

    [alias]
            mdiff = "! git --git-dir=\"$(git rev-parse --show-toplevel)\"/.git diff"
    

    git mdiff HEAD~ child_dir1_from_root/file1 现在只要当前目录属于工作树就可以工作。

    【讨论】:

    • 漂亮!别名方法工作正常,但直接在命令行运行会抛出错误(致命:Not a git repository: '$(git rev-parse --show-toplevel)/.git')。
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多