Gitステータスshort formatの情報を使用して、ここではAwkとcolumn
コマンドを使用してステータス出力をカスタマイズするBashスクリプトを示します。
#!/bin/bash
git status --porcelain | \
awk 'BEGIN {FS=" "}
{
xstat = substr($0, 1, 1);
ystat = substr($0, 2, 1);
f = substr($0, 4);
ri = index(f, " -> ");
if (ri > 0) f = substr(f, 1, ri);
if (xstat == " " && ystat ~ "M|D") stat = "not updated";
else if (xstat == "M" && ystat ~ " |M|D") stat = "updated in index";
else if (xstat == "A" && ystat ~ " |M|D") stat = "added to index";
else if (xstat == "D" && ystat ~ " |M") stat = "deleted from index";
else if (xstat == "R" && ystat ~ " |M|D") stat = "renamed in index";
else if (xstat == "C" && ystat ~ " |M|D") stat = "copied in index";
else if (xstat ~ "M|A|R|C" && ystat == " ") stat = "index and work tree matches";
else if (xstat ~ " |M|A|R|C" && ystat == "M") stat = "work tree changed since index";
else if (xstat ~ " |M|A|R|C" && ystat == "D") stat = "deleted in work tree";
else if (xstat == "D" && ystat == "D") stat = "unmerged, both deleted";
else if (xstat == "A" && ystat == "U") stat = "unmerged, added by us";
else if (xstat == "U" && ystat == "D") stat = "unmerged, deleted by them";
else if (xstat == "U" && ystat == "A") stat = "unmerged, added by them";
else if (xstat == "D" && ystat == "U") stat = "unmerged, deleted by us";
else if (xstat == "A" && ystat == "A") stat = "unmerged, both added";
else if (xstat == "U" && ystat == "U") stat = "unmerged, both modified";
else if (xstat == "?" && ystat == "?") stat = "untracked";
else if (xstat == "!" && ystat == "!") stat = "ignored";
else stat = "unknown status";
print f " " stat;
}' | \
column -t -s " "
あなたは($HOME/bin
が良い場所でなければなりません)あなたのPATH
上のディレクトリに実行可能git-status-ls
を作成する場合は、任意のGitのレポでgit status-ls
を入力することができます。あるいは、Gitエイリアスを1行作成することもできます。また、Perl、Python、Cなどの言語を使用して実装することもできます。ここで
は、サンプル出力です:ちょうど実現
B renamed in index
A untracked
dont_delete_git_pre-commit_hook untracked
、タブはスペースとして表示されます。 Awkスクリプトprint f " " stat;
とcolumn -t -s " "
コマンドには、二重引用符の間にタブ(スペースではない)があります。タブ以外のセパレータを使用することもできます。
上記のスクリプトでステータスフラグの処理に問題があったことを認識し、修正しました。
あなたは何を主張するだろうがのgit status' 'に対するこの形式の利点はありますか? – Nate
@ネイト:それはより良いbirdseye、IMOを提供しています。多くのファイルが変更された場合は特に便利です。しかし、ディレクトリリスト全体のコンテキストの変化を見ることも有用です。 – berkes
最も近いものはおそらく 'git status -s'ですが、変更以外のものは報告されません – fge