我怎样才能运行“混帐状态”,只获取文件名
而不是相对较长的path?
git status --porcelain
的输出被devise成在脚本中很容易parsing,输出完整的path而不是相对path,而不pipe你的当前目录在树中的什么位置。
git status --porcelain
输出的每一行都有两个主要的字符,表示文件的状态(例如是否跟踪,修改,新build,删除等),然后是一个空格,所以如果你只想要所有在你可以做的git status
的输出中会提到:
git status --porcelain | sed s/^...//
我觉得削减对此是有好处的。
git status -s | cut -c4-
啊哈,我想我只是明白了这个问题 :你想要基名? 坚持| while read a; do basename "$a"; done
| while read a; do basename "$a"; done
| while read a; do basename "$a"; done
以下任何一项:
怎么样
-
git diff --name-only
相对于索引的变化
-
git diff --name-only --staged
为…以及上演的chages 🙂
-
git diff --name-only HEAD
得到了两个
为了得到文件名 ,请按照你的要求:
git status --porcelain | sed -e 's!.*/!!'
我看不出这会如何有用。
git status
将总是走下来( 编辑并向上)树并显示相对path。 如果你只想要你目录中的文件, 请参阅相关的答案
获取修改文件的名称
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
git status会输出相对path,所以如果你在运行git status之前把文件cd(在你的工作目录的根目录下)cd到同一目录下,它将只输出被添加/ stage的文件的基名。
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”没有完整的path列出,因为你在同一条path。