如何在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 ?`'