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

我发布了以下内容:

git remote update
git checkout HEAD
git pull origin HEAD

它删除了它应该拥有的所有文件,但没有删除文件所在的目录。

两个问题:

  1. 为什么不删除目录?
  2. 我可以在当前状态下发出 git 命令来删除它们吗?
有帮助吗?

解决方案

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

其他提示

作为大多数改变工作树的操作(拉取、合并、签出等)的一部分,git 将删除该操作清空的任何目录(即git 删除了最后一个文件)。

git 不会删除任何不完全为空的目录,因此如果您隐藏或忽略了文件,那么只是因为 git 删除了最后一个 被跟踪的 该目录中的文件并不一定意味着 git 能够删除该目录。git 不认为这是一个错误情况,因此不会抱怨它。

Git 不跟踪目录、文件(及其路径)。如果这些路径尚不存在,Git 会为它们创建所有目录(酷!),但是它确实存在 不是 如果路径中包含的所有文件都被移动或删除,则删除它们(不酷☹...但这是有原因的)。

解决方案 (一旦您拉动/快进/合并):

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

如果你不这样做 stashclean, ,您将丢失所有未跟踪的文件(不可逆)。

笔记:由于这也会清除所有被忽略的文件,因此您可能需要再次运行一些构建脚本来重新创建项目元数据(例如: ./gradlew eclipse)。这还会删除空的目录,并且这些目录从来不是 git 文件路径的一部分。

Git 当前不跟踪目录(请参阅 git 维基), 也就是说,您既不能添加空目录,也不能 git 删除最终为空的目录。 (编辑: 谢谢曼尼,我错了!你不能 添加 空目录,但 git 会 消除 由于跟踪内容被删除而变空的目录。)

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

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

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

但是,这将删除 全部 空目录!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top