使用hg命令同时操作git和hg
Use hg commands to operate git and hg simultaneously
我有一个 Mercurial 存储库和一个 git 存储库。两者都使用相同的代码和相同的变更集。
当我对我的 hg 存储库进行任何更改、提交并将其推送到 hg 存储库时,相同的更改也应该被推送到 git 存储库。这可能吗?怎么样?
在 mercurial 存储库上启用扩展 hg-git 并使用 post-commit 和 post-changegroup 挂钩。在这些挂钩中推送到 git 存储库。
编辑:
只需将 hg-git 的非标准扩展名(参见 http://hg-git.github.io/ )放在某处并编辑您的 .hgrc:
[extensions]
hggit = /path/to/hg-git/hggit
[hooks]
changegroup.git = hg push git+https://path/to/git-repo.git
post-commit.git = hg push git+https://path/to/git-repo.git
另请阅读 hg help 关于 hgrc / hooks 的内容。
跟进 planemaker 的回答
- 安装 hg-git 扩展程序
- (为简单起见,非强制)将远程 git-repo 添加到本地存储库的
[paths]
部分
- 手工推送到Git-repo,推送成功
- 在存储库
hg push GIT
的 [hooks]
部分创建传出挂钩,其中 GIT - 来自 [paths]
[=51= 的 git-存储库的名称]
- 玩得开心
最终笔记和示例
当心:在 两个 案例中在回购中触发传出挂钩:推送和捆绑。在使用 bundle 的情况下额外推送到 GIT 不会在 repote Git 中做任何危险(更准确地说 - 什么都不做,因为没有任何推送),但如果你想要完美,你可以(在简单的 if 中)检查名为 HG_SOURCE 的环境变量的值,仅当它等于 "push"
时才推送
我真正的两个远程仓库
[paths]
github = git+ssh://git@github.com/lazybadger/Fiver-l10n.git
default = ssh://bigbadger@hg.code.sf.net/u/bigbadger/code
...
[hooks]
outgoing = hg push github
这样我将在推送到 SF 的回购后推送到 GitHub 的回购 - 并且可以从 any Mercurial 客户端完成推送:命令行, TortoiseHG,聪明Git.
(我不使用挂钩名称,因为它现在是单挂钩,我必须运行选美用我的密钥访问Git-repo 的 ssh 类型在推送到 sf 之前)
对于纯CLI用例,您还可以使用懒惰的方式:创建alias,这将结合新命令中的两个推送和从命令行推送仅此命令,而不是 "classic" hg push
。对于我的示例回购协议,它可能类似于(没有错误检查的脏快速示例)
[alias]
pushc = !hg push && hg push github
并且只有 hg pushc
用于推送
我有一个 Mercurial 存储库和一个 git 存储库。两者都使用相同的代码和相同的变更集。
当我对我的 hg 存储库进行任何更改、提交并将其推送到 hg 存储库时,相同的更改也应该被推送到 git 存储库。这可能吗?怎么样?
在 mercurial 存储库上启用扩展 hg-git 并使用 post-commit 和 post-changegroup 挂钩。在这些挂钩中推送到 git 存储库。
编辑: 只需将 hg-git 的非标准扩展名(参见 http://hg-git.github.io/ )放在某处并编辑您的 .hgrc:
[extensions]
hggit = /path/to/hg-git/hggit
[hooks]
changegroup.git = hg push git+https://path/to/git-repo.git
post-commit.git = hg push git+https://path/to/git-repo.git
另请阅读 hg help 关于 hgrc / hooks 的内容。
跟进 planemaker 的回答
- 安装 hg-git 扩展程序
- (为简单起见,非强制)将远程 git-repo 添加到本地存储库的
[paths]
部分 - 手工推送到Git-repo,推送成功
- 在存储库
hg push GIT
的[hooks]
部分创建传出挂钩,其中 GIT - 来自[paths]
[=51= 的 git-存储库的名称] - 玩得开心
最终笔记和示例
当心:在 两个 案例中在回购中触发传出挂钩:推送和捆绑。在使用 bundle 的情况下额外推送到 GIT 不会在 repote Git 中做任何危险(更准确地说 - 什么都不做,因为没有任何推送),但如果你想要完美,你可以(在简单的 if 中)检查名为 HG_SOURCE 的环境变量的值,仅当它等于 "push"
时才推送我真正的两个远程仓库
[paths]
github = git+ssh://git@github.com/lazybadger/Fiver-l10n.git
default = ssh://bigbadger@hg.code.sf.net/u/bigbadger/code
...
[hooks]
outgoing = hg push github
这样我将在推送到 SF 的回购后推送到 GitHub 的回购 - 并且可以从 any Mercurial 客户端完成推送:命令行, TortoiseHG,聪明Git.
(我不使用挂钩名称,因为它现在是单挂钩,我必须运行选美用我的密钥访问Git-repo 的 ssh 类型在推送到 sf 之前)
对于纯CLI用例,您还可以使用懒惰的方式:创建alias,这将结合新命令中的两个推送和从命令行推送仅此命令,而不是 "classic" hg push
。对于我的示例回购协议,它可能类似于(没有错误检查的脏快速示例)
[alias]
pushc = !hg push && hg push github
并且只有 hg pushc
用于推送