我有2个Python类似的脚本,我已经合并为一个(现在需要一些参数来适当地改变行为)。以前的两个文件都在我的Mercurial存储库的顶端。如何指示新文件是我打算删除的2个旧文件的组合?
另请注意,已选择1个文件而不是其他文件,并且某些代码已移过,因此如果无法创建具有新名称的版本控制文件,则会同化一个文件的历史记录到另一个就足够了。
答案 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中。