比方说,存储库中有file.txt
,有两个人在攻击它。其中一人使用hg mv
将file.txt
移动到另一个文件夹,并立即将其推送到存储库中。当同事决定推送自己的补丁时,Mercurial是否有可能自动将原始file.txt
中的更改合并到移动后的file.txt
中?
我是不是太乐观了?
发布于 2011-03-04 18:16:14
简短的回答:是的,你可以。
长长的例子:一个经典的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
:这是mercurial胜过git的优势之一
发布于 2011-03-04 16:07:09
Mercurial将重命名存储在存储库的元数据中,因此当您执行hg mv OLD NEW
时,Mercurial会保留您移动文件的信息。
当你的同事从存储库中拉出修改时,他也会拉出重命名,Mercurial将尝试尽可能好地合并更改。如果你只是重命名文件,根本不会有任何问题,你的同事所做的更改将与重命名合并。
但是,在以下情况下可能会出现冲突:
发布于 2011-03-04 15:32:58
合并是在工作人员的私有存储库中完成的,而不是您的中央存储库。为了执行合并,第二个用户必须发出hg fetch
命令,该命令将只修改他自己的私有存储库。然后,他必须执行hg push
以上载到中央存储库。我认为出现问题的可能性几乎为零。
如果你谈论的是两个人在同一工作文件中工作,或者两个人同时在同一个repo上工作,那么你做错了(tm)。
https://stackoverflow.com/questions/5190913
复制相似问题