我如何将Mercurial信息库转换为Git(支持LFS)?

问题描述 投票:4回答:1

我有一个Mercurial存储库,其中包含300次提交,其中还包含许多相对较大的文件(例如10个以上的MiB)。我想将其转换为Git存储库,保留所有分支和合并,还使用LFS扩展来管理大文件。到目前为止,这是我的过程:

  1. 使用hg clone <URL>从其服务器克隆Hg存储库>
  2. git init在其他地方创建一个新的git repo
  3. cd进入git repo,然后用hg-fast-export -r <hg-repo> -A <authors>进行转换。至此,我有一个可以正常工作的仓库,但是所有大文件仍然是索引的一部分。我想在其他任何东西之前添加一个新的提交,以插入.gitignore.gitattributes文件。
  4. 创建没有父提交的新的空分支:git checkout --orphan new-root && git rm -rf .
  5. 创建两个文件并将它们提交到新分支。 git add * && git commit -m "Check in git metafiles"
  6. 现在我的“新”根提交已准备就绪,因此我尝试将整个事情连根拔起:git checkout master && git rebase --root --onto new-root --preserve-merges
  7. 这就是我被困住的地方。在将此错误转储给我之前,rebase获得了大约10次提交。

error: Your local changes to the following files would be overwritten by merge:
        assets/ui/sayscreen/blackarrow.png
        assets/ui/sayscreen/blackcircle.png
        assets/ui/sayscreen/thoughtbox.png
        assets/ui/sayscreen/translationbox.png
        assets/ui/sayscreen/whitearrow.png
        assets/ui/sayscreen/whitecircle.png
Please commit your changes or stash them before you merge.
Aborting
fatal: cherry-pick failed
Could not pick 01908b624e50709de07685ef8ab158feef02e9e0

真正让我困惑的是,在原始的汞储存库中,目前还没有合并;第一次合并提交在15。此外,运行git status会列出50-60个修改过的文件,即使此特定的提交最初只涉及8个文件。最后,使用git ls-files -u尝试查看哪些文件冲突不会返回任何内容。

由于git status列出的大多数文件都是PNG图像,所以我首先想到的是LFS在某种程度上妨碍了我们的工作,并试图在重建基准期间拉出较大的斑点。但是,我在开始整个过程​​之前在全局上下文中运行了git lfs uninstall,目的是在对基准操作满意之后再进行git lfs migrate import --fixup

是什么导致这些合并冲突,以及如何解决它才能完成迁移?

我有一个Mercurial存储库,其中包含300次提交,其中还包含许多相对较大的文件(例如10个以上的MiB)。我想将其转换为Git存储库,保留所有分支,然后...

git mercurial git-lfs
1个回答
0
投票

最近我从一个扩展了大文件的商业仓库转换为git。这里有几点。

© www.soinside.com 2019 - 2024. All rights reserved.