版本控制-如何运行“ git status”并仅获取文件名

相对于漫长的相对路径?

myusuf3 asked 2019-11-18T14:30:39Z
7个解决方案
74 votes

git status --porcelain的输出设计为易于在脚本中进行解析,无论当前目录在树中的何处,都将输出完整路径而不是相对路径。

git status --porcelain输出的每一行都有两个前导字符,以指示文件的状态(例如,是否未跟踪,已修改,新的,已删除等),后跟一个空格,因此,如果您只想要要在其中提及的所有内容的完整路径, 您可以执行git status的输出:

git status --porcelain | sed s/^...//
Mark Longair answered 2019-11-18T14:31:11Z
56 votes

我认为削减对这个有好处。

git status -s | cut -c4-
earlonrails answered 2019-11-18T14:31:36Z
43 votes

啊哈,我想我只是明白了一个问题:您想要基名吗? 将git diff --name-only HEAD粘贴到以下任意一项:

怎么样

  • git diff --name-only HEAD

    用于相对于索引的更改

  • git diff --name-only HEAD

    对于...分阶段进行的变更:)

  • git diff --name-only HEAD

    都有

sehe answered 2019-11-18T14:32:51Z
7 votes

按照您的要求,仅获取文件名:

git status --porcelain | sed -e 's!.*/!!'

我看不出这有什么用。

Johnsyweb answered 2019-11-18T14:33:29Z
3 votes

git status将始终在树上向下走(编辑和向上)并显示相对路径。 如果只希望文件位于您所在的目录中,请参阅此相关答案

Dan McClain answered 2019-11-18T14:33:54Z
3 votes

获取修改文件的名称

git status --porcelain|awk '{if($1=="M") {print "basename " $2}}'|sh

我使用类似的脚本将修改后的文件复制到远程服务器,如下所示:

git status --porcelain|awk '{if($1=="M") {print "scp " $2 " account_name@server_ip:~/my_codebase/$(dirname " $2 ")/;"} }'|sh
You-Liang Shih answered 2019-11-18T14:34:35Z
3 votes

git status输出相对路径,因此,如果在运行git status之前将cd定位到与文件相同的目录(在工作目录的根目录下),它将仅输出已添加/暂存文件的基本名称。

cd /long/path/to/my/repo/root/dir
"stuff" > ./newfile.txt
> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   /long/path/to/my/repo/root/dir/plus/some/more/levels/of/directory/structure/inside/it/changed_file.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#       long/path/to/my/repo/root/dir/plus/some/even/more/levels/of/directory/structure/inside/it/but_another_new_file.txt
#       newfile.txt
no changes added to commit (use "git add" and/or "git commit -a")

也就是说,列出的“ newfile.txt”没有完整路径,因为您所处的路径与此相同。

Stassa Patsantzis answered 2019-11-18T14:35:09Z
translate from https://stackoverflow.com:/questions/5237605/how-can-i-run-git-status-and-just-get-the-filenames