如何将所有新文件添加到SVN

时间:2010-01-22 21:57:16

标签: svn

我正在使用从CLI生成大量文件的ORM。有一种简单的方法可以在我运行svn add时显示为?的目录中的所有文件上运行svn status吗?

编辑这些文件存在于目录树中,因此为一个目录添加*将不起作用。

15 个答案:

答案 0 :(得分:130)

这将在指定的目录树下添加所有未知(除了忽略)文件:

svn add --force path/to/dir

这将在当前目录及其下方添加所有未知(被忽略的)文件:

svn add --force .

答案 1 :(得分:66)

供参考,these are非常相似的问题。

这些对我来说似乎最有效。它们也适用于空格,不会重新添加被忽略的文件。我没有看到他们在我看到的任何其他答案中列出。

中加入:

svn st | grep ^? | sed 's/?    //' | xargs svn add

去除:

svn st | grep ^! | sed 's/!    //' | xargs svn rm

编辑:如果您想保留被忽略的文件,请不要使用“add *”,否则将重新添加所有被忽略的内容。

答案 2 :(得分:28)

你可以做一个svn add path/to/dir/*你会收到有关版本控制中已有内容的警告,但它会添加所有不是。

答案 3 :(得分:8)

svn status | grep "^\?" | awk '{print $2}' | xargs svn add

从网络上的某个地方拍摄,但我已经使用了一段时间,效果很好。

答案 4 :(得分:5)

如果svn add whatever/directory/*不起作用,您可以采取强硬措施:

svn st | grep ^\? | cut -c 2- | xargs svn add

答案 5 :(得分:4)

解决方案

svn status | grep ^? | sed 's/?    //' | xargs svn add

不适用于空格。相反,可以使用

svn status | grep ^? | sed 's/^?       //' | xargs -I fn svn add "fn"

(好像我的系统中前导空白的数量不同 - 只需调整它)。

答案 6 :(得分:3)

您应该可以运行:

svn add *

它可能会抱怨已经受版本控制的文件,但它也会添加新文件。

但是,您可能想要考虑是否确实要将这些生成的文件添加到版本控制中。它们可以被认为是派生工件,有点像编译代码,因此不应该添加。当然,这取决于你,但需要考虑的事情。

答案 7 :(得分:3)

svn add *

应该做的工作。请确保:

svn commit

之后:)

答案 8 :(得分:1)

在像fish这样的shell中你可以使用** globbing来做到这一点:

svn add **

答案 9 :(得分:1)

svn status | grep "^\?" | awk '{ printf("\""); for (f=2; f <= NF; f++) { printf("%s", $f); if (f<NF) printf(" "); } printf("\"\n");}' | xargs svn add

这是基于马克的答案......以及在互联网上的一点点狩猎。它看起来很难看,但它似乎对OS X有用(包括带空格的文件)。

答案 10 :(得分:1)

即使它包含空格

,也会添加所有未版本控制的文件

svn status | awk&#39; {$ 1 =&#34;&#34 ;;打印$ 0}&#39; | xargs -i svn add&#34; {}&#34;

答案 11 :(得分:0)

我喜欢这些命令,因为他们使用svn status来查找新的或丢失的文件,这些文件会忽略被忽略的文件。

svn add $( svn status | sed -e '/^?/!d' -e 's/^?//' )

svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )

答案 12 :(得分:0)

在bash one-liner中,我认为这是最漂亮的:

svn status | tee >(awk '/^?/{print $2}' | xargs -r svn add >&2) | awk '/^!/{print $2}' | xargs -r svn delete

它将添加所有新文件并删除所有丢失的文件。请谨慎使用,可能需要设置别名以便快速访问。

适用于Mac的注意事项:在xargs中-r是GNU扩展名:可能不受支持。在这种情况下,只删除它并在没有要添加或删除的文件时忽略警告

答案 13 :(得分:0)

我是svn版本控件的新手。但是,对于人们想要添加文件而不忽略已设置的svn:ignore属性的情况,我解决了以下问题

  1. svn add --depth empty path / to / directory
  2. 从ignoreList.txt所在的位置执行“svn propset svn:ignore -F ignoreList.txt --recursive”。在我的情况下,这个文件驻留在“path / to / directory”上面的两个目录,我想添加它。请注意,ignoreList.txt包含我希望svn忽略的文件扩展名,例如* .aux等。
  3. svn add --force path / to / directory /。
  4. 以上步骤有效。

答案 14 :(得分:0)

在Alpine Linux OS上,我根据其他答案使用了此代码:

svn st | grep ^? | sed 's/? *//' | xargs -I fn svn add "fn"