5

我在 mercurial 中使用书签来模拟类似 git 分支的工作流程。

我发现的一件事是,每当我推送时,我总是只想推送当前书签。而不是打字

hg push -B <bookmark_name>

一直以来,我都想使用别名hg push来推送当前书签。为此,我需要一种在不提及其名称的情况下引用当前书签的方法。有没有办法做到这一点?

4

5 回答 5

6

我知道两年前有人问过这个问题,但我在谷歌上找到了这个页面,但没有一个答案有帮助。所以这就是我的诀窍(Linux):

[alias]
currentbranch = !cd `$HG root` && cat .hg/bookmarks.current
pushb = !$HG push -B `$HG currentbranch`

需要 cd 才能从非根目录工作。

于 2016-04-16T16:11:56.143 回答
2

好的,独立于平台的解决方案,有点难看

pushb = push -B `hg log --template "{bookmarks}\n" -r "bookmark() & ."`

或者,以更自然的方式使用嵌套命令,它必须是:hg parents --template="{bookmarks}\n"

丑陋,因为在 hgrc 中使用嵌套 shell 别名的纯 Mercurial 方式

[alias]
cb = !$HG log --template "{bookmarks}\n" -r "bookmark() & ."
pushb = push -B cb

不适合我

>hg pushb
...
bookmark cb does not exist on the local or remote repository!

编辑

很久以后,有了新的解决方案。根据hg help push

如果使用 -B/--bookmark,则指定的书签修订、其祖先和书签将被推送到远程存储库。 指定“。” 相当于指定活动书签的名称

如果为了“推送当前书签”,您可以使用

hg push -B .

于 2013-09-13T09:33:40.520 回答
2

存储在存储库文件中的当前书签名称.hg/bookmarks.current。作为别名,您可以使用以下内容:

pushb = push -B `cat .hg/bookmarks.current`

另请注意,当您将存储库状态更新为任何其他修订版时,不会有 file .hg/bookmarks.current

于 2013-09-13T03:18:15.727 回答
0

这对我有用(并处理带有空格的书签):

alias pushb="hg push -B \"\$(hg bookmarks 2> /dev/null | awk '/\*/ { \$1=\"\"; \$NF=\"\"; printf }' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')\""
于 2016-05-12T17:57:58.060 回答
-1

您可以使用 shell 调用替换:

hg push -B `hg bookmark --active`

这可以放入别名中(参见别名部分hg help config

于 2013-09-12T20:14:07.113 回答