我有兩個現有的gitlab項目:projectA with branchA和projectB with branchB。 我想將branchA的全部內容移動到branchB的目錄下,如果可能的話,不會丟失提交的歷史記錄。在另一個項目的目錄下移動gitlab項目
我試圖將兩個項目克隆到一臺機器上,將文件從一個分支複製到另一個分支並提交,但之後我丟失了文件歷史記錄。
這怎麼辦? 感謝
我有兩個現有的gitlab項目:projectA with branchA和projectB with branchB。 我想將branchA的全部內容移動到branchB的目錄下,如果可能的話,不會丟失提交的歷史記錄。在另一個項目的目錄下移動gitlab項目
我試圖將兩個項目克隆到一臺機器上,將文件從一個分支複製到另一個分支並提交,但之後我丟失了文件歷史記錄。
這怎麼辦? 感謝
克隆項目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個人電腦