将darcs repos转换为具有多个分支的git

时间:2016-05-20 20:28:07

标签: git version-control merge version-control-migration darcs

有没有办法转换darcs项目有多个 分支(即两个以上的darcs存储库包含不同但是 相关的补丁集)到单个git存储库,以便每个 darcs repo被转移到git repo中的一个独特分支?

考虑的解决方案:

(1)darcs convert命令提供两个 将darcs导出为git的方法:

一个。一次性出口:

$ cd repo
$ git init ../mirror
$ darcs convert export | (cd ../mirror && git fast-import)

这只转换一个仓库,一个分支。

湾使用标记文件进行增量导出(以维护一个git镜像 darcs存储库):

$ cd repo
$ git init ../mirror
$ touch ../mirror/git.marks
$ darcs convert export --read-marks darcs.marks --write-marks darcs.marks |
  (cd ../mirror && 
    git fast-import --import-marks=git.marks --export-marks=git.marks)

使用(b),如果我只有一个其他darcs repo作为分支,我可能希望 继续

$ cd ../mirror
$ git branch branch1
$ git checkout branch1

$ cd ../repo
$ darcs pull ../repo-branch1

然后重复darcs convert export步骤。

但是对于其他两个分支,这似乎不太可行, 因为拉../repo-branch2会将补丁合并在一起 branch1和branch2。

(2)Darcs-bridge [2]。 不完整,自2013年以来一直没有维护,而且仍然被命名为darcs-fast-convert",仅推荐一次性使用 任何方向的转换(darcs-> git或git-> darcs)

darcs-bridge页面本身[2] 建议使用' darcs convert'命令内置于darcs 2.10。

但是,它可以处理分支(有一些工作):

参见[2]中的用例2:

$ git init my_project_git
$ darcs-fastconvert export myproject myproject-branch1 | 
  (cd my_project_git && git fast-import && git checkout master)

这将创建具有两个分支的git仓库: (darcs)myproject - > (git)主人 (darcs)myproject-branch1 - > (git)myproject-branch1 使用公共前缀,但未检测到合并。

[2]中的用例5描述了一种更改分支列表的方法 darcs-bridge正在管理。

"有什么限制?"和#34;什么需要工作?"在[2]中似乎在说 (我很难理解)darcs合并没有正确转换 除非使用特殊标记 - 标记必须在之前完成 合并,所以我现在不可能这样做。

(3)Darcs-fastconvert(darcs-bridge所基于的): 根据[2],没有管理多个分支

(4)darcs-to-git:acc。到[2],不支持分支

(5)darcs2git:acc。到[2],不支持分支

(6)裁缝:acc。到[2],不容易支持分支, 已停止使用darcs-fastconvert

参考文献:

[1] Darcs-Convert:http://darcs.net/Using/Convert

[2] Darcs-Bridge:http://darcs.net/DarcsBridgeUsage

2 个答案:

答案 0 :(得分:0)

通过修改目标分支的简单脚本将darcs convert export的git-fast-import格式输出到管道。在大多数情况下,您可以这样做:

darcs convert export | sed 's#^commit refs/heads/master$#commit refs/head/your-branch#' | (cd ../mirror && git fast-import)

如果您担心文件或其他回购数据中可能包含确切的字节字符串

\ncommit refs/heads/master\n

在某个地方,那么您的分支更改脚本将需要查找data命令并将它们不变地传递。这也不太困难-请参见git fast-import man page,以获取data命令格式的详细信息-但是您将需要用自己喜欢的编程语言编写一个简单的程序。

答案 1 :(得分:0)

要提供另一种选择:将Darcs存储库导出到单独的Git存储库,然后选择一个Git存储库并将其他存储库添加为远程存储库。然后获取每个数据,并使用远程主分支。除非您共享创建的Git存储库的对象存储,否则此方法浪费磁盘空间。如果您有任何疑问,请参见How can one safely use a shared object database in git?