【问题标题】:git detect if there are untracked files quicklygit 快速检测是否有未跟踪的文件
【发布时间】:2012-06-16 18:56:12
【问题描述】:

有没有办法快速检测是否有未跟踪的文件?

我可以list all of the untracked files

git ls-files --other --directory --exclude-standard

但是如果有很多未跟踪的文件,这会很慢。有没有像git diff -q 这样的退出状态决定是否存在任何未跟踪的文件?

【问题讨论】:

    标签: git


    【解决方案1】:

    git status 将通知您任何未跟踪的文件。

    示例输出:

    remco@Prosperpine ~/code/Sick-Beard (master) $ git status
    # On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #   init.osx
    nothing added to commit but untracked files present (use "git add" to track)
    

    【讨论】:

    • 我觉得git ls-files还是比git status
    • 是的,事实上你是对的!我在 100000 个新文件的测试集上对这两个命令进行了计时。 git status 占用了real:0m0.927s,而ls-files 只占用了real:0m0.468s。 (答案不多,但也许很高兴知道)
    【解决方案2】:

    如果您在看到第一个未跟踪的文件时得到了想要的结果,请立即退出。

    如果你在 GNU/任何东西上

    git ls-files --other --directory --exclude-standard | sed q1
    

    如果有则设置 rc1

    否则,

    anyuntracked() {
        return `git ls-files -o --directory --exclude-standard | sed q | wc -l`
    }
    anyuntracked
    

    会做同样的工作

    【讨论】:

    • 要获得更符合git status的结果,请添加--no-empty-directory
    • 我认为这根本行不通。如果你对这个命令进行基准测试,它在使用和不使用 sed 时的速度完全相同。我怀疑 git 在所有输出可用之前不会刷新输出。
    • @user3467349 我不认为填充缓冲区所需的几十个文件名会增加足够的时间来打扰很多人,他说“很多”,但如果你有一些奇怪的布局分散在许多目录中很少有未跟踪的文件或其他东西总是有stdbuf 命令来强制在 ls-files 标准输出上进行行缓冲。
    • -d 将返回已删除文件的列表;它不是--directory的同义词
    • @tavnab 谢谢!固定。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 2018-07-21
    • 2012-03-28
    • 2017-03-15
    • 1970-01-01
    • 2011-07-09
    • 2015-01-11
    • 2012-01-18
    相关资源
    最近更新 更多