Git:只有在没有跟踪文件的情况下才忽略目录

时间:2011-10-08 07:32:19

标签: git gitignore git-status

我有一个git存储库,如果我还没有在目录中添加文件,我希望git status忽略所有目录(以及下面的所有内容)。将/*添加到.gitignore几乎可以解决问题。我可以创建新目录,将文件放入其中,git status将完全无视。

然后我创建一个新目录并将文件放在那里,“目录/文件”。然后我git add directorygit commit,并在此目录中创建新文件,例如“directory / newfile”。问题是git status不会向我显示新文件。

我尝试将!/*/*添加到.gitignore,但据我所知,它没有做任何事情。如何让git status在包含跟踪(添加)的文件的目录中显示新文件,同时忽略没有跟踪文件的目录?

3 个答案:

答案 0 :(得分:2)

其他答案谈论git不跟踪目录,这是正确的,但不回答问题。

首先,/*不仅会忽略目录及其内容,还会忽略回购根目录中的文件。它忽略了一切。我不确定这是你想要的。如果没有,请尝试更改/*/

其次,git add directory不适用于忽略模式。 git add会失败,说道路被忽略,你必须使用-f。是的,目录(及其内容)只能添加git add -f directory

现在,你已经添加并提交了目录,当你在其中放入一个新文件时,git status将不会显示你,因为当然,它被忽略了。 Git不会进入目录寻找未跟踪的文件。但是,当然,对已经跟踪的文件的修改将处于git状态。此外,git add directory/newfile将失败,并显示有关使用-f的相同消息。

因此,每次添加目录时,您还必须显式取消该特定目录的取消。因此,您必须向.gitignore添加类似!/directory的内容。

答案 1 :(得分:0)

Git不会自己存储目录。文件路径是节点数据的属性,如果没有文件,则没有节点。如果'directory'为空,git add directory在任何情况下都不会起作用。 git status会将新创建的文件显示为未跟踪,除非您忽略它。试试git add directory/newfilename,我不确定.gitignore是否会阻止显式添加,但我认为不会。如果是这样,你将不得不改变.gitignore以允许该目录(在线语法有很多关于语法的信息)。

答案 2 :(得分:0)

Git无法跟踪目录。它不会存储空目录,这就是为什么你经常在想要拥有“空”文件夹的项目中找到名为“.keep”的文件。