Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Mercurial存储库转换为Git(支持LFS)?_Git_Mercurial_Git Lfs - Fatal编程技术网

如何将Mercurial存储库转换为Git(支持LFS)?

如何将Mercurial存储库转换为Git(支持LFS)?,git,mercurial,git-lfs,Git,Mercurial,Git Lfs,我有一个Mercurial repo,其中包含300多个提交,还包含一些相对较大(比如10+MiB)的文件。我想将其转换为Git存储库,保留所有分支和合并,并使用LFS扩展来管理大文件。到目前为止,我的流程如下: 使用Hg Clone 使用git init cd转换成git repo,然后使用hg fast export-r-A进行转换。在这一点上,我有一个工作回购,但所有的大文件仍然是索引的一部分。我想在插入.gitignore和.gitattributes文件之前插入一个新的提交 创建一个没

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

  • 使用
    Hg Clone
  • 使用
    git init
  • cd
    转换成git repo,然后使用
    hg fast export-r-A
    进行转换。在这一点上,我有一个工作回购,但所有的大文件仍然是索引的一部分。我想在插入
    .gitignore
    .gitattributes
    文件之前插入一个新的提交
  • 创建一个没有父提交的新的空分支:
    git checkout——孤立的新根和&git rm-rf。
  • 创建这两个文件并将它们提交到新分支
    git add*&&git commit-m“签入git元文件”
  • 现在,我的“新”根提交已经准备就绪,所以我尝试将整个事情根除:
    git checkout master&&git rebase--root--to new root--preserve merges
  • 这就是我被困的地方。在把这个错误推到我身上之前,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
    
    真正让我困惑的是,在最初的Hg存储库中,此时没有合并;第一次合并提交是在15。此外,运行
    git status
    会列出50-60个修改过的文件,即使这个特定的提交最初只涉及8个文件。最后,使用
    gitls files-u
    尝试查看哪些文件是冲突的,不会返回任何结果

    由于git status列出的大多数文件都是PNG图像,我的第一个想法是LFS不知何故挡住了我的去路,并试图在重基过程中拉出大的斑点。但是,在开始整个过程之前,我在全局上下文中运行了
    git lfs uninstall
    ,目的是在我对rebase操作感到满意之后执行
    git lfs migrate import--fixup


    是什么导致了这些合并冲突,我如何才能绕过它来完成迁移?

    我最近刚从一个扩展了大文件的mercurial repo转换成git。这里有几点

  • 首先,你必须将易变回购转换为“正常”回购
  • 在执行“hg克隆”时,最好将所有大文件拉到本地

  • $hg克隆
    $hg-v lfpull--rev“all()”
    $cd。。
    $hg lfconvert--转换为正常值
    ... // 核实回购协议
    $hg快速出口-r-A
    
    我不确定这是否是问题的根源,但一般来说,保留合并(或更好/更奇特的新表亲rebase merges)实际上无法保留合并。它必须重新执行它们。整个方法充满了潜在的故障点。最好不要尝试重新设定基准。我在
    git-lfs-migrate
    方面没有任何经验,我不知道您打算对这些属性文件做什么,但是您可以在导入之后,在迁移之前,使用
    git-filter分支
    而不是重定基来填充它们。如果可能的话,不用麻烦了!我不是一个喜欢git的人,但这里有一个HG方法——您可以先在HG端插入.gitignore和.gittattributes文件,然后将它们从HG导出到git。实现这一点的方法不止一种,但对于完全控制,您可以使用HgConvert和--spiteMap选项。
    $hg clone <hg-repo>
    $hg -v lfpull --rev "all()"
    $cd ..
    $hg lfconvert --to-normal <hg-repo> <hg-repo-nolf>
    ... // verify the repo
    $hg-fast-export -r <hg-repo> -A <authors>