Git diff-仅具有完整文件路径的名称

时间:2019-02-14 19:37:49

标签: git

当前使用:

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的路径 这正是我希望将顶层之前的路径包括在内的问题。

2 个答案:

答案 0 :(得分:2)

只需自己添加最高级别:

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/,"
}

花一点时间,您可以使其从--name-only部分中选择--name-status$@并计算正确的sed表达式,而不是对--name-only进行硬编码或--name-status

答案 1 :(得分:0)

基于torek的答案,我能够使用--line-prefix标志在一行中实现此目标:

git diff --name-only --line-prefix=`git rev-parse --show-toplevel`/ HEAD release