在没有.git目录的情况下复制存储库时,也会复制Git历史记录

时间:2020-06-11 13:59:15

标签: git github git-clone

我正在尝试将公共git存储库中的所有文件复制,称为repo_A,复制到全新的私有git存储库中,称为repo_B。
据我所知,git init --template将无法满足这一需求。 我目前正在运行以下终端命令集:

git clone repo_A_clone_link  
git clone repo_B_clone_link
cp -a ./repo_B/.git/. ./repo_A/.git/  
cp -a ./repo_A/. ./repo_B/   
cd ./repo_B 
git push

推送成功,并且在repo_B的master分支中看到了来自repo_A的所有文件。
问题是由于某种原因,我仍然在repo_B中看到repo_A的提交历史记录。

我试图阅读有关主题并进行调查,但是根据this question,似乎repo_B的.git目录没有改变这一事实应该意味着它的历史也不会改变。

还经历了this questionthat one和其他几个人。

我在这里想念什么?如何防止历史记录被复制?
我看到使用--depth 1可以解决问题,但是我很想从.git目录的角度了解我所缺少的内容。
谢谢!

1 个答案:

答案 0 :(得分:0)

在这种情况下,您确实用.git复制了cp -a目录,该目录是递归操作的。 .git目录包含存储库中的所有历史记录和对象,如果将其从一个存储库复制到另一存储库,则所有历史记录也会被复制。

如果您只想复制跟踪的文件,则可以使用以下内容:

(cd repoA && git archive --format=tar HEAD) | (cd repoB && tar -xvf -)