首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把大的bzr存储库转换成git,还能期待什么呢?

把大的bzr存储库转换成git,还能期待什么呢?
EN

Stack Overflow用户
提问于 2013-11-12 13:44:34
回答 1查看 2.9K关注 0票数 13

我正在尝试将一些旧的Bazaar存储库转换为git,虽然一切似乎进展顺利,但我有点不确定它是否真的像它所声称的那样顺利。

我的Bazaar存储库的结构如下:

  • 回购
    • 中继线
    • 生产
    • 特征/特征-分支X
    • 特征/特征-分支

我正在使用快速导出/快速导入方法在bzrgit之间迁移。

最初,我迁移了“主干”,带有--导出标记,如下所示:

代码语言:javascript
复制
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“目录中的所有其他文件夹并调用:

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

$nickbzr的分支昵称,$1/$b是分支的目录名。

如前所述,它处理所有预期目录,但在完成后,当我执行以下操作时:

代码语言:javascript
复制
git branch

它只显示了20多个分支,原来的Bazaar存储库有80+。

现在,只要看一下git中的“主人”,它就好像都在那里了,而丢失的60根树枝很容易就是已经合并成主干的分支。但我不确定快速出口/快速进口工具是否足够聪明,可以说“啊-你不需要这个”,但也许它们确实如此。

有人有这方面的经验吗?

我应该只剩下“主人”吗?从bzr迁移到git后,任何未合并的分支都会在其中提交吗?

最后,为了历史的考虑,有没有办法迫使所有的分支机构被转换,即使它们在技术上已经失效了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-15 21:11:35

看来,快速导入/出口工具确实足够聪明,可以说“啊--你不需要这个”。不过,这不是火箭科学,就像git branch -d知道什么时候删除分支是安全的一样,git fast-import也可以知道传入的分支是一个副本。

但也许你想确定一下,我也同意。我编写了一个简单(如果效率低下)脚本来查找唯一bzr分支的列表:

代码语言:javascript
复制
#!/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末尾的示例,我建议使用以下步骤:

  1. 创建一个全新的Git回购: git init /tmp/gitrepo
  2. 进入你的集市共享回购: cd /path/to/bzr/shared/repo
  3. 迁移您的主要分支(主干?)成为主人: bzr快速出口-出口-标记=Marks.bzr主干/x\ GIT_DIR=/tmp/gitrepo/. git / git快速-进口-导出-标记=标记.git
  4. 迁移所有分支: bzr在读取路径时分支-R \\;做nick=$(basename $path)回波迁移$nick .bzr快速导出--导入-标记=marks.bzr -b $nick $path \ GIT_DIR=/tmp/gitrepo/.git git快速-导入-import-mark=mark s.git\&>/tmp/迁移日志已完成

如果注意到最后一步不检查已迁移的主干。这不重要,因为它不会再次导入它。还请注意,即使branchA完全合并到branchB中,如果首先看到它,也会在Git中创建它。如果首先看到branchB,那么就不会在Git中创建branchA (“哦--您不需要这个”)。

在导入到Git时,我找不到强制创建相同分支的方法。我觉得这不可能。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19930832

复制
相关文章

相似问题

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