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”,結果如下圖所示: