【问题标题】:Subversion Partial Export颠覆部分导出
【发布时间】:2008-09-03 18:16:07
【问题描述】:

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

【问题讨论】:

    标签: svn deployment


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我发现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 目录的内容复制到现有文件之上的服务器。

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

      【讨论】:

        【解决方案3】:

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

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

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

        假设您更新文件FILEaFILEcFILEf 并将它们提交回存储库。那么你要从存储库中导出的结构是这样的:

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

        是吗?

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  【解决方案8】:

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

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-09-12
                    • 2010-09-09
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多