如何在svn中添加所有未跟踪的文件?像git add -i之类的东西?
时间:2020-03-06 15:00:07 来源:igfitidea点击:
我一直在使用这个长命令:
svn st | awk '/\?/ {print }' | xargs svn add
类似地,要对svn rm文件进行偶然的删除,我用rm正常删除了该文件:
svn st | awk '/\!/ {print }' | xargs svn rm --force
我想我可以编写一个bash函数来完成这两个操作,但是我更喜欢像git这样的交互式add / rm。
解决方案
我使用了我们运行的命令行的通用名称,称为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= shift svn st | egrep "^\${APPLY}[ ]+" | \ sed -e "s|^\${APPLY}[ ]*||" | \ sed -e "s|\\|/|g" | \ xargs -i "$@" '{}'
根据注释,该脚本允许我们对状态相同的所有文件运行任意命令。
更新:
编写一个以文件路径作为参数并提示用户添加/删除然后对该文件执行适当操作的脚本并不是很难。将其与上面的脚本链接在一起将获得所需的内容。
使用可以向我们显示所有未跟踪文件的GUI,然后全选并添加。任何体面的SVN gui都应提供此功能。
就是说,要小心,我们确实要所有这些文件。
TortoiseSVN可以选择在"提交"和"显示更改"对话框中显示未版本控制的文件。我们可以右键单击文件以将其"添加"或者将其标记为已忽略。
如果我们使用的是Visual Studio:
AnkhSVN的最新稳定版本具有类似的命令,但是在大多数情况下,它仅显示我们应添加的文件。 (该项目向SCC提供程序提供了要版本化的文件列表;其他文件将被自动忽略)
有一条更简单的线...
svn add `svn status | grep ?`
然后我们可以将其设置为〜/ .bashrc中的别名,例如
alias svn-addi='svn add `svn status | grep ?`'