将gitlab项目移到另一个项目目录下

时间:2017-10-08 08:28:40

标签: git gitlab

我有两个现有的gitlab项目:projectA with branchA,projectB with branchB。 我想将branchA的全部内容移动到branchB的目录下,如果可能的话,不会丢失提交历史记录。

我尝试将两个项目克隆到一台机器上,将文件从一个分支复制到另一个分支并提交,但后来我丢失了文件历史记录。

如何做到这一点? 感谢

1 个答案:

答案 0 :(得分: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 与projectA的branchA合并

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

与projectB / branchB合并

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

删除 temp_branch 和projectA远程

git branch -D temp_branch 
git remote remove projectA

推送到 projectB 远程(确保您在branchB上)

git checkout branchB
git push origin branchB

你应该合并两者,同时保留两个分支的git历史记录。由于历史不相关,我建议使用选项2,因为它以一种似乎projectA始终存在于其子文件夹中的方式重写历史记录。只是我的意见。

最后注意: 在将文件移动到子文件夹时,请确保相应地移动任何隐藏文件(一个接一个或一次移动),我只是使用*给出一个简单的例子,但你可能有一些。(点)文件也需要移动。只是确保不要移动.git文件夹。如果你使用的是Windows PC,我还使用git mv而不是mv来确保与windows的兼容性