我已经成功地将来自多个git存储库的分支合并到一个新的存储库中(使用“git filter branch”和“git fetch/merge”的组合)。但我似乎无法“合并”那些分支的标记…这甚至是可能的吗?就我(非常有限)的git knownledge而言,标记指的是一个单独的提交,它本身由一个sha1散列值标识,这个值基本上是从所有先前的提交中计算出来的。由于来自不同存储库的分支没有一个共同的祖先提交,我发现很难想象如何在一个完全不相关的新存储库的上下文中以一种仍然“有意义”的方式(以git方式)重写标记。
有什么想法吗?
编辑:为了澄清我打算做什么:
假设我有两个名为“a”和“b”的存储库,我想将它们组合成一个名为“c”的新存储库。
目录布局类似于
一个
|
|-萨梅菲拉
|-其他文件
|-…
乙
|
|-一些文件
|-其他文件
|-…
组合存储库应该看起来像
C类
|
|-一个
||-萨梅菲拉
||-其他文件
||-…
|
|-乙
||-一些文件
||-其他文件
||-…
最佳答案
标记不是目录(在subversion中是这样),所以fetch/merge不会考虑它们。
另外,git fetch在默认情况下不会获取所有标记(除非指定了--tags
)。
考虑到标记引用了一个不可变的内容,并且您正在通过合并修改该内容,我认为您无法轻松地保留它们,除非您手动重新应用具有类似名称的标记来提交您认为与原始标记相似的提交。
“合并”这两个回购协议的另一个不那么麻烦的方法是将A
和B
声明为submodules of C
。
不涉及合并,A
和B
保留其分支和标记