比方说,有file.txt一个回购,有两个人正在攻击它.其中一个移动file.txt到另一个文件夹,hg mv并立即将其推入回购.当同事决定推出自己的补足措施时,Mercurial是否有可能自动将更改从原始更改file.txt为移动file.txt?
我太乐观了吗?
she*_*lic 15
简短的回答:是的,你可以.
长例:经典的Java重构与同一文件中的代码更改
mkdir hgmv
cd hgmv/
mkdir -p com/example/hgmv/
cat << EOF > com/example/hgmv/Main.java
package com.example.hgmv;
class Main
{
public static void main(String args[])
{
System.out.println("Hello World!");
}
}
EOF
hg init .
hg add com/example/hgmv/Main.java
hg commit -m "First working version"
cd ..
hg clone hgmv hgmv.refactor
hg clone hgmv hgmv.translation
cd hgmv.refactor
hg branch refactor
hg mv com/example/hgmv/Main.java com/example/hgmv/HgMv.java
sed -i'' 's/Main/HgMv/g' com/example/hgmv/HgMv.java
hg commit -m "refactoring Main->HgMv"
hg push -f --new-branch ../hgmv
cd ..
cd hgmv.translation
hg branch translation
sed -i'' 's/Hello World!/Bonjour Monde!/g' com/example/hgmv/Main.java
hg commit -m "french translation"
hg push -f --new-branch ../hgmv
cd ..
cd hgmv
hg up refactor
hg merge translation
hg commit -m "merge"
cat com/example/hgmv/HgMv.java
Run Code Online (Sandbox Code Playgroud)
火红的:这是对git不利的优势之一
Mercurial存储在存储库的元数据中重命名,因此当您执行操作时hg mv OLD NEW,Mercurial会保留您移动文件的信息.
当您的同事从存储库中提取修改时,他也将重新命名,Mercurial将尝试尽可能地合并更改.如果您只重命名该文件,则根本没有问题,您的同事的更改将与重命名合并.
但是,在以下情况下可能会发生冲突:
这很容易测试,因为这里已经有了很好的答案,所以我会回答这个主要观点:
在这里,我将向您展示这是如何工作的:
@echo off
setlocal
if exist master rd /s /q master
if exist clone rd /s /q clone
hg init master
rem Create new repository
echo a >master\test1.txt
hg commit master -m "test1" --addremove
rem Clone it
hg clone master clone
rem Now rename the file in master
cd master
hg move test1.txt test2.txt
hg commit -m "renamed"
rem And change it in clone
cd ..\clone
echo b >test1.txt
hg commit -m "changed"
rem Now pull and merge
hg pull
hg merge
Run Code Online (Sandbox Code Playgroud)
输出:
[C:\Temp] :test adding master\test1.txt updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved pulling from c:\Temp\master searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) merging test1.txt and test2.txt to test2.txt 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit)
| 归档时间: |
|
| 查看次数: |
5832 次 |
| 最近记录: |