我正在尝试在Windows上使用hg-git Mercurial扩展(Windows 7 64位,具体而言).我安装了Mercurial和Git.我安装了Python 2.5(32位).
我按照http://hg-git.github.com/上的说明安装了扩展程序.最初的easy_install失败,因为没有Visual Studio 2003它无法编译dulwich.
我手动安装了德威:
现在当我运行easy_install hg-git时,它会成功(因为dulwich依赖性得到满足).
在我的C:\ Users\username\Mercurial.ini中,我有:
[extensions]
hgext.bookmarks =
hggit =
Run Code Online (Sandbox Code Playgroud)
当我在命令提示符下键入'hg'时,我看到:"***无法导入扩展名hggit:没有名为hggit的模块"
在我的c:\ Python25文件夹下查看,我看到的对hggit的唯一引用是Lib\site-packages\hg_git-0.2.1-py2.5.egg
.这应该被提取到某个地方,还是应该按原样运行?
由于失败了,我尝试了hg-git页面中的"更多参与"指令,建议克隆git://github.com/schacon/hg-git.git并引用我的Mercurial配置中的路径.我克隆了repo,并将我的扩展文件更改为:
[extensions]
hgext.bookmarks =
hggit = c:\code\hg-git\hggit
Run Code Online (Sandbox Code Playgroud)
现在当我运行hg时,我看到:***无法从c:\ code\hg-git\hggit导入扩展名hggit:没有名为dulwich.errors的模块.
好的,所以这告诉我它现在正在寻找hggit,因为我可以在hg-git\hggit\git_handler.py中看到它调用
from dulwich.errors import HangupException
Run Code Online (Sandbox Code Playgroud)
这让我觉得dulwich没有正确安装,或者没有安装在路径中.
更新:
从Python命令行:
import dulwich
Run Code Online (Sandbox Code Playgroud)
产量 Import Error: No module named dulwich
但是,在C:\ Python25\Lib\site-packages下,我有一个似乎已填充的dulwich-0.5.0-py2.5.egg文件夹.这是由上述步骤创建的.我需要采取额外的步骤使其成为Python"路径"的一部分吗?
从Python命令行(如其中一个答案中所建议的):
import pkg_resources
pkg_resources.require('dulwich')
Run Code Online (Sandbox Code Playgroud)
产量 [dulwich 0.5.0 (c:\python25\lib\site-packages\dulwich-0.5.0-py2.5.egg)]
那告诉我什么呢?导入dulwich失败,但显然pkg_resources可以找到它.我该怎么处理这些信息?
我在我的Mac上安装了Mercurial,这太棒了.对我来说,它比Git更容易掌握,所以我想用它来管理git-repositories.因此我按照以下说明安装了hg-git:
但是每次发出hg命令时都会返回以下错误消息:
Mercurial error *** failed to import extension hggit: No module named hggit
Run Code Online (Sandbox Code Playgroud)
我可能很重要的是要注意我在Mac上而不是Windows PC.
有谁知道如何解决这个问题
这是一个非常深奥的问题,所以只是从头开始说清楚:我不是在谈论从svn转换为git,git转换为mercurial,或者mercurial转换为git.我说的是利用"跨系统"插件产生的一种复杂情况,这种插件允许Mercurial在某种程度上与git和SVN进行互操作.
有一段时间我使用了Mercurial的hg-subversion插件来"跟踪"code.google.com上的上游SVN存储库.感谢这个插件,Mercurial认为存储库是"相关的",并且能够提取自我上次从回购中提取以来发生的变化.这允许我维护我自己的私有Mercurial存储库,其中包括私有变更集,分支,标记等,但它会定期与上游SVN存储库中发生的更改同步并合并.
上游回购已经从SVN干净地移动到git.当我干净利落地说,我的意思是他们已经把整个提交树,或至少影响我关心的默认/主分支的部分.
我现在处于这样一种情况:我有一个Mercurial存储库,它最近与现已解散的SVN存储库中的最后一次签入合并,我想开始从新的上游git存储库中提取更改,从在svn存储库移动到github之后发生的更改.
我可以使用精彩的hg-git插件从这个存储库中提取更改,但由于当前存储库没有与git上游存储库"相关"的概念,它将提取所有更改,包括镜像更改集的所有更改已存在于我的存储库中.
所以我正在寻找的建议是如何让我的Mercurial存储库通过hg-git考虑自己,与上游git存储库相关,并且还考虑git存储库中所有适当的提交为"已经拉出"维持变更集平等的目的.
我看到内部的hg-git似乎使用了一个文件.hg/git-mapfile,我认为它可以映射上游git和本地Mercurial存储库之间的变更集.这可能是一个线索.
什么是让我的本地Mercurial存储库进入这样一种状态的最简单方法,它本质上就像它是作为上游git存储库的克隆而开始的,但是保留了我自己随时间添加的所有不相关的变更集?
(注意:我不希望用新的克隆"重新开始",然后应用我的私有更改,因为我想保持此存储库的历史完整性以用于我自己的构建/调试目的).
我一直在尝试使用bitbucket建立一个项目,它在github上托管了项目依赖项.使用Hg-Git Mercurial插件我几乎可以到达那里.
但是,当需要推动时,事情变得麻烦.
Mercurial子存储库的文档指出:
2.4推
当您推送时,Mercurial将自动尝试首先推送当前存储库的所有子库.这将确保在由顶级存储库引用时,subrepos中的新变更集可用.
但这会引起一个大问题,因为我不想推送所有的子库(我为什么会这样做?) - 我只有读取权限,所以github不会允许它.只需将主存储库推送到远程服务器,但我无法弄清楚如何做到这一点.hg
无论是否有变化,都希望控制并推送所有子存储库.有没有办法绕过这个功能?
唯一需要推动的是.hgsub
和.hgsubstate
.一旦他们通过替代路由推送(更新到不存在子存储库的变更集),就可以更新并从远程存储库中提取更改,但是如果我要在变更集上再次推送子仓库,整个考验重演.
我正在尝试让hg-git扩展在Windows下工作,经过几个小时的摆弄,我似乎终于有了它的工作.但是,即使hg push的输出读取,我的git存储库中也没有显示任何内容:
importing Hg objects into Git
creating and sending data
github::refs/heads/master => GIT:8d946209
[command completed successfully Wed Oct 20 15:26:47 2010]
Run Code Online (Sandbox Code Playgroud) 我试图用hggit在本地克隆一些github repos.我正在按照教程说明去做
$ hg clone git://github.com/schacon/hg-git.git
abort: repository git://github.com/schacon/hg-git.git not found!
$ hg clone git+ssh://git@github.com/schacon/hg-git.git
abort: repository git+ssh://git@github.com/schacon/hg-git.git not found!
Run Code Online (Sandbox Code Playgroud)
我知道我有hggit,因为以下工作
$ python -c "import hggit"
$ head -n1 `which hg`
#!/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python
$ /opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python -c "import hggit"
Run Code Online (Sandbox Code Playgroud)
另外,我还有另一个github repo,我经常使用hg.我忘了我最初是如何开始工作的,但我认为这是一个新的回购,我推入了github.在我有一个工作回购的文件夹中,我的.hg/hgrc中有以下内容(隐私权转让):
github = git+ssh://git@github.com:myname/repo.git
[ui]
username = Fname Lname <email@gmail.com>
[extensions]
hgext.bookmarks =
hggit =
Run Code Online (Sandbox Code Playgroud)
当然,我只是试图克隆的回购没有hgrc.
更新
$ hg help
给出类似的东西
Mercurial Distributed SCM
list of commands:
add add the specified files on the next commit
addremove add all new …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用hg push
git存储库,但它默默地失败了.我在邮件列表上发现了一个帖子和一个注册的hg-git问题,但两者都是大约半年没有太多活动.所以我开始认为我误解/错误配置了一些东西.我的~/.hgrc
包含
[extensions]
hgext.bookmarks =
hgext.git =
#hggit = /path/to/hg-git-0.3.1/hggit
[bookmarks]
track.current = True
Run Code Online (Sandbox Code Playgroud)
此代码段重现了此问题:
mkdir /tmp/Git
cd /tmp/Git
git init
echo 'something' > myfile
git add .
git commit -m 'Started'
cd ..
hg clone /tmp/Git /tmp/Hg
cd /tmp/Hg
echo 'another thing' >> myfile
hg ci -m 'Working'
hg log
# Two items listed
hg push
cd ../Git
git log
# Only one item listed, but two expected
Run Code Online (Sandbox Code Playgroud)
我尝试了 …
是否可以使用hg-git删除远程分支?
我可以删除local(hg bm -d old-branch
)标签,但是如何告诉git服务器执行相同的操作并不明显.
我有一个项目,其主要(Mercurial)存储库位于SourceForge上,但Bitbucket(Mercurial)和Github(Git)上有克隆.
现在我一直在使用hg-git将Mercurial存储库推送到Github,根据我对该过程的理解,一些元数据在过程中保存在Mercurial存储库中.
现在,当重新克隆Bitbucket存储库并重新克隆Github存储库时,如果我发出一个hg pull ../github-repo
我得到:
pulling from ../github-repo
searching for changes
abort: repository is unrelated
Run Code Online (Sandbox Code Playgroud)
为什么这样,我怎么能说服Mercurial确实他们有关系呢?或者我是否必须依赖我最初推送到Github的原始存储库?我仍然有,但假设我失去了它,我有什么选择,缺少手动变更集移植?
注意:由于拉取请求,Github仓库已更改(新变更集).但SourceForge和Bitbucket repos仍然认为彼此是相关的.现在的任务是将变换集从Github Git repo拉到本地,并分别将它们推回到SourceForge和Bitbucket.