Git diff-仅包含完整文件路径的名称

Git diff-仅包含完整文件路径的名称,git,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 这正是问题所在,因为我希望包含

目前正在使用:

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
这正是问题所在,因为我希望包含顶层之前的路径

只需自己添加顶级:

git rev-parse --show-toplevel
打印Git存储库的路径

通过例如,
sed-e“s,^,$path,”
(假设路径名中没有逗号)输入diff
--仅名称
输出:

编辑#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表达式,而不是基于torek的答案硬编码
--name only
--name status
,我使用
--line prefix
标志在一行中实现了这一点:

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

如果您尝试在该页上运行答案,则输出可能与我解释的内容不同。我正在寻找git文件夹之外的系统文件路径,这个答案似乎只解释了git文件夹内的文件路径。但有一件事做不到,那就是包括添加的modified deleted标记(它显示在名称状态中),我想我可以以某种方式将它附加到命令的后面。但是,如果有一种更理想的方法来执行类似于“a/User/github/README.md M/User/github/Test.txt”这样的操作,那么这是针对
——仅限name
。要处理
--名称状态
,请使用文字选项卡。我会把它编辑成答案。为什么不呢
git diff--name only--line prefix=“${PWD}/”HEAD master
rev parse答案对我来说很有效。如果您当前在repo根目录下,PWD可以工作。@Gi0rgi0s PWD是shell的当前目录,因此可靠性要低得多
git diff --name-only --line-prefix=`git rev-parse --show-toplevel`/ HEAD release