我现在有许多项目位于不同的 Git 存储库中。同样,它们在单独的 eclipse 项目中(因为由于 m2 插件中的错误,我很长时间无法使用使用 Maven 插件的父项目)。现在可以了。
所以我在 Maven 中组合了这些项目,制作了一个基础 pom 项目,并将其作为父项目添加到其他项目中。然后我嵌套了子项目。
当我将基础项目作为 git 项目提交时,它已决定子目录是子模块,即使根目录中没有 .gitmodules 文件。
看起来完成此操作的唯一方法是丢失正在 merge 的项目中的所有历史记录。
为了 super 清楚,当前有:
Project A (repo A)
Project B (repo B)
Project C (repo C)
我想要的是:
New Base Project D (repo D)
/Project A
/Project B
/Project C
我宁愿不丢失任何历史记录,但如果必须这样做,我想我可以保留以前的版本。我不认为我想要子模块,因为它们似乎适合包括不受您控制的远程 repo 。
将解决方案转换为 bash 脚本。它假定您要添加的子目录位于与父目录相同级别的子目录中。在这里:
#! /bin/bash
git remote add -f $1 ../$1
git merge -s ours --no-commit $1/master
git read-tree --prefix=$1 -u $1/master
git commit -m "Added project $1"
Git 很棒..
最佳答案
您可以执行称为“子树 merge ”的操作,将多个存储库 merge 为一个。假设要将 ~/projects/alpha
和 ~/projects/beta
merge 到一个新项目 ~/projects/multi
中:
$ cd ~/projects/multi
$ git init
merge 到“alpha”项目中...
$ git remote add -f alpha ~/projects/alpha
$ git merge -s ours --no-commit --allow-unrelated-histories alpha/master
$ git read-tree --prefix=alpha -u alpha/master
$ git commit -m "Added project alpha"
以同样的方式 merge 到“测试版”项目中。如果更改是永久性的,那么您可以删除新项目中的 alpha Remote 。如果 alpha 存储库中仍有开发,那么您不仅可以保留历史,还可以引入新的更改。
所有历史记录仍将存在,项目将位于子目录中。我在家用计算机上将其用于“死项目存储库”——一个巨大的 git 存储库,其中包含我曾经从事过的所有工作,这些存储库要么被废弃,要么不够大,无法容纳自己的存储库。
关于git - 如何将 Git 项目迁移为包含子项目的一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118261/