承诺一切为SVN回购

时间:2012-01-14 17:45:32

标签: svn

我有一个文件夹,它是SVN存储库的结帐。此文件夹中的文件经常更改,创建新文件并删除旧文件。

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

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

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

2 个答案:

答案 0 :(得分:4)

至少对于删除任务,解析svn status是解决方案,但它可以很快完成:

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

添加也可以用同样的方式完成:

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

- 或者 - 更简单:

svn add . --force

btw:两个声明的svn add命令都会考虑您的svn:ignore属性,并且不会添加被忽略的文件。

答案 1 :(得分:1)

感谢DerVO的答案,我编写了以下脚本,首先删除所有文件,然后添加所有新文件。出于保存目的,delete-command会询问每个文件(因为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