2017-10-08 565 views
-1

我有兩個現有的gitlab項目:projectA with branchA和projectB with branchB。 我想將branchA的全部內容移動到branchB的目錄下,如果可能的話,不會丟失提交的歷史記錄。在另一個項目的目錄下移動gitlab項目

我試圖將兩個項目克隆到一臺機器上,將文件從一個分支複製到另一個分支並提交,但之後我丟失了文件歷史記錄。

這怎麼辦? 感謝

回答

0

克隆項目B

git clone git clone <projectB repo URL> 

創建一個空的孤兒分支

git checkout --orphan temp_branch 
git rm -rf . 

添加了projectA

git remote add -f projectA <projectA repo URL> 
遠程

合併temp_branch與branchA從了projectA

git merge projectA/branchA --allow-unrelated-histories 

在這一點上,你可以爲他們或移動內容也改寫了歷史,使之看起來這些文件一直在子文件夾中。

注:你必須選擇一個或其他選項1或選項2,然後你就可以繼續正常的其餘步驟。

temp_branch移動內容到子文件夾,並提交(無重寫 - 選項1)

mkdir projectA 
git mv -k * projectA/ 
git add . 
git commit -m "Move projectA/branchA to sub folder" 

temp_branch移動內容到子文件夾,並提交(與改寫 - 選項2)

git filter-branch --tree-filter "mkdir projectA;git mv -k * projectA" HEAD 

合併與工程中的TB/branchB

git checkout branchB 
git merge temp_branch --allow-unrelated-histories 

刪除temp_branch和了projectA遠程

git branch -D temp_branch 
git remote remove projectA 

推到項目B遠程(確保你是在branchB)

git checkout branchB 
git push origin branchB 

你應該合併兩者,同時保留兩個分支的git歷史記錄。由於歷史不相關,我推薦使用選項2,因爲它重寫歷史的方式似乎是projectA總是存在於其子文件夾中。只是我的意見。

最後請注意:是移動文件到子文件夾時,一定要作相應的移動任何隱藏的文件(一個由一個或一次全部),我只是用*舉個簡單的例子,但你可能有一些(點)文件需要移動。只要確保不要移動.git文件夾。我也使用git mv來代替mv,以確保與windows的兼容性,如果您使用的是windows個人電腦

相關問題