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

时间:2010-10-29 21:38:17

标签: svn

我想添加一个符号链接到subversion,当我做一个结帐时,所有它做的是添加相同的符号链接到我的结帐,但我害怕添加它,如果那不是发生了什么。

9 个答案:

答案 0 :(得分:106)

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

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

这种错误信息是因为Windows 2000和Windows XP不支持符号链接。他们支持目录连接点,但不支持POSIX风格的符号链接。更奇怪的是,Windows 2000或Windows XP都没有附带所需的linkd命令来创建这些目录连接点。

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

现在问题的核心:

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

我不建议将符号链接放入存储库,即使您只在POSIX样式的OS系统而不是Windows中工作。相反,您应该让构建和/或部署步骤创建任何所需的符号链接。这为您提供了更大的灵活性,因为您可以在构建或部署期间测试操作系统并处理任何问题。

另外,在构建/部署阶段创建符号链接比在存储库中创建符号链接所创建的维护难题更少。想象一下,如果我重命名,移动或删除在我的存储库中具有指向它的符号链接的文件。我还要记得寻找任何符号链接并修改它们 - 这是不太可能发生的事情。毕竟,不可能查看文件并知道可能指向该文件的所有符号链接。

作为回顾:

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

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

答案 1 :(得分:13)

当你检查它时,它会在基于Unix / Linux的平台上工作。祝Windows好运,因为它不支持符号链接。

有关详细信息,请参阅SVN手册中有关此符号链接page的说明。

答案 2 :(得分:10)

如果从Linux或其他POSIX OS添加符号链接,则没有任何反应。它只是有效。

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

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

我想这是因为Windows要求UAC创建符号链接。如果Subversion在Windows上允许符号链接,则UAC将中断正常svn up

答案 3 :(得分:9)

也许我在其他答案中错过了它,但我想我可以补充一下。

Windows 7客户端:

  

TortoiseSVN 1.8.7,Build 25475 - 64 Bit,2014/05/05 20:52:12
  Subversion 1.8.9,-release

Linux客户端:

  

svn,版本1.6.17(r1128011)

符号链接不仅能够生存下来。但是可以在Windows中的存储库中创建和编辑它们。您只需要创建一个包含以下内容且SVN属性为svn:special = *的文件。

link name_of_source_file

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

回应zb226的评论:

"一个知道如何创建符号链接的SVN客户端"是一个从源构建的二进制文件,它已被编写为使用一个函数,该函数知道如何在具有符号链接概念的文件系统中创建符号链接。

使用Subversion source函数快速查看1.8.13 {0}}行的io.c symlinkAnother answer,我不知道标准中存在Windows库。

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

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

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

<子> 1.在Git for Windows上声明这适用于&#34; Windows Vista,Windows Server 2008,Windows Server 2012,Windows 8&#34;并且奇怪地省略了Windows 7.我认为它实际上意味着它存在并且仅适用于具有支持符号链接的特定版本NTFS的特定版本的Windows。我不认为NTFS中一直存在符号链接。

我刚刚注意到Github的instructions客户端支持Windows NTFS符号链接。他们甚至提供{{3}}如何启用它!另一个钉子要加到Subversion的棺材上。

答案 4 :(得分:6)

嗯......我不确定技术答案或后果可能是什么,但我只是尝试过。我在结账时创建了一个到目录的sym链接。添加并提交了它。 Nuked整个结帐。重新检查出来,sym链接仍然在那里,并带有相应的链接。

希望能够满足您的后顾之忧;)

答案 5 :(得分:4)

  

当一个符号链接提交到Subversion存储库时,Subversion会记住该文件实际上是一个符号链接,以及符号链接“指向”的对象。

     

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

     

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

取自svn-book

答案 6 :(得分:2)

faq说明在Windows上不支持符号链接的原因是默认情况下只有管理员可以制作符号链接。

答案 7 :(得分:0)

是的,我可以确认SymLinks的版本在Subversion中可以正常工作。

答案 8 :(得分:0)

Git For Windows 支持符号链接,但默认情况下禁用该功能。 这是因为默认情况下,创建符号链接的权限仅限于管理帐户。 这也可以改变。

来源:https://github.com/git-for-windows/git/wiki/Symbolic-Links