2012-01-14 42 views
4

我有一个文件夹,它是一个SVN仓库的签出。该文件夹中的文件经常更改,新文件被创建并删除旧文件。将所有内容交付SVN Repo

如何轻松地将存储库中的所有更改提交到remove svn服务器?通常我首先必须发布svn delete [all deleted files and directories recursivly],然后svn add [all added files and directories recursivly],然后svn ci提交。这可以以某种方式自动化吗?

我想过创建一个bash脚本来解析svn status,但是必须有更好的解决方案?!

有一件事很重要:svn-ignore属性不能被忽略。

+0

我不知道是否有更好的方法(我想不出一个),但是这并不听起来像一个特别长或难写的脚本。 – 2012-01-14 17:51:48

+0

我们与[Adobe Robohelp](http://www.adobe.com/products/robohelp.html)文件有类似的情况。我能够删除所有内容/添加所有业务,但是它让我们的svn日志大为混乱。我们所做的是将Robohelp文件压缩并提交zip文件。这使我们的存储库变更为一个单独的文件,使我们的历史更加可以承受。完全添加和删除整个目录使得不可能做差异等等。所以,我不相信我们失去了将所有东西压缩到一个文件中并且仅仅提交的东西。 – 2012-01-31 21:21:04

回答

4

至少在删除任务解析svn status是解决方案,但它可以非常迅速地完成:

svn add $(svn status | sed -e '/^?/!d' -e 's/^?//') 

-or:

svn delete $(svn status | sed -e '/^!/!d' -e 's/^!//') 

也可以做同样的方式加入 - 更简单:

svn add . --force 

btw:两者均声明svn add com mands考虑你的svn:ignore属性,不要添加被忽略的文件。

1

感谢DerVO的答案,我写了下面的脚本,它首先删除所有文件,然后添加所有新文件。对于savety目的删除命令要求每个文件(因为svn delete物理删除文件)

#!/bin/bash 

HERE=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) 
PROG="${0##*/}" 

cd $HERE 
svn status | grep ^\! | sed 's/^\!\s*//' | tr '\n' '\0' | xargs -0 -n 1 -pr svn remove 
svn status | grep ^\? | sed 's/^\?\s*//' | tr '\n' '\0' | xargs -0 -n 1 -pr svn add 
svn commit -m "Work of `date`" 
svn up 
+0

将svn作为第一步将会更好,如果存在错误状态(例如冲突),则停止脚本。 – mc0e 2015-04-18 10:45:35