Git管道 - 快速查看目录中是否有任何未分级的文件

时间:2016-08-22 08:52:03

标签: git bash

在bash脚本中,我想知道目录中是否存在未分级的文件。

我能得到的最接近的是检查退出代码:

git ls-files --other --error-unmatch --exclude-standard --directory "$folder/" > /dev/null 2>&1

有两个缺点。

  1. 我必须使用不同的命令检查文件是否未分级(由于斜杠)
  2. 这将在退出前将所有文件打印到/dev/null,这可能需要很长时间才能完成某些回购
  3. 理想情况下,我想在找到未跟踪文件时立即停止播放 - 我不需要知道它们是什么,只要它们在那里

2 个答案:

答案 0 :(得分:2)

如果您对git命令感到满意,可以输入grep -q,其返回码将告诉您是否有任何输出:

git ls-files --other --exclude-standard --directory "$folder/" | grep -q .

一旦grep收到任何输入,模式.就会匹配,并且它会成功退出。

要抑制错误输出,您可以将整个内容包装在花括号{ }中,并将2>/dev/null添加到最后。

另一种选择是解析git status的输出。例如,要查看输出中的任何文件是否具有以$directory开头的路径,您可以使用:

git status --porcelain | awk -v dir="$dir" 'index($2, dir) == 1 { found = 1; exit } END { exit !found }'

如果您的awk版本支持将记录分隔符设置为空字节,则可以改为使用git status -z

git status -z | awk -v RS='\0' -v dir="$dir" 'index($2, dir) == 1 { found = 1; exit } END { exit !found }'

要过滤掉未跟踪的文件,您可以添加“$ 1!=" ??"”的检查:

git status -z | awk -v RS='\0' -v dir="$dir" '$1 != "??" && index($2, dir) == 1 { found = 1; exit } END { exit !found }'

答案 1 :(得分:0)

不确定它是更快还是更慢,但git clean -n会列出未上传的文件。

这并不能解决第一个非分段文件"停止的问题。找到了,但似乎没有好办法做到这一点。