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

解决方案

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

(这假设您的开发工作站上有一个类似 Unix 的环境。Cygwin 会工作得很好。)

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

你的问题听起来好像你实际上没有从开发工作站到服务器的任何直接网络访问权限,而你真正需要的是一种让 Subversion 告诉你哪些文件已更改的方法。 SVN导出 支持一个参数,让您仅查看特定修订版之间更改的文件。来自 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/

然后直接复制里面的内容即可 部署 目录到您的服务器现有文件之上。

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

其他提示

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

一个可能的解决方案是通过以下方式获取已更改文件的列表:

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

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

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

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

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

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

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

是对的吗?

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

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

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

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top