我想让Mercurial列出回购中应该是符号链接的所有跟踪文件。我可以使用hg files "set: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
未将提交的文件显示为链接的原因。< / p>
答案 0 :(得分:1)
我已经学到了一些东西,而且我没有问正确的问题,但让我们先得到足够接近的答案:
hg manifest -v | grep ' @ '
警告:我猜测清单可能会在权限编号和路径之间放置多个符号,因此如果你有一个grep表达式' @ '
可能无法正常工作文件上奇特的一组位。我需要@
周围的空格,因为我们的存储库中有许多名称为@
的文件。
故事的其余部分:经过一些实验,我能够确定特定的mercurial GUI(SourceTree)没有正确地提交新的符号链接,结果证明是{{3 }}。我创建了一个新的repo(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
如果我克隆该repo,即使使用SourceTree,也会忠实地复制Link/link.txt
符号链接,但Link\STlink.txt
链接不是。所以对我来说真正的解决方法是用链接替换所有文件并从命令行再次提交,并尝试记住以后不再使用SourceTree提交新的符号链接。
答案 1 :(得分:0)
要评估哪些文件从符号链接更改为“普通文件”,您可以尝试在其上添加一些bash并比较修改版本和未修改版本的文件集的输出。也许像是
$ 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
示例:
在添加了eeg-link的存储库中,foo22-link更改为普通文件并编辑了foo(并且foo-link一直指向它):
$ diff <(hg files "set:symlink()" -r.) <(hg files "set:symlink()")
0a1
> eeg-link
2d2
< foo22-link
我们得到一个漂亮而干净的
输出with open(...) as f:
显示新添加的符号链接(eeg-link)和删除的符号链接(foo22-link)。
答案 2 :(得分:0)
我可以获得带有hg文件“ set:symlink()”的跟踪符号链接列表,这些链接是工作副本中的符号链接,但是没有捕获到不是工作副本中的符号链接的跟踪符号链接。 >
如果其他答案不清楚,则该问题的基本答案是(忽略Mercurial无法控制的错误所引起的任何并发症),将-r选项添加到hg files
中,例如, / p>
hg -r tip files 'set:symlink()'