Mercurial “多好?”;hg mv“;命令执行
比如说,回购协议中有Mercurial “多好?”;hg mv“;命令执行,mercurial,Mercurial,比如说,回购协议中有file.txt,有两个人正在破解它。其中一人用hg mv将file.txt移动到另一个文件夹中,并立即将其推送到repo中。当同事决定自己进行润色时,Mercurial是否有可能自动将原始file.txt中的更改合并到移动的file.txt中 我是不是太乐观了?合并是在工人的私人回购协议中完成的,而不是你的中央回购协议。为了执行合并,第二个用户必须发出hg fetch,这将只修改他自己的私有回购。然后,他必须执行hg推送,以上传到中央回购。我认为几乎不可能出现问题 如果你说
file.txt
,有两个人正在破解它。其中一人用hg mv
将file.txt
移动到另一个文件夹中,并立即将其推送到repo中。当同事决定自己进行润色时,Mercurial是否有可能自动将原始file.txt
中的更改合并到移动的file.txt
中
我是不是太乐观了?合并是在工人的私人回购协议中完成的,而不是你的中央回购协议。为了执行合并,第二个用户必须发出
hg fetch
,这将只修改他自己的私有回购。然后,他必须执行hg推送
,以上传到中央回购。我认为几乎不可能出现问题
如果你说的是两个人同时入侵同一个工作文件或两个人同时处理同一个回购协议,那么你是做错了(tm)。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
输出:
[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)
[C:\Temp]:测试
添加master\test1.txt
更新到分支默认值
1个文件已更新,0个文件已合并,0个文件已删除,0个文件未解析
从c:\Temp\master中提取
搜索更改
添加变更集
添加舱单
添加文件更改
添加了1个更改集,其中1个更改为1个文件(+1个头)
(运行“hg头”查看头,“hg合并”合并)
将test1.txt和test2.txt合并到test2.txt
0个文件已更新,1个文件已合并,0个文件已删除,0个文件未解析
(分支合并,别忘了提交)简短回答:可以。 很长的例子:一个经典的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
mkdir hgmv
cd-hgmv/
mkdir-pcom/example/hgmv/
cat com/example/hgmv/Main.java
包com.example.hgmv;
班长
{
公共静态void main(字符串参数[])
{
System.out.println(“你好,世界!”);
}
}
EOF
hg init。
hg add com/example/hgmv/Main.java
hg commit-m“第一个工作版本”
光盘
hg clone hgmv hgmv.refactor
克隆hgmv-hgmv.translation
重构
hg分支重构
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“重构主->HgMv”
hg push-f——新分支../hgmv
光盘
cd-hgmv.translation
hg分支翻译
sed-i’s/Hello World/世界你好/g'com/example/hgmv/Main.java
hg commit-m“法语翻译”
hg push-f——新分支../hgmv
光盘
cd-hgmv
hg-up重构
hg合并翻译
hg提交-m“合并”
cat com/example/hgmv/hgmv.java
火焰:这是mercurial对git的优势之一
- Mercurial存储在提交时重命名/复制
- Git guess在合并时重命名/复制
hg-mv-old.txt-new.txt
和hg-cp-old.txt-new.txt之间没有区别;hg rm old.txt
?确保他们正在进行自己的私人回购。假设有人将文件移动到另一个文件夹,并将这些更改推送到中央回购,而我在同一个文件中(在我的私人回购中)进行了一些润色。hg merge是否有可能自动完成其工作并将我的更改合并到新位置的文件中?没有-它们位于物理上不同的位置;你甚至不会看到更改,直到你拉/合并(获取)其他人所做的更改。-1@特洛伊木马是一个给定的,问题是:当你拉然后合并时,移动的文件会带来任何问题吗?那么,hg mv old.txt new.txt
相对于hg cp old.txt new.txt有什么优势吗;hg rm old.txt
?暂时没有区别,但是如果一个命令就足够了,为什么还要使用两个命令呢?有关更多信息和示例,您可以阅读有关复制和重命名的章节: