svn绊脚石

时间:2009-04-27 07:29:30

标签: svn

当我使用svn时,我遇到了一些问题。这是一个清单

  • 在某个时间点,我的所有命令如svn commit,svn add等都可以工作,但是我做了一些事情,以便在没有以root用户(sudo)运行它们的情况下它们都不会工作。具体的行动会导致什么,以及如何解决?
  • 我的其他网站本身创建了一个图像文件夹,其用户:组成为www-data:www-data。当我试图将此文件夹添加到版本控制时,我认为svn无法在图像内创建子目录.svn,因此它输出到图像文件夹的所有子路径都被锁定,我需要运行清理。清理也失败了。此外,它开始显示带有'〜'(代字号)的图像目录,暗示它在某个时刻被版本化,但发生了一些事情。我修复了“无法提交直到断开锁定”和“断开锁定”循环问题,如下所示:
    • 从每个通往图像文件夹的目录中删除.svn / lock文件
    • 将images目录移动到home文件夹,并提交了“Deleted images”
    • 复制了images文件夹并执行'svn add'

但我想知道在上述两种情况中我应该做些什么。我怀疑在案例1中,问题与混乱的文件夹权限有关,但我不确切知道什么,以及如何解决它。我怀疑我可以对没有相应所有者/组的文件夹采取以下步骤之一:

  • 尝试做'sudo add folder_with_different_user_and_group'
  • 将用户:组更改为默认值,添加文件并提交。但不知何故,我想以一种能使其在未来发挥作用的方式恢复这些变化。可能会更改权限但不更改所有者:.svn文件夹的组?

在上述每种情况下使用svn的最佳方法是什么,以及在发生类似情况时如何成功破解锁等?

3 个答案:

答案 0 :(得分:2)

您似乎至少有2个不同的用户正在更新相同的工作副本:

  • www-data:www-data(网络用户)
  • 您自己的用户

这是一个问题。你可以使用root(即sudo)进行所有svn操作 - 它不干净,但可以工作。

答案 1 :(得分:1)

你的第一个问题是文件系统权限,而不是svn问题。如果以root用户身份运行svn命令,那么很多文件和目录很可能最终归root所有。运行

chown -R desiredusername .

作为工作副本根目录中的root应该解决问题(请注意,您必须用真实的用户名替换'desiredusername')。尽量避免以root身份运行,这样可以避免很多这些问题。 :)

至于第二个问题,如果它是一个包含运行时数据的目录,就像您的Web应用程序存储的内容一样,我会怀疑您是否真的要对其进行版本控制。我打赌你没有,所以通过让svn完全忽略该目录你会得到更好的服务。你可以通过运行

来做到这一点
svn propset svn:ignore imagedirectoryname .

在父目录中。再次,将实际名称替换为“imagedirectoryname”。另请注意,如果您在父目录中已经有其他被忽略的资源,则使用svn propset将覆盖它们,因此您要运行

svn propedit svn:ignore .

代替。

答案 2 :(得分:1)

您描述的是权限问题,而不是SVN问题。我建议了解Unix文件权限及其含义,例如here

如果您的文件是由Web服务器创建的,则可能存在Apache配置为以“www-data”或其他形式运行的问题。在这种情况下,将用户(运行SVN命令)添加到Apache用于写入文件的组可能更简单。