如何将文件标记为Mercurial中的其他2个文件的后代?

时间:2010-06-02 12:36:35

标签: mercurial

我有2个Python类似的脚本,我已经合并为一个(现在需要一些参数来适当地改变行为)。以前的两个文件都在我的Mercurial存储库的顶端。如何指示新文件是我打算删除的2个旧文件的组合?

另请注意,已选择1个文件而不是其他文件,并且某些代码已移过,因此如果无法创建具有名称的版本控制文件,则会同化一个文件的历史记录到另一个就足够了。

2 个答案:

答案 0 :(得分:1)

以下是两个不相关文件“a”和“b”之间合并的示例。

请注意我滥用列表格式,因为我无法弄清楚如何使用此系统。显示为标题但以“summary:”开头的行实际上是从hg输出的,恰好是空白行之前的最后一行。所有其他标题都是我自己的注释,用于解释命令/序列及其输出。命令出现在有'timeless-mbp:... $'的行上。输出所有其他行。

设置

timeless-mbp:~ timeless$ cd /tmp
timeless-mbp:tmp timeless$ rm -rf q
timeless-mbp:tmp timeless$ hg init q
timeless-mbp:tmp timeless$ cd q

定义我的用户名

timeless-mbp:q timeless$ echo '[ui]' > .hg/hgrc
timeless-mbp:q timeless$ echo 'username = timeless' >> .hg/hgrc

首先创建,添加和提交文件

timeless-mbp:q timeless$ echo a > a
timeless-mbp:q timeless$ hg commit -Am a
adding a

从新的临时修订版(null)开始

timeless-mbp:q timeless$ hg up -r null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved

创建,添加和提交文件b

timeless-mbp:q timeless$ echo b > b
timeless-mbp:q timeless$ hg commit -Am b
adding b
created new head

切换回我们的第一个文件,这只是为了创建一个交错的版本历史记录

timeless-mbp:q timeless$ hg up -r 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

将a重命名为to file,因为我们希望将其与名称为“file”

的b合并
timeless-mbp:q timeless$ hg mv a file
timeless-mbp:q timeless$ hg commit -m 'rename a to file'

切换回我们的第二个文件,这只是为了创建一个交错的版本历史记录

timeless-mbp:q timeless$ hg up -r 1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

将b重命名为file,因为我们要将其与名称“file”

合并
timeless-mbp:q timeless$ hg mv b file
timeless-mbp:q timeless$ hg commit -m 'rename b to file'

我正在使用内部强制合并,因为我不想弹出合并工具,还有其他可以使用的合并工具(例如在OS X上使用现代版本的Mercurial,它往往会弹出FileMerge。应用程序,但很难在日志中显示。)

timeless-mbp:q timeless$ hg --config ui.merge=internal:local merge 2
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

用我想要的内容替换内容

timeless-mbp:q timeless$ hg cat -r 2 file > file
timeless-mbp:q timeless$ hg cat -r 3 file >> file

确认它现在有我想要的内容

timeless-mbp:q timeless$ cat file
a
b

提交“合并”文件

timeless-mbp:q timeless$ hg commit -m merging

查看存储库历史记录

timeless-mbp:q timeless$ hg log
changeset:   4:d9d3d23ec1cc
tag:         tip
parent:      3:01c6a61cbe04
parent:      2:3de70df713a7
user:        timeless
date:        Wed Jun 02 16:10:08 2010 +0300
summary:     merging

changeset:   3:01c6a61cbe04
parent:      1:e6b8058965b4
user:        timeless
date:        Wed Jun 02 16:09:43 2010 +0300
summary:     rename b to file

changeset:   2:3de70df713a7
parent:      0:635f50240100
user:        timeless
date:        Wed Jun 02 16:09:30 2010 +0300
summary:     rename a to file

changeset:   1:e6b8058965b4
parent:      -1:000000000000
user:        timeless
date:        Wed Jun 02 16:09:17 2010 +0300
summary:     b

changeset:   0:635f50240100
user:        timeless
date:        Wed Jun 02 16:09:01 2010 +0300
summary:     a

检查注释输出

timeless-mbp:q timeless$ hg ann -f -c file
635f50240100 a: a
e6b8058965b4 b: b

答案 1 :(得分:1)

这不是一个完美的解决方案,这次可能为时已晚,但我认为hg rename会让你到达目的地。这是一个序列:

ry4an@hail [~/hg] % mkdir test
ry4an@hail [~/hg] % cd test/
ry4an@hail [~/hg/test] % hg init
ry4an@hail [~/hg/test] % echo stuff > file1
ry4an@hail [~/hg/test] % echo different > file2
ry4an@hail [~/hg/test] % hg commit --addremove -m 'adding both separately'
adding file1
adding file2
ry4an@hail [~/hg/test] % hg rename --force file1 file2
ry4an@hail [~/hg/test] % hg commit -m 'overwrote 2 with 1'
ry4an@hail [~/hg/test] % hg grep --follow different file2
file2:0:different
ry4an@hail [~/hg/test] % hg grep --follow stuff file2 
file2:1:stuff

请注意,文件'grep'发现'stuff'在file2修订版1中,'different'在文件2修订版0中,所以这两个历史记录现在都在file2中。