Subversion部分导出

时间:2008-09-03 18:16:08

标签: svn deployment

我有一些有趣的发展情况。客户端和部署服务器位于防火墙内,无法访问Subversion服务器。但是开发人员在防火墙之外并且能够使用Subversion服务器。现在我解决的解决方案是更新我的代码本地副本,然后使用UnleashIT提取最近更新的文件。

问题是如何从Subversion中获取更新的文件,以便它们可以通过防火墙进行物理传输并放在部署服务器上。

我并不担心尝试更改防火墙设置或试图找到一种更容易从防火墙内部访问Subversion服务器的方法。我只是对从最近更改的文件的存储库中部分导出的方法感兴趣。

还有其他建议吗?

答案发现:除了我标记为答案的答案外,我还发现以下内容可以从TortoiseSVN执行此操作:

来自http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions
* right-click, "compare revisions"
* select all files in the list
* right-click, choose "export to..." 

8 个答案:

答案 0 :(得分:2)

svn export不接受修订范围,请尝试一下。

一种可能的解决方案是使用以下命令获取已更改文件的列表:

svn diff --summarize -rXXX http://svn/...

然后导出每个。

答案 1 :(得分:1)

所以,如果我理解正确......

假设您有一个如下所示的存储库:

/
|+-DIR1
|   |- FILEa
|   |- FILEb
|+-DIR2
|   |- FILEc
|   |- FILEd
|- FILEe
|- FILEf

让我们说你更新文件FILEaFILEcFILEf并将它们提交回存储库。然后,您要从存储库导出的内容是一个如下所示的结构:

/
|+-DIR1
|   |- FILEa
|+-DIR2
|   |- FILEc
|- FILEf

是吗?

答案 2 :(得分:1)

Subversion钩子看起来很有希望。但是对于如何编写钩子脚本相对不了解,我如何提取已提交的文件并在某处维护目录结构的FTP?

如果我能做到这一点,那么防火墙内的某个人可以将文件拉到部署服务器,我们就可以了。

答案 3 :(得分:1)

我发现rsync对于跨多个系统同步目录树非常有用。如果您从开发工作站对服务器进行shell访问,则可以在本地定期检出代码并运行rsync,这只会将已更改的文件传输到服务器。

(这假设您的开发工作站上有类似Unix的环境.Cygwin可以正常工作。)

cd deploy
svn update
rsync -a . server:webdir/

您的问题听起来好像您实际上没有从开发工作站直接访问您的服务器,而您真正想要的是让Subversion告诉您哪些文件已更改的方法。 svn export 支持一个参数,允许您仅检出特定修订版之间更改的文件。来自svn帮助:

  -r [--revision] arg      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED

您需要跟踪复制到服务器的最新修订版本。假设它是SVN修订版xxxx:

svn export -r xxxx:HEAD http://svn/

然后只需将 deploy 目录的内容复制到现有文件之上的服务器上。

这不会处理已删除的文件,这可能会在某些环境中出现问题。

答案 4 :(得分:0)

您可以尝试使用Subversion二进制文件附带的svnadmin dump命令。您可以使用此命令将整个存储库转储到文件,只是某个修订版或一系列修订版。然后使用svnadmin load dump-file 加载到一个新的,干净的存储库中。

不是一个完美的解决方案,因为它适用于存储库而不是单个文件。

答案 5 :(得分:0)

您只是希望防火墙后面的人能够访问提交给Subversion的最新文件,对吗?

你能写一个使用某种方法(可能是scp或ftp)的svn hook script在提交时将文件发送到远程位置吗?

答案 6 :(得分:0)

如果您标记修订版,则可能有助于github svn-diff-export

答案 7 :(得分:-1)

您不提供有关防火墙允许内容的信息。我不熟悉UnleashIT。

我猜你可以有一个从SVN导出到SVN服务器上的文件夹的脚本。然后,该脚本会压缩导出的文件。然后,您可以根据需要传输ZIP文件并解压缩到部署服务器。

TortoiseSVN支持代理服务器,因此您可以使用客户端的其中一个服务器吗?