我的repo @ github我在家里做了一些工作,并把它推到了github上。它涉及一些删除文件和目录。现在我在我的工作盒上,在删除文件和目录之前,它有一个代码的副本。我发表了以下声明:
git remote update git checkout HEAD git pull origin HEAD
它删除了它应该拥有的所有文件,但没有删除文件所在的目录。两个问题:1.为什么不删除目录?1.在当前状态下,我可以发出一个git命令来删除它们吗?
u0njafvf1#
Git不跟踪目录,所以它不会删除由于合并或其他更改而变为空的目录。但是,您可以使用git clean -fd删除未跟踪的目录(-fd标志表示 force删除未跟踪的文件和 d 目录)。
git clean -fd
-fd
0sgqnhkj2#
我有同样的问题,在我的情况下,在构建服务(CI)..由于GIT在不清理文件夹的情况下拉取所有文件,因此CI先前构建的所有bin / obj都是脏的,因此如果我删除一个测试项目,bin仍将包含DLL并将提及不存在的测试。为了解决这个问题;这个命令似乎可以完成任务(至少对我来说)
git clean -fd -x
其中X将删除所有未跟踪的文件:-X只删除被Git忽略的文件。这可能有助于从头开始重建所有内容,但保留手动创建的文件。
u91tlkcl3#
作为大多数改变工作树的操作(pull,merge,checkout,等等)的一部分,git会删除所有被该操作清空的目录(例如:git删除了最后一个文件)。git不会删除任何非完全空的目录,所以如果你有隐藏或忽略的文件,那么仅仅因为git从该目录中删除了最后一个 tracked 文件并不一定意味着git能够删除该目录。git不认为这是一个错误条件,所以不会抱怨它。
qzwqbdag4#
Git不跟踪目录、文件(及其路径)。如果这些路径还不存在,Git会为它们创建所有目录(酷!),但是如果路径中包含的所有文件都被移动或删除,它不会不删除它们(不酷...但有原因)。
解决方案(拉取/快进/合并后):
git stash --include-untracked git clean -fd git stash pop
如果您在clean之前没有stash,您将丢失所有未跟踪的文件(不可逆)。注意:由于这也会清除所有被忽略的文件,因此您可能需要再次运行一些构建脚本来重新创建项目元数据(例如:./gradlew eclipse)。这也会删除那些空的目录,那些从来不是git文件路径的一部分的目录。
clean
stash
./gradlew eclipse
eh57zj3b5#
对我来说,目录是一个子模块,所以我需要运行-f两次:
-f
git clean -f -f -d
50pmv0ei6#
Git目前不跟踪目录(参见git wiki),也就是说,你既不能添加空目录,也不会删除最终为空的目录。(编辑:谢谢Manni,我错了!你不能 * 添加 * 空目录,但是git会 * 删除 * 那些因为被跟踪的内容被删除而变空的目录。)关于删除空目录的命令:这取决于你的操作系统。对于Linux,您可以使用,例如,
find -depth -type d -empty -exec rmdir {} \;
但是,这将删除所有空目录!
6条答案
按热度按时间u0njafvf1#
Git不跟踪目录,所以它不会删除由于合并或其他更改而变为空的目录。但是,您可以使用
git clean -fd
删除未跟踪的目录(-fd
标志表示 force删除未跟踪的文件和 d 目录)。0sgqnhkj2#
我有同样的问题,在我的情况下,在构建服务(CI)..由于GIT在不清理文件夹的情况下拉取所有文件,因此CI先前构建的所有bin / obj都是脏的,因此如果我删除一个测试项目,bin仍将包含DLL并将提及不存在的测试。
为了解决这个问题;这个命令似乎可以完成任务(至少对我来说)
其中X将删除所有未跟踪的文件:
-X只删除被Git忽略的文件。这可能有助于从头开始重建所有内容,但保留手动创建的文件。
u91tlkcl3#
作为大多数改变工作树的操作(pull,merge,checkout,等等)的一部分,git会删除所有被该操作清空的目录(例如:git删除了最后一个文件)。
git不会删除任何非完全空的目录,所以如果你有隐藏或忽略的文件,那么仅仅因为git从该目录中删除了最后一个 tracked 文件并不一定意味着git能够删除该目录。git不认为这是一个错误条件,所以不会抱怨它。
qzwqbdag4#
Git不跟踪目录、文件(及其路径)。如果这些路径还不存在,Git会为它们创建所有目录(酷!),但是如果路径中包含的所有文件都被移动或删除,它不会不删除它们(不酷...但有原因)。
解决方案(拉取/快进/合并后):
如果您在
clean
之前没有stash
,您将丢失所有未跟踪的文件(不可逆)。注意:由于这也会清除所有被忽略的文件,因此您可能需要再次运行一些构建脚本来重新创建项目元数据(例如:
./gradlew eclipse
)。这也会删除那些空的目录,那些从来不是git文件路径的一部分的目录。eh57zj3b5#
对我来说,目录是一个子模块,所以我需要运行
-f
两次:50pmv0ei6#
Git目前不跟踪目录(参见git wiki),也就是说,你既不能添加空目录,也不会删除最终为空的目录。(编辑:谢谢Manni,我错了!你不能 * 添加 * 空目录,但是git会 * 删除 * 那些因为被跟踪的内容被删除而变空的目录。)
关于删除空目录的命令:这取决于你的操作系统。
对于Linux,您可以使用,例如,
但是,这将删除所有空目录!