【问题标题】:Move gitlab Project under another Project's Directory将 gitlab 项目移到另一个项目的目录下
【发布时间】:2018-03-19 15:15:02
【问题描述】:

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

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

如何做到这一点? 谢谢

【问题讨论】:

    标签: git gitlab


    【解决方案1】:

    克隆项目B

    git clone git clone <projectB repo URL>
    

    创建一个空的孤立分支

    git checkout --orphan temp_branch
    git rm -rf .
    

    添加项目A的远程

    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 似乎始终存在于其子文件夹中。只是我的意见。

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

    【讨论】:

      猜你喜欢
      • 2017-06-16
      • 2019-02-19
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      相关资源
      最近更新 更多