无法使git不忽略一个子目录,即使在gitignore中排除了它。

4
在我的.gitignore文件中,我忽略了一个目录,就像这样:
var 然后我意识到我想要追踪var/package及其所有内容。 所以,我已将该排除项添加到gitignore中。 我尝试了许多组合,但已经决定采用以下组合,因为从其他讨论来看,这似乎是最合理的,特别是在这里
!var/
var/*
!var/package
!var/package/
!var/package/*

但是,每当新文件被写入var/package时,它们都不会被检测到。如果我明确使用--force命令添加它们,则它们会被添加,但无法通过通常的程序(如git add .)添加。

我需要发出哪个命令来重置.gitignore以现在最终接受新的gitignore指令?我有遗漏什么吗?

1个回答

8

从.gitignore文件中移除与var相关的任何内容。创建一个var/.gitignore文件,并将以下内容添加到其中:

/*
!/package

你显然需要执行git add -f var/.gitignore,但之后一切应该都会顺利。

另一个选项是,在你的顶级 .gitignore 文件中添加以下内容:

/var/*
!/var/package

如果两个都不起作用,请输入find . -name .gitignore | xargs egrep .cat .git/info/exclude,并告诉我们它们返回的内容。

1
谢谢,Seth!最初这两个方法都没有起作用,这让我去尝试你的故障排除“查找”步骤,从而让我意识到问题所在。我使用了一个来自GitHub的通配符.gitignore文件,其中某些内容导致了这个问题。我删除了除了我的忽略文件之外的所有内容,然后你提到的两种方法都可以正常工作了。 - Joe Fletcher
@Seth,在var之前加上和不加上/的区别是什么? - toolchainX
5
@toolchainX: "Leading /" 表示路径根据当前目录。 "/var" 意味着忽略当前目录中名为 "var" 的文件/目录。 "var" 意味着忽略此目录或任何子目录中命名为 "var" 的任何文件/目录。而完整的写法 "var/" 意味着忽略此目录或任何子目录中命名为 "var" 的任何目录。"/var/" 的作用您可能已经猜到了。 - Seth Robertson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接