如果我添加一个符号链接到颠覆会发生什么?

我想添加一个符号链接到颠覆,当我做一个结帐,它所做的是添加相同的符号链接到我的结帐,但我害怕添加它,如果这不是什么情况发生。

只要你在Unix / Linux平台上工作,你就可以工作。 祝你好运,因为它不支持符号链接。

有关更多信息,请参阅SVN手册中关于符号链接的此页面上的注释。

Windows Vista,Windows 7和Windows 8都支持NTFS文件系统1上的真正符号链接。 这些符号链接与Unix文件系统符号链接完全兼容

我想强调以上。 太多人错误地认为Windows不支持符号链接。

这个错误信息是因为Windows 2000和Windows XP不支持符号链接。 他们支持目录连接点 ,但不支持POSIX样式的符号链接。 更奇怪的是,Windows 2000或Windows XP都不具备所需的linkd命令来创build这些目录连接点。

这不再是事实。 Windows Vista,Windows 7和Windows 8不仅支持符号链接,而且还附带所需的mklink命令。 这些符号链接兼容POSIX兼容操作系统符号链接(Mac OS X,Linux,Unix)

现在到这个问题的核心:

尽pipeWindows现在支持符号链接,而且这些符号链接与Unix / Linux / Mac符号链接兼容 ,但Subversion本身不支持Windows上的符号链接。 我不知道为什么这样。

我不build议将符号链接放入存储库,即使您只在POSIX风格的操作系统而不是Windows中工作。 相反,您应该有您的构build和/或部署步骤创build任何必需的符号链接。 这样可以提供更大的灵活性,因为您可以在构build或部署过程中testing操作系统,并处理任何问题。

此外,在构build/部署阶段创build符号链接比在存储库中创build更less的维护头痛。 试想一下,如果我重命名,移动或删除一个文件,该文件具有指向我的存储库中的符号链接。 我还必须记住寻找任何符号链接并修改它们 – 这是不太可能发生的。 毕竟,不可能看一个文件,并知道可能指向该文件的所有符号链接。

所以作为一个回顾:

  • Windows支持与POSIX风格系统符号链接兼容的符号链接。
  • Subversion仍然不支持Windows上的符号链接。
  • 如果您需要符号链接,请在构build/部署脚本的构build/部署过程中创build它们,而不要将其作为存储库工件。

是的,我知道NTFS中的FS代表文件系统。

如果您从Linux或其他POSIX OS添加符号链接,则什么都不会发生。 它只是工作。

但是,当您尝试从Windows添加符号链接时,您会看到

 C:\repo>svn add test_link svn: E200007: Symbolic links are not supported on this platform 

我想这是因为Windows需要UAC创build一个符号链接。 如果Subversion允许Windows上的符号链接,UAC将会破坏正常的svn up

那么…我不确定技术上的答案,或者后果可能是什么,但我只是试了一下。 我在结帐时创build了一个sym链接。 添加并提交。 Nuked整个结帐。 重新检查出来,sym链接仍然存在,并有适当的链接。

希望能够满足您的担忧;)

也许我错过了其他答案,但认为我可以补充。

Windows 7客户端:

TortoiseSVN 1.8.7,Build 25475 – 64位,2014/05/05 20:52:12
Subversion 1.8.9,发布

Linux客户端:

svn,版本1.6.17(r1128011)

符号链接不仅“生存”,而且可以在Windows的存储库中创build和编辑它们。 您只需要创build一个包含以下内容和svn:special SVN特性的svn:special = *

 link name_of_source_file 

当你用一个知道如何创build符号链接的SVN客户端进行检查时,就会为你创build一个符号链接。 Windows 7客户端创build文本文件,但Linux客户端创build符号链接。


回应zb226的评论:

“一个知道如何创build符号链接的SVN客户端”是一个从源代码构build的二进制文件,它已经被写入使用一个函数,它知道如何创build一个符号链接,在一个文件系统中,这个文件系统有一个符号链接的概念。

快速浏览1.8.13的Subversion源代码 ,在io.c的第608行显示了它,它使用了我不知道标准Windows库中存在的符号链接函数。

另一个答案指出,有一个名为mklink的程序,可以用来在Windows 1上创build一个符号链接。 在C和C ++中,通常会包含一个库,而不是调用可能存在或不存在的程序。 它看起来像微软有一个类似的函数称为CreateSymbolicLink,但它看起来很不成熟。 我无法看到它是否在NTFS上正常工作,这是我所期望的Windows上99.9%的SVN工作目录所支持的。 它确实提到了ReFS,但是我不认为这会在很长的一段时间内被普遍使用。

总之,看起来像Windows上的符号链接的可用性和稳定性与NTFS不存在,所以Subversion的开发人员还没有添加代码,以使用Windows等价的命令呢。

当(或者如果)符号链接成为Windows的每一天的一部分时,我希望它们能够进入Windows版本的Subversion客户端。 大多数我认识的人谁只在Windows上工作,甚至不知道什么是符号链接,我知道谁与非Windows操作系统工作的人都知道,微软正在试验他们。

1.在mklink文档中,它声明这适用于“Windows Vista,Windows Server 2008,Windows Server 2012,Windows 8”,并且奇怪地省略了Windows 7.我认为这实际上意味着它存在并且仅在特定版本的Windows有支持符号链接的特定版本的NTFS。 我不认为符号链接一直存在于NTFS中。


我刚刚注意到Github的Git for Windows客户端支持Windows NTFS符号链接。 他们甚至提供如何启用它的指示 ! 另一个钉子添加到Subversion的棺材。

当一个符号链接被提交到一个Subversion版本库时,Subversion记得这个文件实际上是一个符号链接,以及符号链接所指向的对象。

当该符号链接检出到非Windows系统上的另一个工作副本时,Subversion将从版本化的符号链接重build一个真正的文件系统级符号链接。

但是,这不会限制Windows系统上不支持符号链接的工作副本的可用性。 在这样的系统中,Subversion只是创build一个常规的文本文件,其内容是原始符号链接指向的path。 虽然该文件不能用作Windows系统上的符号链接,但也不会阻止Windows用户执行其他与Subversion相关的活动。

采取从svn书

常见问题解答说,Windows不支持符号链接的原因是,默认情况下只有pipe理员可以创build符号链接。