4

我有一些有趣的发展情况。客户端和部署服务器位于防火墙内,无法访问 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..." 
4

8 回答 8

2

svn export不接受修订范围,试试看。

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

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

然后导出它们中的每一个。

于 2008-11-04T15:14:09.207 回答
1

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

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

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

假设您更新文件FILEa, FILEc, 并将FILEf它们提交回存储库。然后,您要从存储库中导出的结构如下所示:

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

是对的吗?

于 2008-09-03T20:27:56.750 回答
1

Subversion 钩子看起来很有前途。但是相对不了解如何编写钩子脚本,我将如何提取已提交的文件并将它们 FTP 到某个维护目录结构的地方?

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

于 2008-09-04T06:28:19.270 回答
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/

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

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

于 2008-09-05T14:56:36.947 回答
0

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

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

于 2008-09-03T18:54:43.900 回答
0

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

您能否编写一个svn 挂钩脚本,该脚本使用某种方法(可能是 scp 或 ftp)在提交文件时将文件发送到远程位置?

于 2008-09-03T20:30:16.790 回答
0

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

于 2010-03-12T03:43:09.617 回答
-1

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

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

TortoiseSVN 支持代理服务器,所以您可以从客户端使用其中之一?

于 2008-09-03T18:51:32.080 回答