首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论如何,自动合并或连接hgtag(汞)?

无论如何,自动合并或连接hgtag(汞)?
EN

Stack Overflow用户
提问于 2011-03-01 16:45:00
回答 5查看 1.5K关注 0票数 6

我们正在尝试运行一个chron作业,自动将独立的CVS模块转换为mercurial模块,最后,将这些转换后的汞模块合并到一个汞回购中。

我一直在设法在没有用户窗口提示的情况下自动合并.hgtags (来自转换后的.hgtags)(因此在chron作业中使用)。

在使用hg合并时,是否有一种方法可以告诉mercurial,只需获取本地文件并将其附加到传入文件中?

感谢您提供的任何信息或建议

EN

回答 5

Stack Overflow用户

发布于 2011-03-02 10:59:26

是的,您可以像Krtek描述的那样设置一个合并工具。我刚试了一下,这个就行了:

代码语言:javascript
复制
[merge-tools]
merge-tags.executable = cat
merge-tags.args = $local $other | sort -u >> $output

[merge-patterns]
.hgtags = merge-tags

把它放在服务器上的.hg/hgrc文件中,以后的合并就会附加标记。所发生的是hg merge将执行

代码语言:javascript
复制
cat /tmp/hgtags.local /tmp/hgtags.other | sort -u >> .hgtags

其中,cat的第一个参数是.hgtags文件的本地版本,而第二个参数是您要合并的版本。

为了避免重复两个文件中常见的行,我对输出进行排序并使其惟一。只要您只添加标记,它就能正常工作--但是如果您也删除了标记,那么.hgtags文件中行的顺序就会很重要,所以您不能就这样对其进行排序。请参阅 我的扩展答案 以处理此情况.

这是我的考试。首先,我用两个头创建了一个存储库:

代码语言:javascript
复制
$ hg init
$ echo a > a.txt
$ hg add a.txt
$ hg commit -m a
$ echo b > b.txt
$ hg add b.txt
$ hg commit -m b
$ hg tag b
$ hg update 0
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ echo c > c.txt
$ hg add c.txt
$ hg commit -m c
created new head           
$ hg tag c

分支在图形日志扩展的输出中可见。

代码语言:javascript
复制
@  changeset:   4:54c5397a23a4
|  tag:         tip
|  user:        Martin Geisler <mg@aragost.com>
|  date:        Wed Mar 02 11:45:20 2011 +0100
|  summary:     Added tag c for changeset aff5fe9be7d9
|
o  changeset:   3:aff5fe9be7d9
|  tag:         c
|  parent:      0:0db5fae8b6cc
|  user:        Martin Geisler <mg@aragost.com>
|  date:        Wed Mar 02 11:45:17 2011 +0100
|  summary:     c
|
| o  changeset:   2:a9af8514a64e
| |  user:        Martin Geisler <mg@aragost.com>
| |  date:        Wed Mar 02 11:45:02 2011 +0100
| |  summary:     Added tag b for changeset 0518533f37f6
| |
| o  changeset:   1:0518533f37f6
|/   tag:         b
|    user:        Martin Geisler <mg@aragost.com>
|    date:        Wed Mar 02 11:44:44 2011 +0100
|    summary:     b
|
o  changeset:   0:0db5fae8b6cc
   user:        Martin Geisler <mg@aragost.com>
   date:        Wed Mar 02 11:44:33 2011 +0100
   summary:     a

.hgtags文件中存在冲突:

代码语言:javascript
复制
$ hg cat -r 2 .hgtags
0518533f37f6f37edbea5b46d9af2192f69ddecd b
$ hg cat -r 4 .hgtags
aff5fe9be7d9b021e55dfb522b29fd03cbcf5cb7 c

但是合并仍然是非交互的:

代码语言:javascript
复制
$ hg merge
merging .hgtags
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

您可以看到文件是如何附加的:

代码语言:javascript
复制
$ cat .hgtags
aff5fe9be7d9b021e55dfb522b29fd03cbcf5cb7 c
0518533f37f6f37edbea5b46d9af2192f69ddecd b
票数 8
EN

Stack Overflow用户

发布于 2012-10-08 13:02:46

sort -mu给了我我想要的。此命令不进行排序,但删除重复项。

sort -u破坏时间顺序。

票数 3
EN

Stack Overflow用户

发布于 2011-03-01 16:54:02

只有当您的.hgtags文件中有冲突时才会出现窗口提示,这应该是非常罕见的。然而,这里也许有一个可行的想法。

Mercurial允许您使用与内部工具不同的合并工具,有关更多信息,请参见MergeToolConfiguration。您还可以通过带有--tool选项的命令行更改mergetool (参见hg merge --help)。

也许您可以编写一些小程序,作为.hgtags的一个特殊的合并工具,它可以做您想做的事情,即将本地文件附加到传入的文件中。然后,您可以修改hgrc,以便在合并.hgtags时使用这个新工具。

我从来没有尝试过这个解决方案,这只是一个想法,但也许它会对你有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5157519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档