为什么 Git 会在本地删除我的空目录?

为什么 Git 会在本地删除我的空目录?

如果我理解了答案这里正确来说,git 不应该跟踪空目录,但不应该在本地删除它。这不是我遇到的行为。

目录dir_foo/存在于两台计算机 A 和 B 上。它充满了跟踪文件。在计算机 A 上,我的程序删除了 中的所有文件dir_foo/,但目录保持不变。然后我添加/提交/推送更改。在计算机 B 上,在拉取之后,我发现不仅所有文件都被删除了,而且dir_foo/本地删除计算机 B 上也是如此!(请注意,它仍然存在于计算机 A 上。)我认为这种行为非常违反直觉。我不想要这种行为,并且就我的用例而言,无法指定 git 不应删除的每个目录。

为什么会发生这种情况?我该如何停止此行为(而不必指定 git 不应删除的每个空目录)?为什么我遇到的行为与上面链接中的信息相矛盾?谢谢。

无需读过此处即可回答问题。以下信息是在评论中请求的。


截图(已删除身份信息):

麻烦的目录是results/。前两个屏幕截图显示了计算机 A 和 B,其中有目录和一个测试文件:

在此处输入图片描述

在此处输入图片描述

接下来,我们删除计算机 A 上的文件,保持目录完好无损,提交/推送,并观察该目录在 A 本地仍然完好无损:

在此处输入图片描述

最后,我们在计算机 B 上进行拉取,并发现目录已(再次)在本地被删除:

在此处输入图片描述

此外,计算机 B 是一个集群(我几乎没有控制权/没有 sudo 访问权限)。也许他们在集群上有一些奇怪的非标准版本的 git 或 git 设置?

.gitignore 内容:

$ cat .gitignore 
results.jld2
safe_to_graph
[redacted]_exit_results/
Environments/Recommender_Env/MSLR-WEB10K/*
!Environments/Recommender_Env/MSLR-WEB10K/csv_converter.py
!Environments/Recommender_Env/MSLR-WEB10K/pickle_file_checker.py
!Environments/Recommender_Env/MSLR-WEB10K/Fold1/
Environments/Recommender_Env/MSLR-WEB10K/Fold1/*
!Environments/Recommender_Env/MSLR-WEB10K/Fold1/vali_pickle
# Environments/Recommender_Env/Microsoft_Data_Set/.idea/
IJCAI_Async_Rec_results/
async_results/*
swarm_logs/*
zipresults/*
Environments/Recommender_Env/MQ2008/*
!Environments/Recommender_Env/MQ2008/csv_converter_MQ.py
!Environments/Recommender_Env/MQ2008/pickle_file_checker_MQ.py
!Environments/Recommender_Env/MQ2008/Fold1/
Environments/Recommender_Env/MQ2008/Fold1/*
!Environments/Recommender_Env/MQ2008/Fold1/vali_pickle
MUJOCO_LOG.TXT

答案1

删除文件时,Git 不会删除本地目录。当您应用更改(例如,通过执行git pullgit rebase甚至git am)时,如果该更改会从目录中删除所有文件,它也会删除该目录。

我认为,如果您的程序删除/修改了目录中的文件,则可能根本不应该跟踪该目录,因为它是短暂的数据,而不是源代码的真正组成部分。也就是说,在这里,整个results目录似乎应该位于 下.gitignore

相关内容