关于SVN在Linux上的导出功能的几个问题

时间:2012-06-20 12:56:48

标签: linux svn command-line ftp tortoisesvn

我做了一些功课,虽然我可以回答以下关于在Windows上导出SVN repo的所有问题(使用VisualSVN服务器),但我完全迷失在Linux上,因为我是那里的新手。

我想在Linux上使用SVN的导出功能,每次提交存储库时都要更新网站。但是这有一些问题。

我已经宣读了这三个:     How to use "svn export" command to get a single file from the repository?     http://www.duchnik.com/tutorials/2011/07/02/svn-command-reference     http://www.picksourcecode.com/ps/ct/161055.php

并找出了在post-commit hook中使用的以下命令:

svn export --force svn://localhost/repository_name /share/Web/projects/website

问题:

  1. 任何人都有任何想法,为什么它不起作用?更改将提交到存储库,但操作最终会以“提交后挂钩失败(退出代码255)而没有输出”结束。由于目标网站未更新,因此后提交挂钩似乎没有被触发。我检查过(甚至是双重检查)该命令本身就像一个魅力(从命令行调用时)。它只在post-commit钩子内失败。我试图在此文件的末尾添加“exit 0”。当然它是可执行的。没运气。经过多次尝试,仍有相同的错误代码。

  2. 为什么此操作有效,即使我没有提供用户名和密码作为参数?存储库中的“passwd”文件已正确设置,来自外部客户端的任何操作都需要提供用户名和密码,否则将失败。 SVN中的一些错误?

  3. 有没有办法将导出到目标的文件限制为仅更改/添加/删除,而不是在每次提交后导出整个存储库?

  4. 无论如何都要完全相同(导出),而是通过FTP而不是我的QNAP的本地路径到外部服务器?

  5. 对于第三和第四点,我尝试使用svn2web工具形式的SourceForge,但这是一个相当糟糕的想法,它不起作用。它使用预提交钩子而不是后提交,这意味着它中的任何错误都会阻止开发人员提交他们的工作(在我的情况下 - 提交后 - 提交更改,但不会传播到目标)。他们的预提交挂钩在我的服务器上失败(与上面第一点相同的错误消息),并且他们将“svn2web”属性添加到文件夹属性的方法(解决方案)可能适用于纯Linux Subversion客户端,但在使用时似乎完全令人烦恼Windows上的TortoiseSVN作为SVN客户端。

    我想知道,如果问题1(以及2-3和4)的解决方案不是在/ share / Web / projects / website中设置本地工作副本并使用CRON进行perodic更新库?这总是“导出”只有实际的更改,如果没有poper登录名和密码,可能会失败。但这似乎是重新发明轮子或强迫打开已经敞开的大门。

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

简要回答一下:

  1. 我认为你正在运行这个命令,因为不同的用户比SVN守护进程(svnserve)用来运行钩子。其他用户(由SVN使用)可能没有获得运行导出所需的所有权利。

  2. 不幸的是,我不知道。必须是安装SVN的东西。当然,这根本不应该发生。如果存储库得到适当保护并且需要登录密码,那么每个人都必须提供核心服务,即使是出口操作也是如此。

  3. 你需要和扩展脚本,最好是作为post-commit钩子运行,它将比较当前(最后一个 - HEAD)修订版本并且只导出已更改的文件。这不是一件容易的事。在尝试再次发现轮子之前,在互联网上寻找现成的解决方案! :

  4. 没有直接使用SVN的extract命令?最简单的方法,我想到的是提取到本地路径,打包它,通过FTP发送它并在目的地解压缩。或者,如果您无法访问目的地的shell,则逐个文件直接发送,以解压缩档案。

  5. 希望,这些会有所帮助吗? :