Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否自动合并或连接hgtags(Mercurial)?_Mercurial_Merge_Dvcs_Merge Conflict Resolution_.hgtags - Fatal编程技术网

是否自动合并或连接hgtags(Mercurial)?

是否自动合并或连接hgtags(Mercurial)?,mercurial,merge,dvcs,merge-conflict-resolution,.hgtags,Mercurial,Merge,Dvcs,Merge Conflict Resolution,.hgtags,我们正在尝试运行一个chron作业,自动将单独的CVS模块转换为mercurial模块,并最终将这些转换后的mercurial模块整合到单个mercurial repo中 我一直在努力寻找方法来自动合并.hgtags(来自转换的hg repos),而无需用户窗口提示(因此在chron作业中使用) 使用hg merge时,有没有办法告诉mercurial只获取本地文件并将其附加到传入文件 感谢您提供的任何信息或建议只有在.hgtags文件中出现冲突时才会出现窗口提示,这应该是非常罕见的。然而,这里

我们正在尝试运行一个chron作业,自动将单独的CVS模块转换为mercurial模块,并最终将这些转换后的mercurial模块整合到单个mercurial repo中

我一直在努力寻找方法来自动合并.hgtags(来自转换的hg repos),而无需用户窗口提示(因此在chron作业中使用)

使用hg merge时,有没有办法告诉mercurial只获取本地文件并将其附加到传入文件


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

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

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

也许您可以编写一些小程序,作为.hgtag的特殊合并工具,它可以实现您想要的功能,即将本地文件附加到传入文件中。然后,您可以修改hgrc以在合并.hgtags时使用此新工具

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

是的,你可以像Krtek描述的那样设置一个。我刚试过,效果很好:

[merge-tools]
merge-tags.executable = cat
merge-tags.args = $local $other | sort -u >> $output

[merge-patterns]
.hgtags = merge-tags
把它放在服务器上的
.hg/hgrc
文件中,以后的合并只会附加标签。将执行
hg merge

cat /tmp/hgtags.local /tmp/hgtags.other | sort -u >> .hgtags
其中,
cat
的第一个参数是
.hgtags
文件的本地版本,第二个参数是要合并的版本

我对输出进行排序并使其唯一,以避免重复两个文件中常见的行。只要只添加标记,这就可以了——但如果同时删除标记,则
.hgtags
文件中的行顺序很重要,因此不能像这样对其排序请参阅如何处理这种情况。

这是我的测试课程。我首先创建一个具有两个头的存储库:

$ 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
这些分支在以下对象的输出中可见:

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

$ hg merge
merging .hgtags
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
您可以看到文件是如何附加的:

$ cat .hgtags
aff5fe9be7d9b021e55dfb522b29fd03cbcf5cb7 c
0518533f37f6f37edbea5b46d9af2192f69ddecd b

这里有一个简单的python合并工具。它还尝试保持.hgtags文件中现有的行顺序

与马丁的回答相同的警告也适用

导入系统 从heapq导入合并 本地=系统argv[1] 其他=系统argv[2] 输出=系统argv[3] merged_tags=merge(文件(本地).readlines(),文件(其他).readlines()) 唯一的_标记=[] 对于合并的\u标记中的标记: 如果标签不在唯一标签中: 唯一标记。附加(标记) 文件(输出“w”).writelines(唯一的\u标记)
sort-mu
给了我想要的东西。此命令不排序,但删除重复项

排序-u
打破时间顺序。

以下建议:

hgtags.merge.template:changeset=“{tags}”tag=“{node}{tag}\n”

[合并工具]hgtags.executable=hg hgtags.args=log-r“taged()” --style hgtags.merge.template>$output hgtags.premerge=False

[合并模式].hgtags=hgtags


对我们有用。

出于好奇,为什么要用cron作业转换CVS回购?@Oben:Incremental conversion。我在SVN->Hg(减去回购组合)中也做了同样的操作。谢谢,看起来这可能是solution@NickHodges我编写了一个基本的C#exe,可以作为windows上cat的替代程序:
$ hg merge
merging .hgtags
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat .hgtags
aff5fe9be7d9b021e55dfb522b29fd03cbcf5cb7 c
0518533f37f6f37edbea5b46d9af2192f69ddecd b