SVN导出仅更改文件

时间:2010-06-08 14:43:05

标签: svn bash

我目前将文件提交到我的SVN服务器(位于我的网络主机上),然后我从那里SSH并将它们导出到我的htdocs中的工作目录。

随着我的应用程序变得越来越大,完全导出是浪费时间。我怎样才能导出已更改的文件?

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

我找到了一个解决方案,所以这可能会有所帮助吗?如何自动获得修订?

8 个答案:

答案 0 :(得分:7)

我一直在使用以下Bash脚本:

for i in $(svn diff --summarize -r 1:2 http://repo_path | awk '{ print $2 }'); do p=$(echo $i | sed -e 's{http://repo_path/{{'); mkdir -p $(dirname $p); svn export $i $p; done 

与hudolejev的解决方案类似,它在这种情况下输出修订版本(1和2)之间的更改,并循环遍历文件和文件夹。

答案 1 :(得分:6)

这适用于Tortoise SVN的使用。我不确定没有它就可以做到。

我有一个类似的问题,我已经对数千个文件进行了更改(不要问......这是一个继承的问题!)中有10个成千上万,所以我不想上传整个目录或依靠winscp以正确匹配日期(因为此服务器位于美国,我在AUS中)。

所以我在Tortoise SVN中通过“Show Log”登记到SVN。然后我右键单击最新版本(尽管它可能是您所使用的任何版本)并选择“与之前的版本进行比较”。然后我选择了出现的所有文件(CTRL-A)并右键单击“导出选择到”,BAM将保存正确文件夹结构中的所有更新文件并准备上传。

答案 2 :(得分:2)

我会将SVN签出到本地存储库,然后将更改的文件rsync到Web根目录中。或者只是结帐到webroot并拒绝访问所有.svn目录。

答案 3 :(得分:2)

我不知道存在纯SVN解决方案,但您可以尝试以下方法:

svn update | egrep "^(A|U)[ ]+(.*)" | cut -b 2 | xargs -i cp -R "{}" /path/to/public_html

在您的工作目录中,您将获得更新并解析输出 - svn update

标有AU的所有文件都是可以复制的文件 - egrep "^(A|U)[ ]+(.*)"

删除AU以获取文件名 - cut -b 2

复制自上次更新后更改的文件 - xargs -i cp -R "{}" /path/to/public_html

(抱歉笨拙的shell-fu,还在学习)。

编辑:使用cut代替tr(已修复)

答案 4 :(得分:1)

我不确定这是否与您所指的问题相同,但在为我正在处理的Web应用程序提交文件时,我已使用svn2ftp.py SVN挂钩自动修改FTP文件到登台服务器。这很容易安装,我从来没有遇到过问题。

答案 5 :(得分:1)

我想这与我遇到的问题类似。我经常需要将最近更改过的文件ftp到我的Web服务器。 Rsync在Web服务器上不可用,所以我无法使用它 我在工作中使用了另一种解决方案。我将SVN与我在本地服务器上安装的 Trac 结合使用。在其他Trac中,有可能显示两个修订之间的变化或在某些变更集中引入。如果您从未使用过Trac,请访问Trac项目的主页以浏览其存储库。它是公开的。
作为一个例子,我扩展了最新的稳定版本(在写这篇文章的那一刻),这是0.12。我能看到的最新修订版是10792.您可以单击修订版号来显示该分支的修订日志。 现在你可以做两件事:

  • Diff 列中选择两个版本,然后点击查看更改按钮以查看它们之间的差异
  • 或点击修订版列中的小齿轮图标,查看与特定版本相关的更改集(请参阅此page)。

在这两种情况下,您都会看到类似的页面,其中包含已修改文件的列表以及旧文件和新文件之间格式良好的更改。 在页面底部,您可以找到以两种格式下载差异的链接:统一差异压缩。最后一个正是您所需要的 - 一个仅包含已修改文件的zip存档。您现在可以将存档解压缩并轻松将修改后的文件ftp解压缩到Web服务器。在大型项目中,它确实可以节省时间 如果您不熟悉Trac,请参阅项目网页上提供的Trac文档,或者如果您愿意,可以获得我发现的Managing Software Development with Trac and Subversion书籍。

答案 6 :(得分:0)

svn2ftp 0.3 - bash脚本。免费使用,从svn存储库导出文件到ftp。 (cheking revisions)文件:start.sh - script,settings.properties - svn,ftp,project properties。

答案 7 :(得分:0)

任何其他路人的说明......如果您希望使用@ User123342234与Tortoise一起使用的解决方案具有相同的优势,但在导出它们之前不希望将更改提交到您的共享/远程存储库。使用Tortoise(一个鲜为人知的特征)创建local svn repository可以实现相同的结果。然后,您可以导出远程分支并将其导入本地存储库。然后,通过本地存储库的工作副本导出远程存储库的本地修​​改工作副本并提交它。您现在可以使用本地存储库上的“显示日志”来导出提交的更改,而无需首先提交到共享/远程存储库。不一定是微不足道的,但至少在一次实例中对我很有帮助。