hg convert:take in account svn:mergeinfo

时间:2014-08-14 11:16:23

标签: svn version-control merge mercurial

我进行了一般的网络搜索,并且在回购转换期间没有发现曾尝试过考虑svn:mergeinfo帐户。

Some people手动修复合并。对于大型历史记录来说并非如此。

我有简单的合并历史记录,其中branches/dev合并到trunk版本(我知道它与官方工作流程建议不同)。

通过合并分支(在我的情况下为trunk)得到的合并信息:

cd trunk
svn log -g

我在Bash中为输出编写了解析器,生成--splicemap格式:

uuid=svn:`svn info | sed -n '/UUID: /{s=.*UUID: ==;p;q}'`

fbr=/branches/dev
tbr=/trunk

hunkstate=last-merged
linestate=header

error() {
  echo ${BASH_SOURCE[0]}:${BASH_LINENO[0]}: hunkstate: $hunkstate, linestate: $linestate
  exit 1
}

svn log -g | while read a1 a2 a3 rest; do
  if [[ $linestate = header ]]; then
    if [[ $a1 = '------------------------------------------------------------------------' ]]; then
      linestate=rev
    fi
    continue
  fi
  case $hunkstate in
    last-merged)
      case $linestate in
        rev)
          rev=${a1#r}
          linestate=merge
          ;;
        merge)
          if [[ $a1 = Merged && $a2 = "via:" ]]; then
            last_merged=$rev
            merged_to=${a3#r}
            hunkstate=merge
          fi
          linestate=header
          ;;
        *) error ;;
      esac
      ;;
    merge)
      case $linestate in
        rev)
          rev=${a1#r}
          linestate=merge
          ;;
        merge)
          if [[ $a1 = Merged && $a2 = "via:" ]]; then
            :
          else
            echo $uuid$tbr@$merged_to $uuid$tbr@$rev $uuid$fbr@$last_merged
            hunkstate=last-merged
          fi
          linestate=header
          ;;
        *) error ;;
      esac
      ;;
    *) error ;;
  esac
done

接下来我跑:

hg convert --splicemap merge.map svn://$IP/$BASE

下一步我修复了有关分支命名的约定:

$ cat branch.map
default stable
dev default
$ hg convert --branchmap branch.map proj-hg/ proj-fixed

hg glog看起来不错。有时我只合并选定的部分更改,保留休息到下一个版本。当发生这种情况时,历史看起来很奇怪:

| |
o |    changeset:   1988:214b38931712
|\ \   branch:      dev
| | |  parent:      1987:d3fc2c0f10ec
| | |  parent:      1969:8957aab1efa8
| | |
| o |  changeset:   1987:d3fc2c0f10ec
| |\|  branch:      dev
| | |  parent:      1964:9277a34e037f
| | |  parent:      1986:2194f9f673b1
| | |
| | o  changeset:   1974:b06706659b0e
| | |
| | o  changeset:   1973:5071aa6f3ee7
| | |
| | o  changeset:   1971:f9eea3a18947
| | |
+---o  changeset:   1970:20b9cd2fdce8
| |    user:
| |
o |  changeset:   1969:8957aab1efa8
| |
o |  changeset:   1968:921d85f051e1

但这种情况很少见。

将存储库从SVN转换为HG时,是否可以使用svn:merginfo

0 个答案:

没有答案