4

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

考虑的解决方案:

(1) darcs convert 命令提供了两种将 darcs 导出到 git 的方法:

一个。一次性出口:

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

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

湾。使用标记文件增量导出(维护 darcs 存储库的 git 镜像):

$ 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 会将分支 1 和分支 2 的补丁合并在一起。

(2) Darcs-bridge [2]。不完整,自 2013 年以来未维护,并且“仍命名为 darcs-fast-convert”,仅推荐用于任一方向的一次性转换(darcs->git 或 git->darcs)

darcs-bridge 页面本身 [2] 建议使用 darcs 2.10 中内置的“darcs convert”命令。

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

请参阅 [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) master (darcs) myproject-branch1 -> (git) myproject-branch1 具有公共前缀,但未检测到合并。

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

“有什么限制?” 和“什么需要工作?” 在 [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 )

4

2 回答 2

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)

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

\ncommit refs/heads/master\n

在某个地方,那么您的分支更改脚本将需要查找data命令并将它们原封不动地传递。这也不是太难 - 请参阅git fast-import 手册页了解data命令格式的详细信息 - 但是你需要用你最喜欢的编程语言编写一个简单的程序。

于 2018-11-03T20:48:31.217 回答
0

提供另一种选择:将您的 Darcs 存储库导出到单独的 Git 存储库,然后选择一个 Git 存储库并将其他存储库作为远程添加到它。然后获取每个并使用远程主分支。除非您共享创建的 Git 存储库的对象存储,否则这种方法会浪费磁盘空间;请参阅如何在 git 中安全地使用共享对象数据库?如果这与您有关,请获取提示。

于 2019-04-11T07:55:43.080 回答