将所有未版本控制的文件添加到SVN

44

我有一个工作副本,使用脚本在晚上自动提交到SVN。

我使用SVN命令行完成此操作。

在与Google的沉闷战斗中,我无法找出如何在提交前自动将所有未版本控制的文件添加到存储库。

有没有人知道我该如何做呢?

提前感谢您的善意和帮助,

Dan

5个回答

71
svn --force --depth infinity add .

不过要小心,因为这也会添加任何被svn:ignore忽略的文件。


2
经过进一步测试,似乎 --depth 不是必需的,但也不会有害。 - Matthew Scharley
--force 是我所缺少的...非常感谢! - Daniel Elliott
4
这将会添加目前被忽略的文件,注意! - Gianluca P.
3
我们如何只添加未版本化的文件,而不包括被忽略的文件? - 9me

31

被广泛接受的解决方案是:

svn --force add .

这也会添加所有被忽略的未版本化文件。大多数人可能更喜欢只添加所有未版本化但未被忽略的文件。

要添加所有未版本化但未被忽略的文件,codefox421的答案是正确的:

svn st | grep '^\?' | sed 's/^\? *//' | xargs -I% svn add %

svn st 不显示被忽略的文件。


16

试试这个方法 - 比强制执行svn add更优雅:

$ svn add `svn status|grep '\?'|awk '{print $2}'`

8
可以尝试这个命令,它可以在路径中接受空格: svn st | grep '^\?' | sed 's/^\? *//' | xargs -I% svn add % - nickiaconis
3
我使用了codefox421的建议,在~/.bashrc中添加了一个别名:alias svn-add-unversioned="svn st | grep '^\?' | sed 's/^\? *//' | xargs -I% svn add %" 现在我只需要输入svn-a,按Tab键和回车就可以了! - Josh M.

0

在执行svn commit之前,您必须在脚本中为每个未加入版本控制的文件调用svn add,类似于以下Shell脚本:

for file in `svn st | grep '^\?' | awk '{ print $2; }'`; do
    svn add $file
done

2
呃,使用--force选项在工作目录的根目录上将会自动添加任何未受版本控制的文件。 - Matthew Scharley
虽然你的答案在技术上是正确的,但鉴于其他可选方案,它非常过度工程化 :) - Matthew Scharley
1
如果您的文件名中有空格,则此操作将失败。 - D'Nabre

0
在我的情况下,我需要指定:

 svn --force add dir/*/*/*

* 是我想要添加的树的层级。

使用以下代码检查结果

svn status --no-ignore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接