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

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

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

考虑的解决方案:

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

一个。一次性导出:

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

这只会转换一个 repo,一个分支。

使用 marksfiles 的增量导出(维护一个 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步骤。

但是对于其他两个分支,这似乎不太可能起作用, 因为 pull ../repo-branch2 会将补丁 merge 在一起 分支 1 和分支 2。

(2) 达克斯桥 [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 具有共同的前缀,但未检测到 merge 。

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

“有什么限制?”和“什么需要工作?”在 [2] 中似乎在说 (我很难理解)darcs merge 未正确转换 除非使用特殊标记——标记必须在 merge ,所以我现在不可能这样做了。

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

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

(5) darcs2git:符合。 to [2], 不支持分支

(6) 裁缝:acc.到[2],不支持轻松分支, 已停产以支持 darcs-fastconvert

引用资料:

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

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

最佳答案

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

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

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

\n提交 refs/heads/master\n

某处,然后您的分支更改脚本将需要查找 data 命令并将它们原样传递。这也不太难 - 请参阅 git fast-import man page有关 data 命令格式的详细信息 - 但随后您需要用您最喜欢的编程语言编写一个简单的程序。

关于git - 将 darcs repos 转换为具有多个分支的 git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355325/

相关文章:

python - 如何读取并提取并合并多个大尺寸csv(1G~)?

python - 如何在 Python 中合并多个具有不同表列的 Excel 工作表?

javascript - 我可以获取用户脚本的版本并在另一个网页上使用它吗?

version-control - 使用 mercurial 执行空提交

git - 如何在所有文件、所有分支、所有存储库中搜索(grep)?

git - 仅在推送到 master 时触发构建

version-control - 如何忽略 Mercurial 文件夹下的所有内容

java - 合并 CSS 文件

git - 如何处理git中的主要版本分支

Git 将一个文件夹从master分支复制到另一个分支