我有一个文件夹,它是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属性。
答案 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