首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将Git项目迁移为一个包含子项目的项目

如何将Git项目迁移为一个包含子项目的项目
EN

Stack Overflow用户
提问于 2011-05-25 08:18:31
回答 2查看 2.6K关注 0票数 17

我现在有很多项目都在不同的Git库中。它们同样位于不同的eclipse项目中(因为由于m2插件中的bug,我很长一段时间都无法使用使用Maven的父项目)。现在它起作用了。

因此,我将Maven中的项目组合在一起,创建了一个基本的pom项目,并将其添加为其他项目的父项目。然后我嵌套子项目。

当我将基础项目作为git项目提交时,它已经决定子目录是子模块,即使根目录中没有.gitmodules文件。

看起来要做到这一点的唯一方法是丢掉正在合并的项目中的所有历史记录。

非常清楚地说,当前有:

代码语言:javascript
复制
Project A (repo A)
Project B (repo B)
Project C (repo C)

我想要的是:

代码语言:javascript
复制
New Base Project D (repo D)
   /Project A
   /Project B
   /Project C

我不想丢失任何历史,但如果有必要,我想我可以把以前的版本放在顶楼上。我认为我不需要子模块,因为这些模块似乎适合包含不在您控制范围内的远程repos。

将解决方案转换为bash脚本。它假设您要添加的子目录与父目录在同一级别的子目录中。这就是它:

代码语言:javascript
复制
#! /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太神奇了..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-25 09:06:26

您可以进行称为“子树合并”的操作,将多个存储库合并为一个存储库。让我们假设想要将~/projects/alpha~/projects/beta合并到一个新项目~/projects/multi

代码语言:javascript
复制
$ cd ~/projects/multi
$ git init

合并到"alpha“项目中...

代码语言:javascript
复制
$ 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"

以同样的方式合并到"beta“项目中。如果更改是永久性的,那么您可以在新项目中删除alpha remote。如果在alpha repo中仍有开发,那么您不仅可以保留历史,还可以引入新的更改。

所有历史记录仍在那里,项目将位于一个子目录中。我在家里的计算机上使用它作为"dead projects代码库“--一个巨大的git代码库,包含了我曾经使用过的所有东西,这些东西要么被遗弃了,要么不够大,不足以容纳它自己的代码库。

票数 13
EN

Stack Overflow用户

发布于 2011-05-27 15:29:40

我没有足够的名气来评论你的历史问题,所以我必须写一个答案。

使用--使用log

代码语言:javascript
复制
--follow
       Continue listing the history of a file beyond renames (works only
       for a single file).
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6118261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档