如何告诉git忽略像git status这样的操作的子目录(它们是存储库的一部分)

时间:2011-03-24 20:32:26

标签: git

我有一个包含许多子目录的存储库。我知道一个事实,我不会对其中一些做出改变。有没有办法告诉'git status'和其他扫描整个文件系统的操作不打扰这些目录,从而加快了这些操作的速度?

4 个答案:

答案 0 :(得分:3)

也许将它们放入.git / info / exclude中,这基本上和.gitignore一样,但是你不会触及存储库内容。

答案 1 :(得分:3)

我假设“[他们]是存储库的一部分”(在你的问题标题中),你的意思是你想要跳过的子目录实际上包含跟踪文件,并且你想避免git status检查甚至那些跟踪文件的状态。

默认情况下,git status会检查所有跟踪的路径。它没有用于跳过预设路径列表的任何选项,但它确实需要pathspec个参数来指定它应该检查的路径(隐式地,将跳过其他路径)。

要直接使用可用的可用功能,您必须解决问题:如何仅显示某些文件和目录的状态?

答案是您只需在命令行中列出它们即可。例如,如果我们只想了解srcdoc(可能都是目录)和Makefile

git status src doc Makefile

每次输入都很麻烦,因此您可能希望使用shell脚本和/或Git别名。

然而,只有在您可以定义您感兴趣的路径集而不说“除X,Y和Z之外的所有内容”时,这才有效。 Git不包括对“除......之外的所有内容”(但 1 )的支持,因此您必须依赖其他内容来扩展列表并将其提供给git status。有些shell具有可以提供帮助的功能。

示例:处理当前目录中的所有条目(包括“点”文件/目录),只要它们不匹配.V.W(即以点开头的模式), XY

  • 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)

.gitignore文件将处理此问题。

在存储库的根目录中创建它。文档:

http://git-scm.com/docs/gitignore

答案 3 :(得分:0)

在您拥有git repo的目录中,创建/编辑.gitignore文件并添加以下内容:

dir1/
dir2/

将忽略dir1和dir2。