我在 mercurial 中使用书签来模拟类似 git 分支的工作流程。
我发现的一件事是,每当我推送时,我总是只想推送当前书签。而不是打字
hg push -B <bookmark_name>
一直以来,我都想使用别名hg push
来推送当前书签。为此,我需要一种在不提及其名称的情况下引用当前书签的方法。有没有办法做到这一点?
我在 mercurial 中使用书签来模拟类似 git 分支的工作流程。
我发现的一件事是,每当我推送时,我总是只想推送当前书签。而不是打字
hg push -B <bookmark_name>
一直以来,我都想使用别名hg push
来推送当前书签。为此,我需要一种在不提及其名称的情况下引用当前书签的方法。有没有办法做到这一点?
我知道两年前有人问过这个问题,但我在谷歌上找到了这个页面,但没有一个答案有帮助。所以这就是我的诀窍(Linux):
[alias]
currentbranch = !cd `$HG root` && cat .hg/bookmarks.current
pushb = !$HG push -B `$HG currentbranch`
需要 cd 才能从非根目录工作。
好的,独立于平台的解决方案,有点难看
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 .
存储在存储库文件中的当前书签名称.hg/bookmarks.current
。作为别名,您可以使用以下内容:
pushb = push -B `cat .hg/bookmarks.current`
另请注意,当您将存储库状态更新为任何其他修订版时,不会有 file .hg/bookmarks.current
。
这对我有用(并处理带有空格的书签):
alias pushb="hg push -B \"\$(hg bookmarks 2> /dev/null | awk '/\*/ { \$1=\"\"; \$NF=\"\"; printf }' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')\""
您可以使用 shell 调用替换:
hg push -B `hg bookmark --active`
这可以放入别名中(参见别名部分hg help config
)