我正在尝试将一些旧的Bazaar存储库转换为git,虽然一切似乎进展顺利,但我有点不确定它是否真的像它所声称的那样顺利。
我的Bazaar存储库的结构如下:
我正在使用快速导出/快速导入方法在bzr和git之间迁移。
最初,我迁移了“主干”,带有--导出标记,如下所示:
bzr fast-export --export-marks=../$1/marks.bzr ../$1/trunk | git fast-import --export-marks=../$1/marks.bzr --export-marks=../$1/marks.git的名称为$1
然后迭代"repo“目录中的所有其他文件夹并调用:
bzr fast-export --marks=../$1/marks.bzr --git-branch=$nick ../$1/$b/.. | git fast-import --import-marks=../$1/marks.git --export-marks=../$1/marks.git$nick是bzr的分支昵称,$1/$b是分支的目录名。
如前所述,它处理所有预期目录,但在完成后,当我执行以下操作时:
git branch它只显示了20多个分支,原来的Bazaar存储库有80+。
现在,只要看一下git中的“主人”,它就好像都在那里了,而丢失的60根树枝很容易就是已经合并成主干的分支。但我不确定快速出口/快速进口工具是否足够聪明,可以说“啊-你不需要这个”,但也许它们确实如此。
有人有这方面的经验吗?
我应该只剩下“主人”吗?从bzr迁移到git后,任何未合并的分支都会在其中提交吗?
最后,为了历史的考虑,有没有办法迫使所有的分支机构被转换,即使它们在技术上已经失效了?
发布于 2013-11-15 21:11:35
看来,快速导入/出口工具确实足够聪明,可以说“啊--你不需要这个”。不过,这不是火箭科学,就像git branch -d知道什么时候删除分支是安全的一样,git fast-import也可以知道传入的分支是一个副本。
但也许你想确定一下,我也同意。我编写了一个简单(如果效率低下)脚本来查找唯一bzr分支的列表:
#!/bin/sh
paths=$(bzr branches -R)
for path1 in $paths; do
merged=
for path2 in $paths; do
test $path1 = $path2 && continue
# is path1 part of path2 ?
if bzr missing -d $path1 $path2 --mine >/dev/null; then
# is path2 part of path1 ?
if bzr missing -d $path1 $path2 --other >/dev/null; then
echo "# $path1 == $path2"
else
merged=1
break
fi
fi
done
test "$merged" || echo $path1
done在Bazaar共享存储库中运行此操作。它查找所有分支,然后将所有分支与所有其他分支进行比较。如果A在B中,那么就有两种可能性:可能B也是A,这意味着A是== B。否则A实际上是多余的。
该脚本筛选出完全合并到至少一个其他分支的分支。但是,如果存在多个相同的分支,则会打印所有这些分支,并以#开头的附加行表示它们是相同的。
使用bzr fast-export ... | git fast-import ...的示例命令似乎有一些不必要的选项。按照bzr fast-export -h末尾的示例,我建议使用以下步骤:
如果注意到最后一步不检查已迁移的主干。这不重要,因为它不会再次导入它。还请注意,即使branchA完全合并到branchB中,如果首先看到它,也会在Git中创建它。如果首先看到branchB,那么就不会在Git中创建branchA (“哦--您不需要这个”)。
在导入到Git时,我找不到强制创建相同分支的方法。我觉得这不可能。
https://stackoverflow.com/questions/19930832
复制相似问题