3

目前使用:

git diff -name-status

现在这只会给我以下输出:

README.md
created.txt
test.txt

但是我正在寻找更像这样的东西:

/User/github/README.md
/User/github/created.txt
/User/github/test.txt

有谁知道这样的事情是否可能?

澄清一下:来自链接帖子的评论指出:所有输出都将返回相对于 git rev-parse --show-toplevel 的路径,这正是问题所在,因为我希望包含顶级之前的路径。

4

2 回答 2

11

--line-prefix基于 torek 的回答,我能够使用标志在一行中实现这一点:

git diff --name-only --line-prefix=`git rev-parse --show-toplevel`/ HEAD release
于 2019-11-19T16:36:55.810 回答
4

只需自己添加顶层:

git rev-parse --show-toplevel

打印 Git 存储库的路径。

--name-only通过例如sed -e "s,^,$path,"(假设您的路径名中没有逗号)提供差异输出:

git-diff-with-abs-path() {
    local path

    path=$(git rev-parse --show-toplevel) &&
    git diff --name-only "$@" | sed "s,^,$path/,"
}

编辑#2:对于--name-status,名称出现在文字标签之后,因此:

git-diff-with-abs-path() {
    local path tab=$'\t'

    path=$(git rev-parse --show-toplevel) &&
    git diff --name-status "$@" | sed "s,$tab,$tab$path/,"
}

稍微想一想,您可以让它从零件中挑选出来并计算正确的 sed 表达式,而不是硬编码--name-only或.--name-status$@--name-only--name-status

于 2019-02-14T20:02:11.580 回答