如何使Mercurial检测对符号链接的目标所做的更改

时间:2015-01-15 12:09:42

标签: version-control mercurial symlink symlink-traversal

我有一个由Mercurial控制的项目版本(项目main)。该项目通过sub中指向main中文件的符号链接引用(使用)来自其他项目(sub)的某些文件。符号链接已添加到main的存储库中。

问题是Mercurial没有检测到sub对目标文件所做的更改,而没有将符号链接标记为' M' (修改)。

以下示例显示了这种情况:

创建,初始化并提交初始回购:

$ mkdir crap
$ cd crap
$ mkdir main sub
$ cd sub
$ nano sub.txt
$ hg init
$ hg add sub.txt 
$ cd ../main/
$ nano main.txt
$ ln -s ../sub/sub.txt ./sub.txt
$ ls -la
total 24
drwxrwxr-x 2 ruslan ruslan 4096 Jan 15 12:51 .
drwxrwxr-x 4 ruslan ruslan 4096 Jan 15 12:48 ..
-rw-rw-r-- 1 ruslan ruslan   20 Jan 15 12:51 main.txt
lrwxrwxrwx 1 ruslan ruslan   14 Jan 15 12:51 sub.txt -> ../sub/sub.txt
$ hg init
$ hg add main.txt sub.txt 
$ hg commit -m "First"
$ cd ../sub
$ hg commit -m "Sub First"
$ hg status ./sub -A
C sub/sub.txt
$ hg status ./main -A
C main/main.txt
C main/sub.txt

现在修改并提交sub中的目标:

$ nano ./sub/sub.txt 
$ hg status ./sub -A
M sub/sub.txt
$ hg commit ./sub -m "Modified"
$ hg status ./sub -A
C sub/sub.txt

现在main的状态显示引用目标的符号链接未标记为' M':

$ hg status ./main -A
C main/main.txt
C main/sub.txt

再次修改sub而没有提交显示' M'在sub但不在main中:

$ nano ./sub/sub.txt 
$ hg status ./sub
M sub/sub.txt
$ hg status ./main -A
C main/main.txt
C main/sub.txt

如何在符号链接中正确地进行Mercurial检测更改'目标

2 个答案:

答案 0 :(得分:1)

你不能。对于security reasons,Mercurial永远不会遍历符号链接。

答案 1 :(得分:0)

使用-s创建时,可以通过省略ln参数来使用硬链接。

我建议附加.hardlink以便明确,并将ls修改为highlight hardlinks

在Windows机器上,我使用了相同的方法 Link Shell Extension实用程序;我捐赠给作者,您应该这样做:)。

enter image description here