Git结帐/拉不会删除目录?

我有我的回购@ github。 我在家里做了一些工作,把它推到github上。 它涉及到一些文件和目录的删除。 现在我在我的工作箱上,它删除了文件和目录之前有一个代码的副本。

我发表了以下内容:

git remote update git checkout HEAD git pull origin HEAD 

它删除了它应该有的所有文件,而不是文件所在的目录。

两个问题:

  1. 为什么不删除目录?
  2. 有一个git命令,我可以在当前状态下删除它们?

Git不会跟踪目录,所以它不会删除由于合并或其他更改而变空的目录。 但是,您可以使用git clean -fd来删除未跟踪的目录( -fd标志意味着删除未跟踪的文件和目录)。

作为改变工作树(pull,merge,checkout等)的大多数操作的一部分,git将删除所有被该操作设为空的目录(即git删除了最后一个文件)。

git不会删除任何不完全空的目录,所以如果你有隐藏或忽略的文件,那么只是因为git从该目录中删除最后一个被跟踪的文件并不一定意味着git将能够删除该目录。 混帐不认为这是一个错误的条件,所以不会抱怨。

Git不跟踪目录,文件(及其path)。 如果path中包含的所有文件被移动或删除(不是很酷,但是有原因),那么Git会为这些path创build所有目录(酷!),但是它不会删除它们。

解决scheme (一旦你已经拉/快进/合并):

 git stash --include-untracked git clean -fd git stash pop 

如果你不clean ,你将失去所有未跟踪的文件(不可逆转地)。

注意:因为这也会清除所有被忽略的文件,所以您可能需要再次运行一些构build脚本来重新创build项目元数据(例如: ./gradlew eclipse )。 这也会删除空的目录,这些目录从来都不是git文件path的一部分。

Git目前没有跟踪目录(参见git wiki ), 也就是说,你既不能添加空目录,也不会删除最终为空的目录。 (编辑:谢谢,曼尼,我错了!你不能添加空的目录,但git将删除目录变成空的,因为他们的跟踪内容被删除。

至于删除空目录的命令:这取决于您的操作系统。

对于Linux你可以使用,例如,

 find -depth -type d -empty -exec rmdir {} \; 

但是,这将删除所有空目录!