Sử dụng trạng thái Git short format thông tin, đây là tập lệnh Bash sử dụng lệnh Awk và lệnh column
để cung cấp cho bạn đầu ra trạng thái tùy chỉnh.
#!/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 " "
Nếu bạn tạo một thực thi git-status-ls
trong một thư mục trên PATH
($HOME/bin
phải là một nơi tốt), bạn có thể gõ git status-ls
trong bất kỳ repo Git. Hoặc bạn có thể tạo một bí danh Git một lớp lót cho việc này. Bạn cũng có thể thực hiện điều này bằng Perl, Python, C hoặc bất kỳ ngôn ngữ nào bạn cảm thấy thoải mái nhất.
Dưới đây là một đầu ra mẫu:
B renamed in index
A untracked
dont_delete_git_pre-commit_hook untracked
Chỉ cần nhận ra, tab được hiển thị như không gian. Trong tập lệnh Awk print f " " stat;
và trong lệnh column -t -s " "
, có một tab (không phải dấu cách) giữa dấu ngoặc kép. Bạn có thể sử dụng dấu tách khác với tab.
Nhận thấy có vấn đề với cờ trạng thái được xử lý trong tập lệnh ở trên và đã sửa nó.
Nguồn
2012-01-04 14:10:38
Những gì bạn sẽ tranh luận là lợi ích của định dạng này trên 'git status'? – Nate
@Nate: Nó cung cấp một birdseye tốt hơn, IMO. Đặc biệt hữu ích nếu nhiều tệp đã bị thay đổi. Nhưng cũng để xem những thay đổi trong bối cảnh của toàn bộ danh sách dir là hữu ích. – berkes
Gần nhất có thể là 'git status -s', nhưng nó sẽ không báo cáo bất cứ điều gì khác ngoài sửa đổi – fge