如果我理解了答案这里正确来说,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 pull
,git rebase
甚至git am
)时,如果该更改会从目录中删除所有文件,它也会删除该目录。
我认为,如果您的程序删除/修改了目录中的文件,则可能根本不应该跟踪该目录,因为它是短暂的数据,而不是源代码的真正组成部分。也就是说,在这里,整个results
目录似乎应该位于 下.gitignore
。