是否有现有命令,或某些技巧或脚本允许我显示"ls"中显示的文件的状态?
类似于以下内容:
$ git ls status #Command could be anything `lsg` is fine too, whatever.
app contents modified
autotest up-to-date
config up-to-date
config.ru staged
db contents modified
doc contents modified
Gemfile modified
Gemfile.lock modified
lib up-to-date
log up-to-date
public up-to-date
Rakefile up-to-date
README up-to-date
script up-to-date
spec up-to-date
tmp up-to-date
vendor contents modidified
test.tmp removed
Run Code Online (Sandbox Code Playgroud)
以任何方式:在目录列表中提供git状态信息.
Dan*_*ruz 11
使用Git状态短格式信息,这是一个使用Awk的Bash脚本和column命令为您提供自定义状态输出.
#!/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 " "
Run Code Online (Sandbox Code Playgroud)
如果你git-status-ls在你的目录中创建一个可执行文件PATH($HOME/bin应该是一个好地方),你可以输入git status-ls任何Git仓库.或者你可以为此创建一个Git别名单行.您也可以使用Perl,Python,C或您最熟悉的任何语言来实现它.
这是一个示例输出:
B renamed in index
A untracked
dont_delete_git_pre-commit_hook untracked
Run Code Online (Sandbox Code Playgroud)
刚刚意识到,标签显示为空格.在Awk脚本print f " " stat;和column -t -s " "命令中,双引号之间有一个制表符(不是空格).您可以使用tab以外的分隔符.
注意到上述脚本中的状态标志处理问题并进行了更正.
小智 6
ls我想要这样的东西 - 只用 git 的状态注释常规输出的东西。我非常喜欢k另一个答案中提到的命令,但它是 zsh 特定的。因此,我编写了一个 bash 脚本,它可以放在我的库中,并从我使用的任何 shell 运行,并且修改输出ls以添加来自 git 的额外信息。
https://github.com/gerph/ls-with-git-status/
\n\n由于它修改了 的输出ls,因此您可以使用任何[1] 开关运行它ls,它将修改输出以包含 git 信息。它没有完全使用问题中要求的描述,但它确实描述了文件、存储库和子模块的更改状态。
一个例子:
\n\ncharles@laputa ~/projects/prm (add-ci-build-support)> lsg\nMakefile {ignored}\nartifacts {ignored}\nbuild-to-junitxml.yaml {untracked}\ncatalog\nci (replace-bash-junit-xml-processor\xe2\x86\x934 19 forward) {1 modified}\nci-logs {ignored}\ndo-build.sh\nindex-makefile-ro.xsl\nindex-makefile.xsl\nindex.xml\nindex.xsl {modified locally, 3 lines}\nlogs {ignored}\nold-header {untracked}\noutput {ignored}\nproject.config\nsrc\ntest-results.xml {untracked}\ntmp {ignored}\nRun Code Online (Sandbox Code Playgroud)\n\n上文中:
\n\n{ignored}显示为灰色){untracked}显示为红色){modified locally, 3 lines}显示为黄色,表示已修改){}注释是关于文件或目录的。()注释是关于存储库的。ci是一个存储库:\n\nreplace-bash-junit-xml-processor(分支名称为青色,后面的更改数量为蓝色)19 forward黄色表示已修改)1 modified黄色为已修改)颜色是从 .git 中使用的 git 配置中读取的git status。
[1] 一些开关没有意义 - 它强制每个文件 1 行,并且不支持直接模式或某些其他格式。
\n| 归档时间: |
|
| 查看次数: |
2940 次 |
| 最近记录: |