GitHub、GitLab、Gitee等在同一个网站中执行复制或拷贝一个已有项目到一个新项目比较简单,因为它们在每一个项目上都有一个Fork按钮,直接点击此Fork按钮即可,Fork后的新项目会保留原有项目的历史提交记录。但是如果不在同一个网站上进行此操作,如想把GitHub中的项目复制到Gitee上,又要保留历史提交记录,则需要执行一些额外命令。
如把GitHub上的Messy_Test项目(https://github.com/fengbingchun/Messy_Test)复制到Gitee上,并取项目名为Messy_Tmp,具体操作如下(不推荐,推荐的方法见下面改进部分):
1. 对Messy_Test项目执行git log,查看历史提交记录,结果如下图所示,最近的一次提交commit id为:7726835e4a92252985cd521bb83fed9dbfb62312,分支名为master
2. 在Messy_Test项目中.git/config内容如下:注意此时[remote “origin”]的内容:
3. 在Gitee中创建一个新项目,名称为Messy_Tmp,地址为:https://gitee.com/fengbingchun/Messy_Tmp
4. 在Messy_Test项目中依次执行如下三条命令,结果如下图所示:注意此时[remote “origin”]的内容已改变:
5. 执行push,结果如下图所示:执行完后已将Messy_Test的code提交到Gitee的Messy_Tmp项目上并保留历史提交记录。
6. 打开Gitee的Messy_Tmp项目,结果如下图所示:保留了原有项目Messy_Test的历史提交记录,此时只有Messy_Test项目的master分支的内容,没有其它分支。
在Gitee中新建项目时,也可点击“导入已有仓库”导入GitHub上已存在的项目,结果如下图所示:但是好像项目名要与GitHub中的一致,但是后面可以自己再重新更改,此时导入的项目包含了原有项目中的所有分支。GitHub和GitLab中也有类似的”导入已有仓库”的功能。
网上也有一些其它类似的操作可保留原有项目的历史提交记录。
改进(推荐):按照以上的步骤,本地的Messy_Test项目将不能作其它操作,因为在第4步时执行了”git remote rm origin”操作,这里稍作改动,使其Messy_Test既能保持正常操作,又可将项目推导Gitee上保留历史提交记录:
1. 与上面第1步执行操作相同;
2. 与上面第2步执行操作相同;
3. 在Gitee中创建一个新项目,名称为Messy_Tmp2,地址为:https://gitee.com/fengbingchun/Messy_Tmp2 ;
4. 注册远程版本库,取名为gitee_Messy_Tmp2,执行如下命令,.git/config内容变为如下:新增[remote “gitee_Messy_Tmp2”]
5. 将code推到Gitee,执行如下命令,结果如下图所示:
6. 打开Gitee的Messy_Tmp2项目,结果如下图所示:保留了历史提交记录
7. 假如在Messy_Test上作了多次提交,然后需要把这多次提交Merge到Messy_Tmp2上,可再次执行以上命令:”git push gitee_Messy_Tmp2 master”,结果如下图所示: