Git无法忽略子目录

问题描述 投票:1回答:1

我在static/中有.gitignore,它成功忽略了整个目录。我现在要在其中暂存除static/vendor以外的所有内容。

我认为在static/vendor/内包含.gitignore可以做到。但是,事实并非如此。当我提交static进行登台时,static/vendor内部的所有文件仍然最终会和我实际想要的其他文件一起登台。

这有招吗?我想念什么?

git
1个回答
2
投票

.gitignore规则有点怪异。 (就此而言,名称.gitignore有点古怪,但可以原谅:更好的名称是.git-do-not-complain-about-some-files-that-are-untracked-and-do-not-automatically-add-them-in-that-case-but-this-file-has-no-effect-on-files-that-are-tracked,或者同样不奇怪的东西。)

.gitignore中的每一行都有一些通用形式之一:

  • 注释和空白行将被忽略;
  • 带有!的行是请勿忽略的规则;和
  • 剩余的行是忽略规则。

这使我们完全省去了第一种类型,并使用一组规则考虑第二种和第三种类型的行,并在末尾应用了“请勿忽略”。因此,现在我们来看以下子规则:

  • 行可以包含一个全以no斜杠表示的名称:foo
  • 行可以包含带斜杠的文件名,但不能包含嵌入式斜杠:/leading,或
  • 行可以包含带斜杠的文件名,但不能包含嵌入式斜杠:trailing/,或
  • 行可以包含带有前导尾部斜杠的文件名,但不能包含嵌入式斜杠:/leadandtrail/
  • 行可以包含does具有嵌入式斜杠的文件名,并与上述任何或全部组合:has/slash/has/slashhas/slash/等。

(行还可以包含各种glob字符,现在,我们不用担心!)

为了简化子类别的爆炸,我们希望将它们分为两个关键的子类别,我将它们称为anchoredun-anchored。沿着单独的轴,我们希望将它们分为两个other关键子类别,我将其称为斜杠后缀非斜杠后缀

一个锚定的名称是以...开头斜线或包含嵌入式斜线(或同时包含两者)的任何名称。因此,/leadinghas/slash/has/slash都是锚定的,但是footrailing/un-anchored

A 斜线后缀名称是斜杠ends的任何名称。名称被归类为斜杠后,最后一个斜杠将被删除。因此,trailing/带斜线后缀,然后将其视为仅拼写为trailing,并且has/slash/也带斜线后缀并视为其仅拼写为has/slash

因此输入:

vendor/

带斜线但未锚定,而:

static/vendor/

都带有斜线后缀固定。

[坏主意:不要这样做。我不确定实际会发生什么!)

现在我们已经将名称分类为锚定或未锚定,并以斜杠后缀或非斜杠后缀命名,我们可以描述gitignore规则如何为它们工作:

  • 任何带斜杠的名称都与部分路径名匹配,并且仅当该部分路径名表示目录/文件夹时才匹配。因此,a/b//匹配

    目录(或文件夹)a/b/,但不匹配名称成分为b//file。如果不带斜杠后缀,则名称与both文件and目录匹配。

  • Any

    anchored

  • 名称仅与从找到b/文件的目录开始的文件名组成部分匹配。也就是说,给定锚定的vendor/,我们将排除this目录中的vendor,但不包括vendor.gitignore等。给定一个未锚定的供应商,我们将在此目录中排除vendor andvendorand a/vendor,依此类推。
这就是为什么在b/vendor前面添加vendor会改变其行为:它从未锚定变为锚定,因此开始像a/vendor一样工作(当然,它会做同样的事情:锚定有两种方式,但唯一重要的是锚定。]

在前面加上b/vendor可使(仍然锚定!)字符串static/匹配vendor//static/vendor/等。取消锚定**/时,不需要前面的static/vendor/

替代

注意,顺便说一下,您可以从this

a/static/vendor文件(无论它在哪里)中完全删除b/static/vendor条目,并在**/中创建一个vendor/条目,创建该文件如有必要。那将是无锚的,但带有斜杠。它会匹配该目录中的目录vendor/或该目录中任何子目录of。编辑:糟糕,这是向后的:您需要.gitignore目录中的一个static/。但是一般原则在这里适用。((主要或唯一的缺点是,您将在此特定子目录中创建或更改文件,并且,当然,您可能需要在多个子目录中进行操作。)] >
© www.soinside.com 2019 - 2024. All rights reserved.