如何在svn中添加所有未跟踪的文件?像git add -i之类的东西?

时间:2008-10-01 22:44:55

标签: svn version-control

我一直在使用这个长命令:

svn st | awk '/\?/ {print $2}' | xargs svn add

同样,对于svn rm文件,我意外删除了正常的rm:

svn st | awk '/\!/ {print $2}' | xargs svn rm --force

我想我可以写一个bash函数来做这两个,但我更喜欢像git那样的交互式add / rm。

6 个答案:

答案 0 :(得分:7)

有一条更简单的路线......

svn add `svn status | grep ?`

然后您可以将其设置为〜/ .bashrc中的别名,例如

alias svn-addi='svn add `svn status | grep ?`'

答案 1 :(得分:6)

我使用了您运行的命令行的一般化,称为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 "$@" '{}'

根据注释,该脚本允许您对具有相同状态的所有文件运行任意命令。

更新:

编写一个以文件路径作为参数的脚本并提示用户添加/删除然后为该文件执行适当的操作并不困难。将上述脚本链接起来可以得到你想要的东西。

答案 2 :(得分:6)

这会在当前目录中添加所有svn-untracked和-unversioned文件,并在所有子目录中递归:

svn add --force ./*

适用于MacOS 10.6+和Ubuntu 10+,svn 1.6+。这不提供任何每个文件,用户交互性;我不知道该怎么做。

这也将添加svn-ignored文件,无论好坏。

答案 3 :(得分:0)

使用可以显示所有未跟踪文件的GUI,然后选择全部并添加。任何体面的SVN gui都应提供此功能。

那就是说,小心你真的想要所有这些文件。

答案 4 :(得分:0)

TortoiseSVN可以选择在“提交”和“显示更改”对话框中显示未版本控制的文件。您可以右键单击文件以“添加”它或将其标记为忽略。

如果您使用的是Visual Studio: AnkhSVN的最新稳定版本具有类似的命令,但在大多数情况下,它仅显示您应添加的文件。 (该项目向SCC提供程序提供了版本的文件列表;其他文件将自动被忽略)

答案 5 :(得分:0)

有一个similar question,其中包含nice Ruby script,可让您选择添加,忽略或跳过新文件。我试过了,它对我有用。不需要GUI,只需要Ruby。