组合多个GIT存储库,同时保留所有标记/分支

时间:2011-10-05 09:57:13

标签: git

我已经设法将多个GIT存储库中的分支合并到一个新的存储库中(使用“git filter-branch”和“git fetch / merge”的组合)。但我似乎无法“合并”这些分支的标签......这甚至可能吗?就我的(非常有限的)GIT知识而言,标记指的是单个提交,它本身由SHA1哈希值标识,该哈希值基本上是从所有先前提交中计算出来的。由于来自不同存储库的分支没有共同的祖先提交,我发现难以想象如何在一个新的和完全的上下文中仍然“有意义”(以GIT方式)重写标记的方式不相关的存储库。

有什么想法吗?

编辑:澄清我打算做什么:

假设我有两个名为“A”和“B”的存储库,我想将它们组合成一个名为“C”的新存储库。

目录布局类似于

A
|
|-someFileA
|-anotherFileA
|-...
B
|
|-someFileB
|-anotherFileB
|-...

并且组合的存储库应该看起来像

C
|
|-A
| |-someFileA
| |-anotherFileA
| |-...
|
|-B
| |-someFileB
| |-anotherFileB
| |-...

2 个答案:

答案 0 :(得分:2)

标签不是目录(就像在Subversion中一样),因此fetch / merge不会考虑它们 另外,git fetch默认不提取所有标签(除非指定--tags)。

考虑到标记引用了不可变内容,并且您正在通过合并修改该内容,我认为您不能轻易地保留它们,除非您手动将类似名称的标记重新应用于您认为类似于原始标记的提交


“结合”这两个回购的另一种不那么干扰的方法是将AB声明为submodules of C
不涉及合并,AB保留其分支和标记

答案 1 :(得分:-1)

如果你想浪费几个小时,我通过python和dulwich做了一些类似奇怪的回购管理。这是一次性的黑客攻击,但如果完成这项工作是值得的几个小时或时间,那就去吧。