为何执行git status会生成.git/lfs/tmp空对象?如何完整复制Git仓库?
问题解答
1. 为何git status会生成.git/lfs/tmp下的新文件?
这些文件是Git LFS的临时工作文件,原仓库repo1在之前的LFS操作(比如拉取、推送大文件)过程中,残留了未自动清理的临时缓存文件在.git/lfs/tmp目录下。当你用cp -R复制整个仓库目录时,这些未被Git追踪的临时文件也被一并复制到了test/repo1中。
Git默认不会追踪.git目录下的这类临时文件,所以当你在复制后的仓库执行git status时,这些不属于仓库已追踪范围的文件就会被识别为未追踪的新对象。
2. 如何获得repo1的完全副本?
直接用cp -R复制整个仓库会带上本地临时文件、未清理的状态文件,想要得到干净且完整的仓库副本,推荐以下两种方式:
方式一:使用git clone(最推荐)
如果repo1是合法Git仓库,直接用Git克隆命令生成副本,它会自动过滤本地临时文件,同时完整复制仓库历史和LFS文件:
# 普通克隆 git clone repo1 test/repo1 # 本地克隆(更快,利用硬链接共享对象) git clone --local repo1 test/repo1
克隆完成后,test/repo1会是一个干净、独立的仓库副本,包含所有已追踪文件和完整Git历史,LFS文件也会被正确拉取(前提是本地已配置Git LFS)。
方式二:清理原仓库后再复制
如果一定要用cp命令,先清理原仓库的临时文件和未追踪内容,再复制:
# 进入原仓库 cd repo1 # 清理Git LFS的临时文件和未使用对象 git lfs prune # 清理所有未追踪的文件、目录(谨慎使用,会删除未提交的本地修改) git clean -fd # 回到上级目录执行复制 cd .. cp -R repo1 test/
这样复制后的test/repo1就不会包含多余临时文件,和原仓库的已追踪内容完全一致。
内容的提问来源于stack exchange,提问作者chz
相关产品推荐
相关产品推荐

