2017-06-06 78 views
0

我希望Mercurial列出所有被认为是符号链接的追溯文件。我可以在的工作副本中获得跟踪的符号链接列表,但不会捕获工作副本中不符合链接的跟踪符号链接。如何让Mercurial列出跟踪为符号链接的所有跟踪文件?

我想要的是一个命令,它查看清单中跟踪文件的属性,并告诉我symlink位是否设置。我试过使用hg manifest -v,文档中提到"print file permissions, symlink and executable bits"。我试过了,但符号链接与可执行位设置的非链接文件没有区别。我得到很多:

755 * path/to/file 

如果我尝试使用领先指标(hg manifest -v | grep '755 *'),我想列出的文件,但我也得到很多误报。

背景:添加并提交符号链接似乎对我们有效,但Mercurial拒绝在其他人提取这些变更集时创建符号链接。我明白为什么Mercurial拒绝:我们与an undocumented rule发生冲突。所以现在我们最终得到符号链接应该是的文件,并且文件的内容是符号链接应该指向的路径。如果我能让Mercurial告诉我哪些文件应该是符号链接,我可以轻松地用相应的链接替换这些文件。

谢谢!

编辑:在我的仓库,符号链接没有被正确地致力于由于在客户端中的错误,这就是为什么hg manifest -v没有显示提交的文件的链接。

回答

0

要评估哪些文件从符号链接更改为“正常文件”,您可以尝试在其上添加一些bash,并比较修改版本和未修改版本的文件集的输出。也许像

diff <(hg files "set:symlink()" -r.) <(hg files "set:symlink()") 

例子:

在加入脑电图链接库,foo22链接改成普通文件和Foo编辑(和Foo链路保持指向它):

$ hg diff 
diff --git a/eeg-link b/eeg-link 
new file mode 120000 
--- /dev/null 
+++ b/eeg-link 
@@ -0,0 +1,1 @@ 
+eeg 
\ No newline at end of file 
diff --git a/foo b/foo 
--- a/foo 
+++ b/foo 
@@ -1,2 +1,3 @@ 
foo is boo! 
And this change, too! 
+And even this. 
diff --git a/foo22-link b/foo22-link 
old mode 120000 
new mode 100644 
--- a/foo22-link 
+++ b/foo22-link 
@@ -1,1 +1,1 @@ 
-foo22 
\ No newline at end of file 
+This is no symlink anymore 

我们得到的

$ diff <(hg files "set:symlink()" -r.) <(hg files "set:symlink()") 
0a1 
> eeg-link 
2d2 
< foo22-link 

显示新添加的符号链接一个很好的和干净的输出(EEG链接)和删除的符号链接(foo22-link)。

+0

谢谢!您的解决方案对于用户有意更改文件并希望查看更改的存储库非常有用。今天早上我发现我的问题实际上是GUI工具不正确地添加/提交文件,意思是“set:symlink”永远不会看到它们。 –

1

我已经学到了一些东西,我不是问正确的问题,但我们得到了足够接近的答案出来的第一方式:

hg manifest -v | grep ' @ '

警告:我会猜测清单可能会在权限编号和路径之间放置多个符号,因此如果文件上有一组奇怪的位,' @ '作为grep表达式可能无法完美工作。我需要@附近的空格,因为我们的存储库中有许多文件名为@

故事的其余部分:一些实验后,我能够确定一个特定的水银GUI(SourceTree)没有提交正确的新符号链接,这竟然是一个longstanding issue with the Mac version。我创建了一个新的回购(hg init),并通过命令行hg添加/提交了一个目标文件和一个符号链接(Link\link.txt)。然后我用SourceTree添加/提交了第二个符号链接(Link\STlink.txt)。 hg manifest -v显示的链接不是由不同客户一视同仁:

755 * Link/STlink.txt 
644 @ Link/link.txt 
644 Target/target.txt 

如果我克隆了一个回购协议,即使有SourceTree,该Link/link.txt符号链接,可以完美再现,但Link\STlink.txt链接不。因此,对我来说真正的解决方法是用链接替换所有文件,并从命令行再次提交,并尝试记住将来不要再使用SourceTree来提交新的符号链接。