我正在尝试创建我修改过的git文件的字符串数组,以便我可以在bash程序中使用它们。样本输出:
On branch restructured
Your branch is up-to-date with 'origin/restructured'.
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: path/to/file1
modified: path/to/file2
我试图在modified:
之后抓取文本但是从我发现的grep不是support new line所以我不知道如何将原始输出转换成我的东西可以合作。
答案 0 :(得分:6)
如果您真的只想要修改过的文件列表,请考虑git ls-files -m
。如果您需要可扩展到可能的其他类型的更改:
git status --porcelain | while read -r status file; do
case "$status" in
M) printf '%s\n' "$file";;
esac
done
答案 1 :(得分:2)
怎么样:
files=(git status | grep '^\s*modified:' | cut -f 2- -d :)
从内到外阅读:
git
状态传递给grep
,其中modified:
行,然后$files
答案 2 :(得分:0)
你看错了。
Git“status”是一个源自许多基础命令的漂亮视图。
使用
检索“已更改”文件的列表$ git diff --name-only --diff-filter=M
modifiedfile.txt
diff-filter可以是:
您还可以尝试支持-d,-m,-a和-o的 ls-files 。
如果您要查找尚未跟踪的新文件,可以尝试
$ git ls-files -o
untrackedfile.txt
作为最后的手段,如果您真的坚持尝试解析git-status的输出,请考虑使用'--short'或'--porcelain'输出选项。 --short产生彩色输出, - 瓷器避免。
$ git status --short
M modifiedfile.txt
?? untrackedfile.txt