从git status bash输出创建字符串数组

时间:2014-03-25 18:01:03

标签: git bash

我正在尝试创建我修改过的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所以我不知道如何将原始输出转换成我的东西可以合作。

3 个答案:

答案 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可以是:

  • 添加文件
  • C复制文件
  • D已删除文件
  • M修改过的文件
  • 等。查看手册。

您还可以尝试支持-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