我正在尝试将hg push
用于git存储库,但它会无声地失败。我找到了a single post on the mailing list和a registered hg-git issue,但两者都是半年左右没有太多活动。所以我开始认为我误解/错误配置了一些东西。
我的~/.hgrc
包含
[extensions]
hgext.bookmarks =
hgext.git =
#hggit = /path/to/hg-git-0.3.1/hggit
[bookmarks]
track.current = True
此代码段会重现此问题:
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
我尝试了Ubuntu 11.10附带的hg-git 0.2.6-2
和最新的标记版本0.3.1
。我的好消息是版本1.9.1
我甚至在提交之前尝试了两个提议的解决方法hg update master
,并在提交后尝试了hg bookmark -f master
,但两者都给出了错误。
更新:
答案 0 :(得分:19)
这里有两个问题:push应该明确失败,而hg-git应该报告它(但它没有)。
推送失败,给出"abort: git remote error: refs/heads/master failed to update" when pushing to local clone
,因为它是推送到非裸存储库(请参阅more on that from a mercurial user's perspective)。上面代码片段的工作版本是这样的(注意使用Bare
存储库)。
mkdir /tmp/Git
cd /tmp/Git
git init
echo 'something' > myfile
git add .
git commit -m 'Started'
cd ..
git clone --bare -l /tmp/Git /tmp/Bare
hg clone /tmp/Bare/ /tmp/Hg
cd /tmp/Hg
echo 'another thing' >> myfile
hg ci -m 'Working'
hg log
# Two items listed
hg push
cd ../Bare
git log
# Two items listed
关于为什么hg-git
隐藏了这个错误,我怀疑这是Ubuntu附带的最新版本的问题。我做的是
apt-get remove mercurial-git python-dulwich
easy_install hg-git
已删除dulwich 0.7.1
,并根据0.8
网站安装了hg-git
。现在,它对我有用。 mercurial版本(1.9.1
)似乎工作正常。