在Subversion的旧时代,我有时会从现有的文件中获取一个新文件svn copy.然后,如果在他们共同的部分中更改了某些内容,我仍然可以使用svn merge更新派生版本.
要使用来自hginit.com的示例,请说"guac"配方已经存在,我想创建一个"superguac",其中包含如何为1000名狂热的足球迷提供鳄梨酱的说明.使用我刚才描述的过程,我可以:
svn cp guac superguac
svn ci -m "Created superguac by copying guac"
(edit superguac)
svn ci -m "Added instructions for serving 1000 raving soccer fans to superguac"
(edit guac)
svn ci -m "Fixed a typo in guac"
svn merge -r3:4 guac superguac
Run Code Online (Sandbox Code Playgroud)
因此错字修正将适用于superguac.
Mercurial提供了一个hg copy命令,将文件标记为原始文件的副本,但我不确定存储库结构是否支持类似的工作流程.这是相同的例子,我只仔细编辑我想在合并中使用的提交中的单个文件:
hg cp guac superguac
hg ci -m "Created superguac by copying guac"
(edit superguac)
hg ci -m "Added instructions for serving 1000 raving soccer fans to superguac"
(edit guac)
hg ci -m "Fixed a typo in guac"
Run Code Online (Sandbox Code Playgroud)
我现在想把guac的变化应用到superguac.那可能吗?如果是这样,那么正确的命令是什么?Mercurial中是否有不同的工作流程可以实现相同的结果(仅限于一个分支)?
没有纯粹的mercurial方式与你的补丁交叉文件,但如果patch你的系统上安装了你可以通过跟进你的一系列mercurial命令实现基本相同的事情:
hg log -p -r tip -I quac | patch superquac
Run Code Online (Sandbox Code Playgroud)
这基本上是说:" 在最近的changeset()-p中应用于文件quac(-I quac)的diff()-r tip将其发送到标准输出(hg log),并将其用作| patch作用于文件superquac的patch()命令的输入(superquac).
你可以这样做
hg cp guac superguac
hg ci -m "Created superguac by copying guac" # CS1
(edit superguac)
hg ci -m "Added instructions for serving 1000 raving soccer fans to superguac" # CS2
hg up -r revision-before-copy
(edit guac)
hg ci -m "Fixed a typo in guac" #CS3
hg merge # this will transfer the typo-fix both to guac and superguac
hg ci -m "merged typo-fix from guac" # CS4
Run Code Online (Sandbox Code Playgroud)
在此之后,存储库看起来像这样
CS1 <--- CS2 <--------- CS4
\ /
\--<-------- CS3 -<-/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |