Git:仅当目录没有跟踪文件时才忽略目录

Git:仅当目录没有跟踪文件时才忽略目录,git,gitignore,git-status,Git,Gitignore,Git Status,我有一个git存储库,如果我还没有在目录中添加文件,我希望git status忽略所有目录(以及下面的所有内容)。将/*添加到.gitignore几乎可以做到这一点。我可以创建新的目录,将文件放入其中,git status将完全不受影响 然后我创建了一个新目录,并在那里放了一个文件“directory/file”。然后我git添加目录,git提交,并在这个目录中创建一个新文件,比如“directory/newfile”。问题是git status不会显示新文件 我尝试添加/*/*到.gitign

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

然后我创建了一个新目录,并在那里放了一个文件“directory/file”。然后我
git添加目录
git提交
,并在这个目录中创建一个新文件,比如“directory/newfile”。问题是
git status
不会显示新文件


我尝试添加
/*/*
.gitignore
但它没有做任何我能说的事情。如何获取git状态以显示包含跟踪(添加)文件的目录中的新文件,同时忽略没有跟踪文件的目录?

git本身不存储目录。文件路径是节点数据的一个属性,如果没有文件,就没有节点<如果“目录”为空,则code>git add directory在任何情况下都应无效
git status
会将新创建的文件显示为未跟踪,除非您将其忽略。尝试
git add directory/newfilename
,我不确定.gitignore是否会阻止显式添加,但我认为不会。如果是这样,您必须更改.gitignore以允许该目录(联机语法中有很多信息)

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

其他答案谈到git没有跟踪目录,这是正确的,但没有回答这个问题

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

其次,
git add directory
无法使用ignore模式
git add
会失败,因为路径被忽略,您必须使用
-f
。是的,目录(及其内容)只能添加一个
git add-f目录

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


因此,每次添加目录时,还必须显式地取消对该特定目录的命名。因此,您必须添加类似于
的内容/目录
到您的.gitignore。

是否可以使用提交挂钩自动添加
/目录
.gitignore
?@JonasHeidelberg-是的,可能。您可以使用
git diff--cached--name only--diff filter=A
并将目录添加到unignore中,我想是从.gitignore。感谢您提供了如此丰富的信息和帮助!我正在尝试实现一个dotfiles系统。不过,这种方法可能有点太麻烦了-P我可能会使用基于[RM]文件的系统。