2010-06-08 127 views
12

我当前将文件提交到我的SVN服务器(位于我的Web主机上),并从那里我SSH入并导出到我的htdocs中的工作目录。SVN仅导出已更改的文件

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

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

是我找到的解决方案,所以也许这可以帮助吗?我怎样才能自动获得修订?

+0

对此BASH解决方案在这里:http://stackoverflow.com/questions/4783362/exporting-only-changed-files-from-subversion-maintaining-directory-structure – AnOldMan 2013-12-07 15:18:12

回答

1

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

2

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

+1

为什么你这么肯定,不其他可能性退出?事实上,有很多,甚至在这里的答案中提出。 Bash脚本,Perl脚本,使用svn2web等工具。什么让你如此确信,你已经提出了所有可能的选择? – trejder 2012-06-26 08:41:01

+0

+1 Okey,还有其他的可能性。我改变了答案。 – Daniel 2012-06-28 05:24:42

+0

加油! :] 祝你今天愉快! :] – trejder 2012-06-29 08:14:58

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

(对不起笨拙的贝壳,还在学习)。

编辑:使用cut代替tr(固定)

+1

+1,用于很好的命令行。我会从它创建一个小的bash脚本。这也可以通过使用“putty”“remote command”功能远程调用,因此您可以通过单击桌面上的图标来执行更新。 – Daniel 2010-06-08 18:05:49

+0

@hudolejev:混合你的解决方案的任何机会,所以它会做只通过FTP到远程服务器,而不是本地路径导出更改文件?需要从开发服务器获取最新版本的存储库到在客户机器上运行的FTP服务器。在此先感谢... – trejder 2012-06-26 08:45:26

+0

对于上传,我会将最后一部分更改为:'xargs -i wput“{}”ftp:// server.url /',甚至使用SCP:'xargs -i scp -r “{}”server.url:/ path/to/whatever'。没有测试过,只是猜测。 – hudolejev 2012-08-30 16:13:07

6

这适用于使用乌龟SVN的。我不确定没有它就可以完成。

我有一个类似的问题,我已经对几千个文件进行了修改(不要问...它是一个继承的问题!)成千上万的,所以我不想上传整个目录或依赖在winscp上正确地匹配日期(因为这个服务器在美国,而im在AUS)。

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

0

svn2ftp 0.3 - bash脚本。免费使用,从svn仓库将文件导出到ftp。 (cheking版本)文件:start.sh - 脚本,settings.properties - svn,ftp,项目属性。

+0

您提供的网址不再退出。有没有人有任何知识,这个脚本可以找到?我精确地询问了svn2ftp,因为有类似svn2web的工具,我尝试过并且对结果不满意。 – trejder 2012-06-26 08:43:56

1

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

  • 要么选择两个版本,然后单击视图更改按钮来查看
  • 它们之间的差异或单击一个小齿轮图标启列查看与某些修订相关的变更集(请参阅此page)。

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

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)在这种情况下的变化并遍历文件和文件夹。

+0

与hudolejev相同的问题:任何混合你的解决方案的机会,所以它会做只通过FTP到远程服务器,而不是本地路径导出更改文件?需要从开发服务器获取最新版本的存储库到在客户机器上运行的FTP服务器。在此先感谢... – trejder 2012-06-26 08:47:12

+0

太棒了,现在我只需要将其编辑为通用脚本,该脚本可用于我所在的回购,并将修订号码作为参数,我很好去! – 2013-03-19 11:22:58

0

对任何其他路人而言......如果您希望在使用Tortoise时获得与@ User123342234解决方案相同的好处,但不希望将更改提交到共享/远程存储库,然后才能导出它们。使用Tortoise(一个鲜为人知的特性)创建一个local svn repository可以获得相同的结果。然后,您可以导出远程分支并将其导入到本地存储库。然后将本地修改的远程存储库的工作副本导出到本地存储库的工作副本上并提交。您现在可以使用本地存储库上的“Show Log”来导出提交的更改,而无需首先提交到共享/远程存储库。不一定是微不足道的,但至少在一次情况下对我有很大的帮助。