How to deal with Git submodules on a repo that is converted to Mercurial

喜夏-厌秋 提交于 2020-01-03 07:32:10

问题


Here goes:

$ cat .gitmodules 
[submodule "utils/external/firepython"]
    path = utils/external/firepython
    url = git://github.com/darwin/firepython.git
[submodule "utils/external/textile"]
    path = utils/external/textile
    url = git://github.com/jsamsa/python-textile.git

While this was still a Git repo, I needed to run git submodule init, after which some magic happens. Since I've now converted the repo to Mercurial (using hgext.git extension), I don't know what to do. Is there an equivalent process (I need those 2 Git modules in my Mercurial repo)?


回答1:


Mercurial supports subrepositories of different kinds: Mercurial, Subversion, and Git. So you can create a .hgsub file with

utils/external/firepython = [git]git://github.com/darwin/firepython.git
utils/external/textile    = [git]git://github.com/jsamsa/python-textile.git

and that will inform Mercurial to make a clone of your Git repositories when the Mercurial repository is cloned. You need to make the Git clones yourself the first time, or copy them from somewhere else on your disk:

$ git clone git://github.com/darwin/firepython.git utils/external/firepython
$ git clone git://github.com/jsamsa/python-textile.git utils/external/textile
$ hg add .hgsub
$ hg commit -m 'Added Git subrepositories'

You will then note that Mercurial has added a .hgsubstate file to your repository where it stores information about the Git subrepositories. This file is needed so that Mercurial knows which revision to checkout from your subrepositories when you make a new Mercurial clone.

A colleague of mine has written a subrepository guide that you might find useful.



来源:https://stackoverflow.com/questions/5612337/how-to-deal-with-git-submodules-on-a-repo-that-is-converted-to-mercurial

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!