4

我有一个受版本控制的网站项目,它通过符号链接依赖于同一服务器上未版本化目录中的文件。

我目前将符号链接存储在存储库中。这个想法是,如果有人将工作副本签出到同一台服务器上,他们可以在将项目的工作副本提交回存储库之前对其进行编辑和测试。

当他们签出他们的工作副本时,它会成功设置符号链接,以便整个站点在测试时工作。

从事该项目的用户是 Windows 用户,所以我在服务器上设置了一个 samba 共享,然后将它们映射到 Windows 中的网络驱动器。人们可以通过网络共享直接在服务器上编辑他们的工作副本,然后在通过 TortoiseSVN 将更改提交回存储库之前在 Web 浏览器中对其进行测试。

问题

我遇到的问题是 Samba 按预期解析了符号链接,但是当用户尝试将他们的更改提交回存储库时,TortoiseSVN 认为链接文件是项目的一部分并尝试将目标文件提交到存储库而不是符号链接他们自己。

我尝试在 samba 中关闭符号链接支持,这意味着无法解析链接文件,因为我真的不希望人们访问链接文件,也不想在存储库中导入链接文件。这个问题是我得到Can't stat '\\webserver\projects\working\project\symlinked_file.php'. Access is denied

除了符号链接问题之外,其他一切都 100% 完美运行。用户可以将网站项目签出到他们的机器上并对其进行处理(但无法测试),或者将它们签出到开发 Web 服务器上的空间并对其进行处理并进行全面测试。所以我不想改变工作流程,我只需要解决符号链接问题。

非常感谢。

4

3 回答 3

2

我决定从存储库中删除符号链接。然后我创建了一个 bash 脚本,提示用户在他们的工作副本中创建符号链接。我必须确保我关闭了 Samba 的follow symlinks选项以阻止 TortoiseSVN 尝试将链接文件添加到存储库。

另外应该注意的是,当用户使用 TortoiseSVN 执行提交时,它会在更改日志中显示链接,但不会检查它们,因此不会添加到存储库中。你只需要忽略它们。

于 2010-03-10T17:13:33.393 回答
1

您可以使用 UNIX 符号链接和NTFS 符号链接来保持与 Windows 的兼容性吗?或者,您可以随时对其他文件进行版本控制并使用svn:externals链接到它们。

于 2011-07-17T18:10:23.250 回答
0

好吧,在经历了几个选项之后,这就是我最终得到的结果:问题是 Windows 不知道符号链接,但 Tortoise 也不会在 Windows 结帐时破坏它们。解决方案是让人们在 Windows 上共享自己的结帐,然后找到一种方法将符号链接重新添加进去。

当然,仅仅覆盖它们不是一种选择,因为 Tortoise 会抱怨更改的文件/目录等。我们希望不要管它们。对于在符号链接目录中具有静态图像/其他资源的网络服务器,只需简单Alias的 Apache 配置即可,但可惜的是,我们的代码库还包含符号链接代码。

在debian下,unionfs-fuse解决了这些烦恼。似乎在这里工作的食谱:

  • 在 linux 服务器 (svnroots) 的某处创建基本结帐。
  • 创建一个目录,我们将在其中创建一个“覆盖”(carcass)。
  • 在 svn-checkouts 目录中搜索符号链接,并在 carcass 中重新创建它们:

.

for file in `find $DEVPATH/svnroots/ -type l`;do
       path=`dirname $file | sed "s,$DEVPATH/svnroots,$DEVPATH/carcass,g"`
       mkdir -p $path
       path=$path/`basename $file`;
       ln -s `readlink $file` $path;
done
  • 创建所需的目录(使用他们共享的人员文件,但符号链接存储在颠覆中:

.

for user in ${windowsusers[@]};
    unionfs-fuse -o cow,allow_other,suid,uid=33,gid=33 $DEVPATH/carcass=ro:$DEVPATH/$user/=rw $DEVPATH/correct_dirs/$user
done

对该目录的读/写将转到用户目录,carcass 目录是只读的,但覆盖在用户目录上,从而产生正确的符号链接。这些脚本很容易在 subversion 中重新运行符号链接更改(并且不需要重新安装:carcass 中的更改直接反映在正确的目录中)。

于 2011-07-15T15:10:48.970 回答