如何将Git项目与子项目迁移为一个项目

|| 我现在有一些项目位于单独的Git存储库中。同样,它们位于单独的Eclipse项目中(因为由于m2插件中的错误,我很长时间无法使用Maven插件使用父项目)。现在可以了。 因此,我将Maven中的项目组合在一起,创建了一个基础pom项目,并将其作为其他项目的父项。然后,我嵌套了子项目。 当我将基础项目提交为git项目时,即使根目录中没有.gitmodules文件,它也决定子目录是子模块。 看起来完成此操作的唯一方法是丢失正在组合的项目中的所有历史记录。 只是要非常清楚,目前有:
Project A (repo A)
Project B (repo B)
Project C (repo C)
我想要的是:
New Base Project D (repo D)
   /Project A
   /Project B
   /Project C
我宁愿不丢失任何历史记录,但是如果有必要,我想我可以将以前的版本放到阁楼上。我不认为我想要子模块,因为这些子模块似乎适合包含不受您控制的远程存储库。 将解决方案变成了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很棒。     
已邀请:
您可以执行称为“子树合并”的操作,以将多个存储库合并为一个。假设要将
~/projects/alpha
~/projects/beta
合并到一个新项目
~/projects/multi
中:
$ cd ~/projects/multi
$ git init
合并到“ alpha”项目中...
$ git remote add -f alpha ~/projects/alpha
$ git merge -s ours --no-commit alpha/master
$ git read-tree --prefix=alpha -u alpha/master
$ git commit -m \"Added project alpha\"
以相同的方式合并到“ beta”项目中。如果更改是永久性的,则可以在新项目中删除alpha遥控器。如果alpha仓库中仍在开发中,那么您不仅可以保留历史记录,而且还可以进行新的更改。 所有历史记录仍将存在,并且项目将在子目录中。我在家用计算机上将其用于“死项目存储库”-一个庞大的git存储库,其中包含我曾经处理过的所有内容,这些内容要么已废弃,要么不足以容纳其自己的存储库。     
我没有足够的声誉来评论您的历史记录问题,因此我必须写一个答案。 在日志中使用--follow
--follow
       Continue listing the history of a file beyond renames (works only
       for a single file).
    
我要做的是去子模块。但是,如果您确实要合并存储库,请执行以下操作: 创建新的存储库 进行初次提交 从那里到您要合并的每个项目的分支 对于您要合并的每个项目: 切换到其临时分支 合并原始存储库 将其移动到其项目目录(使用git mv) 承诺 合并(合并)并删除每个临时项目分支     

要回复问题请先登录注册