首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mercurial中移动多个分支中的文件

在mercurial中移动多个分支中的文件
EN

Stack Overflow用户
提问于 2013-01-09 18:32:38
回答 1查看 112关注 0票数 0

我正在尝试找出如何一次将mercurial中的多个文件从一个目录移动到所有分支中的另一个目录。我的想法是我在一个目录中有一些文件

A/某些文件

它应该移到

b/a/some_file

但要在分支结构中执行此操作

代码语言:javascript
复制
 10   9
 |    |
 |    8
 |    |
 |____/
 7
 |
 ...

要记住的是,节点9中的一些文件已经更改,但也应该向上移动一个目录。另外,我想在节点7添加一些文件,以便它们存在于两个分支中。但重要的是要移动文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 07:07:38

重命名在合并中传播,所以如果您签出changeset 7处的文件,在那里重命名它们,然后将重命名更改合并到其余分支,Mercurial应该会做正确的事情。

例如,请参阅下面的命令跟踪中发生的情况。我从创建一个测试存储库开始:

代码语言:javascript
复制
saturn:/tmp$ hg init test
saturn:/tmp$ cd test

然后,我确保在名为br.7的分支上的toplevel目录中存在名为'foo.txt‘的文件

代码语言:javascript
复制
saturn:/tmp/test$ echo foo > foo.txt
saturn:/tmp/test$ hg commit -Am 'add foo'
adding foo.txt
saturn:/tmp/test$ hg branch br.7
marked working directory as branch br.7
(branches are permanent and global, did you want a bookmark?)
saturn:/tmp/test$ hg commit -m 'br.7 opened'

然后,我从‘br.7’分支的最新变更集中派生了另外两个分支,br.8br.9

代码语言:javascript
复制
saturn:/tmp/test$ hg up -C br.7
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
saturn:/tmp/test$ hg branch br.8
marked working directory as branch br.8
(branches are permanent and global, did you want a bookmark?)

saturn:/tmp/test$ hg commit -m 'br.8 opened'
saturn:/tmp/test$ hg up -C br.7
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
saturn:/tmp/test$ hg branch br.9
marked working directory as branch br.9
(branches are permanent and global, did you want a bookmark?)
saturn:/tmp/test$ hg commit -m 'br.9 opened'

现在,变更集图如下所示:

代码语言:javascript
复制
saturn:/tmp/test$ hg log --graph --style=compact
@  3[tip]:1   f3f155b61aa8   2013-01-09 23:48 +0100   gkeramidas
|    br.9 opened
|
| o  2   ad3b03105da7   2013-01-09 23:48 +0100   gkeramidas
|/     br.8 opened
|
o  1   9cfed898c77b   2013-01-09 23:48 +0100   gkeramidas
|    br.7 opened
|
o  0   9a6f15da68d7   2013-01-09 23:47 +0100   gkeramidas
     add foo

因此,如果我先尝试重命名分支br.7中的文件,然后向上合并重命名,则会发生以下情况:

代码语言:javascript
复制
saturn:/tmp/test$ hg up -C br.7
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
saturn:/tmp/test$ mkdir subdir
saturn:/tmp/test$ hg rename foo.txt subdir/foo.txt
saturn:/tmp/test$ hg commit -m 'Rename foo.txt'

saturn:/tmp/test$ hg branches
br.7                           4:d57b57b98f19
br.9                           3:f3f155b61aa8
br.8                           2:ad3b03105da7
default                        0:9a6f15da68d7 (inactive)

然后,最后,我将重命名变更集从分支br.7合并到更高的分支:

代码语言:javascript
复制
saturn:/tmp/test$ hg up -C br.8
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
saturn:/tmp/test$ hg merge br.7
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)

合并的结果在git风格的diff输出中如下所示:

代码语言:javascript
复制
saturn:/tmp/test$ hg diff --git
diff --git a/foo.txt b/foo.txt
deleted file mode 100644
--- a/foo.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-foo
diff --git a/subdir/foo.txt b/subdir/foo.txt
--- /dev/null
+++ b/subdir/foo.txt
@@ -0,0 +1,1 @@
+foo

如果我提交此更改,则历史记录如下所示:

代码语言:javascript
复制
saturn:/tmp/test$ hg log --graph --style=compact
@    5[tip]:2,4   22b095e35b43   2013-01-10 00:02 +0100   gkeramidas
|\     Merge rename of foo.txt
| |
| o  4:1   d57b57b98f19   2013-01-09 23:49 +0100   gkeramidas
| |    Rename foo.txt
| |
| | o  3:1   f3f155b61aa8   2013-01-09 23:48 +0100   gkeramidas
| |/     br.9 opened
| |
o |  2   ad3b03105da7   2013-01-09 23:48 +0100   gkeramidas
|/     br.8 opened
|
o  1   9cfed898c77b   2013-01-09 23:48 +0100   gkeramidas
|    br.7 opened
|
o  0   9a6f15da68d7   2013-01-09 23:47 +0100   gkeramidas
     add foo

注意重命名现在看起来像一个实际的‘合并’操作,并查看日志副本如何通过重命名操作返回到在以下输出中添加foo.txt的原始更改:

代码语言:javascript
复制
saturn:/tmp/test$ hg log --copies --style=compact foo.txt subdir/foo.txt
4:1   d57b57b98f19   2013-01-09 23:49 +0100   gkeramidas
  Rename foo.txt

0   9a6f15da68d7   2013-01-09 23:47 +0100   gkeramidas
  add foo

这样,您就可以拥有一个变更集(本例中为变更集d57b57b98f19 ),该变更集在可能最早的位置执行重命名操作,并且您还可以将此变更集合并到所有较高的分支。您仍然需要分别处理每个分支,但我喜欢能够跟踪所有内容的想法:重命名的内容、重命名的人、发生的时间以及合并到派生分支的时间。

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

https://stackoverflow.com/questions/14233227

复制
相关文章

相似问题

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