4

编辑: Mercurial 版本是 2.7

EDIT2:我在这里有不同的书签,但想删除其中一个而不是合并它们。

我读到我可以foo使用删除远程书签

hg book -d foo
hg push -B foo

请告诉我我在这里做错了什么,同时尝试在@default本地删除书签(有效),然后远程删除(无效,因此在下次拉动时再次恢复):

$ hg pull
pulling from /tmp/foo/base
searching for changes
no changes found
divergent bookmark @ stored as @default

$ hg book
* @                         8:d7a82de9f7c9
  @default                  9:c12daad73af2

$ hg book -d @default

$ hg book
* @                         8:d7a82de9f7c9

$ hg push -B @default
pushing to /tmp/foo/base
searching for changes
no changes found
bookmark @default does not exist on the local or remote repository!

$ hg in -B
comparing with /tmp/foo/base
searching for changed bookmarks
no changed bookmarks found

$ hg out -B
comparing with /tmp/foo/base
searching for changed bookmarks
no changed bookmarks found

$ hg pull
pulling from /tmp/foo/base
searching for changes
no changes found
divergent bookmark @ stored as @default

$ hg book
* @                         8:d7a82de9f7c9
  @default                  9:c12daad73af2

谢谢!

4

2 回答 2

2

看来您有一个Divergent Bookmarks案例!

我相信(尽管请注意,我还没有尝试在远程存储库上重新创建它以进行测试)远程存储库认为它对您的本地存储库也已更新的书签进行了更新。但是名称没有呈现,这很奇怪;它是用空格命名的,CLI 无法呈现的东西,还是“@”符号本身?您可能只是在远程仓库的书签文件中有一个损坏的条目。

当您拉出一个书签并且本地和远程都更新了同一个书签时,这会创建一个不同的书签。远程版本附加了“@[path]”,其中路径是根据远程 repo 的源从 hgrc 文件的 [paths] 部分中提取的。(有关hg paths详细信息,请参阅。)“@[path]”版本仅在本地存在,直到您合并并删除不同的书签。

认为,如果您要合并并推送到远程仓库,您将解决书签问题,一切都会恢复正常。


在您的评论中,您说您故意使用名为“@”的书签,引用了书签的帮助:“如果您设置了一个名为 '@' 的书签,则存储库的新克隆将签出该修订版(并且书签制作活动)默认情况下。”

在这种情况下,为了防止创建@default,您需要让两个存储库就哪个变更集应该具有@;达成一致。基本上你需要修复分歧。鉴于您不想合并并推回远程仓库,这意味着更新@书签以匹配远程仓库。

对于您问题中的示例控制台,我相信删除分歧书签并重置@书签以匹配远程回购将防止分歧问题继续发展:

hg book -d @default
hg book @ -r 9 -f
于 2013-09-06T22:50:31.673 回答
2

远程书签的名称是@,不是@default。您需要做的就是@default在本地删除,然后推@送回远程存储库。这将更新远程存储库以同意您的@书签。

示例(Windows 批处理文件):

hg init a
cd a
echo >file1
hg ci -Am1
hg clone . ..\b
echo >file2
hg ci -Am2
hg book @
hg log
@REM *** At this point "a" has a bookmark on the changeset with comment "2"
cd ..\b
echo >file3
hg ci -Am3
hg book @
@REM *** At this point "b" has a bookmark on the changeset with comment "3"
hg pull ..\a
@REM *** Mercurial 2.7 named the divergent bookmark @1.
@REM *** I delete the local divergent bookmark and push back to "a" (including new changeset)
hg boo -d @1
hg push ..\a -f -B @

@REM *** Display "b" log
hg log

@REM *** Display "a" log...bookmark is moved to changeset with comment "3"
cd ..\a
hg log
于 2013-09-08T22:15:50.180 回答