我一直在使用这个长命令:
svn st | awk '/\?/ {print $2}' | xargs svn add
同样,对于svn rm文件我意外删除了正常的rm:
svn st | awk '/\!/ {print $2}' | xargs svn rm --force
我想我可以写一个bash函数来做这两个,但我更喜欢像git那样的交互式add/rm.
有一个更容易的线...
svn add `svn status | grep ?`
然后你可以把它设置为〜/ .bashrc中的别名,例如
alias svn-addi='svn add `svn status | grep ?`'
我使用了您运行的命令行的泛化,称为svnapply.sh
.我没有写它,但我不记得我在哪里找到它.希望原作者原谅我在此重新发布:
#!/bin/bash # # Applies arbitrary commands to any svn status. e.g. # # Delete all non-svn files (escape the ? from the shell): # svnapply \? rm # # List all conflicted files: # svnapply C ls -l APPLY=$1 shift svn st | egrep "^\\${APPLY}[ ]+" | \ sed -e "s|^\\${APPLY}[ ]*||" | \ sed -e "s|\\\\|/|g" | \ xargs -i "$@" '{}'
根据注释,该脚本允许您对具有相同状态的所有文件运行任意命令.
更新:
编写一个以文件路径作为参数的脚本并提示用户添加/删除然后为该文件执行适当的操作并不困难.将上述脚本链接起来可以得到你想要的东西.
这会在当前目录中添加所有svn-untracked和-unversioned文件,并在所有子目录中递归:
svn add --force ./*
适用于MacOS 10.6+和Ubuntu 10+,svn 1.6+.这不提供任何每个文件,用户交互性; 我不知道该怎么做.
这也将添加svn-ignored文件,无论好坏.