我有一个包含许多子目录的存储库。我知道一个事实,我不会对其中一些做出改变。有没有办法告诉'git status'和其他扫描整个文件系统的操作不打扰这些目录,从而加快了这些操作的速度?
答案 0 :(得分:3)
也许将它们放入.git / info / exclude中,这基本上和.gitignore一样,但是你不会触及存储库内容。
答案 1 :(得分:3)
我假设“[他们]是存储库的一部分”(在你的问题标题中),你的意思是你想要跳过的子目录实际上包含跟踪文件,并且你想避免git status
检查甚至那些跟踪文件的状态。
默认情况下,git status
会检查所有跟踪的路径。它没有用于跳过预设路径列表的任何选项,但它确实需要pathspec个参数来指定它应该检查的路径(隐式地,将跳过其他路径)。
要直接使用可用的可用功能,您必须解决问题:如何仅显示某些文件和目录的状态?
答案是您只需在命令行中列出它们即可。例如,如果我们只想了解src
,doc
(可能都是目录)和Makefile
:
git status src doc Makefile
每次输入都很麻烦,因此您可能希望使用shell脚本和/或Git别名。
然而,只有在您可以定义您感兴趣的路径集而不说“除X,Y和Z之外的所有内容”时,这才有效。 Git不包括对“除......之外的所有内容”(但 1 )的支持,因此您必须依赖其他内容来扩展列表并将其提供给git status
。有些shell具有可以提供帮助的功能。
示例:处理当前目录中的所有条目(包括“点”文件/目录),只要它们不匹配.V
,.W
(即以点开头的模式), X
或Y
:
zsh 启用了 EXTENDED_GLOB 选项(setopt EXTENDED_GLOB
),
git status ^(.V|.W|X|Y)(D)
如果您还启用了 GLOB_DOTS ,则可以不使用(D)
。
bash 启用了 dotglob 和 \ textglob 选项(shopt -s extglob dotglob
):
git status !(.V|.W|X|Y)
ksh (由于模拟 GLOB_DOTS ,“点”名称的模式有点奇怪):
git status .!(|.|V|W) !(X|Y)
同样,您可能希望将它们包装在脚本(或Git别名)中,而不是直接输入它们。
1 关于添加对“负面”路径规范(“除了......之外的所有东西”)的支持,已经有一些讨论,可以让你在没有shell帮助的情况下做到这一点,但是还没有坚定的设计或公共代码。
答案 2 :(得分:0)
答案 3 :(得分:0)