SVN:递归添加文件?

时间:2010-03-12 04:06:12

标签: svn shell

我正在尝试

svn add *.py --force

作为documentation suggests,但我知道事实上它缺少嵌套在更深层文件夹中的文件。为什么呢?

是否有一种标准方法可以与其他unix命令一起执行此操作? */*.py会抓住更多的文件,但是对于每一个可能的深度来说,这都是一种痛苦。

3 个答案:

答案 0 :(得分:3)

find命令是挖掘你想要的文件的技巧。

find . -name "*.py" -exec svn add --parents {} ';'

并且有大约一百万种方法可以做到,所有这些方法本身都具有教育意义。

# if you want to make sure you don't find files in your .svn directories
find . -name .svn -prune -o -name "*.py" -exec svn add --parents {} ';'

# execs svn only once; probably a bit faster.
# -print0 and -0 avoid problems if files have spaces in names
find . -name .svn -prune -o -name "*.py" -print0 | xargs -0 svn add --parents 

答案 1 :(得分:2)

正如另一个人用find命令注意到的那样,我使用了svn status。按原样使用

>svn status
?       private/Config.my.php
?       private/log/word_failure
?       private/log/db_err_log.txt
?       private/import/client2
M       public/reports/ReadyForMeeting.report.php
?       public/tools/Connection.class.php.good
M       public/tools/FieldNode.class.php
M       public/tools/PageBuilderForm.class.php
M       public/domain/Report_Setup_Parameter.class.php
M       public/domain/Report_Setup_Page.class.php
M       public/modules/mAdmin/mManageUsers.module.php
M       public/modules/mAdmin.module.php
M       public/modules/mAppraiserSetup.module.php
?       public/js/firebug-lite.js
?       public/js/lang_en-us.js
?       public/js/_composite.js
?       public/js/lang_en.js
M       public/js/uniValidate.js

啊,看到所有具有状态的人?这意味着它们在文件系统中但未提交。因此,我添加所有的PHP文件,如此。

> svn status | grep ^\? | awk '{ print $2 }'  | grep .*php$ | xargs svn add

或者如果我想添加php python和js文件,这将起作用

> svn status | grep ^\? | awk '{ print $2 }'  | egrep ".*php$|.*py$|.*js$" | xargs svn add

'svn status'对我来说是最好的答案。这样只会选择未添加到回购中的内容 和往常一样,我所做的只是通过并删除我在回购中不想要的东西(为什么它仍然存在)和 然后我执行,从而获得所有帮助图像等。

> svn status | grep ^\? | awk '{ print $2 }' | xargs svn add

查找也是一个很好的解决方案,这只需要较少的思考。而且也不是那么贪心。此外,如果你在Windows上,那么一些变化将起作用。即获取svn status的输出并获取一个简短的批处理文件 祝你好运!

答案 2 :(得分:0)

find . ! -wholename ./settings.py | grep -P ".*\.(py|html)$" | xargs -d "\n" svn add