有没有办法将具有多个分支的darcs项目(即包含不同但相关的补丁集的两个以上的darcs存储库)转换为单个git存储库,以便将每个darcs存储库转移到git存储库中的不同分支?
考虑的解决方案:
(1) darcs convert命令提供了两种将darcs导出到git的方法:
a.一次性导出:
$ cd repo
$ git init ../mirror
$ darcs convert export | (cd ../mirror && git fast-import)这只会转换一个存储库,一个分支。
b.使用marksfiles进行增量导出(以维护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- branch1 2会将branch1和branch2的补丁合并在一起。
(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- -> (git) myproject- -> (Git)myproject-brch1具有公共前缀,但未检测到合并。
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-桥:http://darcs.net/DarcsBridgeUsage)
发布于 2018-11-04 04:48:31
通过一个修改目标分支的简单脚本将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命令并原封不动地传递它们。这也不是很难-有关data命令格式的详细信息,请参阅git fast-import man page -但是您需要用您最喜欢的编程语言编写一个简单的程序。
发布于 2019-04-11 15:55:43
提供另一种选择:将Darcs存储库导出到单独的Git存储库,然后选择一个Git存储库,并将其他Git存储库作为远程对象添加到其中。然后获取每个分支并使用远程主分支。这种方法会浪费磁盘空间,除非您共享创建的Git存储库的对象存储;如果您对此有疑问,请参阅How can one safely use a shared object database in git?获取提示。
https://stackoverflow.com/questions/37355325
复制相似问题