2014-03-25 63 views
1

我想創建一個修改後的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 

我tryig modified:後,但搶到了文本我學到了什麼的grep不support new line所以我很茫然,我怎麼能原始輸出轉換成的東西我可以與...合作。

+3

我建議以'git的狀態--porcelain',這是專門對易於(-er)面向解析... – twalberg

回答

2

如何:

files=(git status | grep '^\s*modified:' | cut -f 2- -d :)

從內到外閱讀,認爲:

  • 通行證git狀態grep,其中
  • 尋找與modified:對他們單獨,然後
  • 剪切掉那些行結腸後,最後
  • 把那到一個數組分配給$files
+1

怎麼樣files = $(git ls-files -m) – Dave

5

如果你真的只想要一個修改文件列表,請考慮git ls-files -m。如果你需要的東西擴展到潛在的其他類型的變化:

git status --porcelain | while read status file; do 
    case $status in 
    M) printf '%s\n' "$file";; 
    esac 
done 
+2

+1'git的LS-文件-m' – Nick

0

您正在尋找這個問題是錯誤的。

Git「status」是一個從許多底層命令派生而來的漂亮視圖。

的 「改變」 的文件的列表與

$ git diff --name-only --diff-filter=M 
modifiedfile.txt 

DIFF-濾波器檢索可以是:

  • 甲添加的文件
  • Ç複製的文件
  • d刪除的文件
  • M修改後的文件
  • etc .. chec k手冊。

您也可以嘗試LS-文件支持-d,-m,-a和-o。

如果您正在尋找中尚未跟蹤新文件,你可以嘗試

$ git ls-files -o 
untrackedfile.txt 

作爲最後的手段,如果你真的堅持嘗試解析從git的狀態輸出,可以考慮使用'--short'或'--porcelain'輸出選項。 - short產生彩色輸出,這是 - 瓷器避免。

$ git status --short 
M modifiedfile.txt 
?? untrackedfile.txt