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

too*_*hel 50 svn

我想添加一个符号链接到subversion,当我做一个结帐时它所做的就是在我的结帐时添加相同的符号链接,但是我害怕添加它,如果不是这样的话.

Dav*_* W. 108

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.是的,我知道的是,FSNTFS代表文件系统.

  • @KenyakornKetsombut - 所以你说我错了,因为Windows不支持符号链接?你是说我错了,因为我说Subversion不支持Windows上的链接?请注意我的帖子的日期.我发布它是因为大多数其他答案(包括被接受的)和评论错误地指出Windows不做链接,或者它们与Unix不兼容.这两个都是错的,我想直接记录. (18认同)
  • +1用于撰写如此全面,有趣且内容丰富的文章.+ 1因为这不是一个你明显感到热情的事情,因为这实际上并不是一个答案 (7认同)
  • @Kenyakorn Ketsombut你的例子完全没有意义,因为在你的系统上检查指向/ home/user1的符号链接可能也不能在我的系统上工作,因为它不提供这样的文件夹.这说明文件系统是否支持符号链接.Windows确实如此,这只是事实.Windows上的SVN没有,这正是回答者所说的. (4认同)
  • +1因为它完美地回答了问题,提供了替代解决方案,并且同时提供了信息 (3认同)
  • 另外还有一个详细的信息响应.stackoverflow的大部分价值来自共享专业知识.这篇文章是系统应该如何工作的一个很好的例子(在我看来). (2认同)
  • 但是,您是否不需要超级用户权限才能在Windows上实际创建符号链接?这是一个很好的理由,不要在SVN中使用该功能。 (2认同)

jgi*_*d25 12

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

有关详细信息,请参阅SVN Book中有关符号链接的本页说明.

  • Windows已经支持了很长时间的符号链接 - http://en.wikipedia.org/wiki/NTFS_symbolic_link (40认同)
  • Windows支持符号链接,但它们与*nix格式不兼容.我也祝愿在两个平台之间共享符号链接的人好运. (22认同)
  • @TalLiron Subversion旨在实现跨平台.因此,它需要与各种文件系统一起使用.我希望Subversion在存储库中存储符号链接时,将其转换为自己的内部格式.在任何给定平台下下载时,这又将转换为适当的格式. (6认同)
  • @Stewart但是这样呢?期望很好,但事实通常更好(或更糟糕......):) (4认同)

Yan*_* Bo 10

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

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

C:\repo>svn add test_link
svn: E200007: Symbolic links are not supported on this platform
Run Code Online (Sandbox Code Playgroud)

我想那是因为Windows要求UAC创建一个符号链接.如果Subversion在Windows上允许符号链接,则UAC将正常svn up.


Sam*_*mer 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
Run Code Online (Sandbox Code Playgroud)

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


针对zb226的评论:

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

就让我们来看看在Subversion源1.8.13显示了608线io.c中它使用符号链接功能,我不知道在现有标准的Windows库.

另一个答案指出,有一个名为mklink的程序可用于在Windows 1上创建符号链接.在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的棺材.

  • @ zb226也许我不清楚,因为你是对的,Windows上的Subversion不理解_actual_符号链接.相反,它会创建一个文本文件表示,而不是完全忽略它们.我试图在编辑中解释更多背景知识. (2认同)

Aar*_*way 6

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

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