如何从SVN获取所有未版本控制文件的列表?


80

有时您正在开发并且决定提交,而忘记了在项目中创建了一些文件。然后几天后,您的好友将您的构建移出Subversion,并抱怨某些文件似乎丢失了。您意识到啊,废话,我忘了添加那些文件!

我如何从Subversion获取不受版本控制的文件列表,因此我确定已将所有内容添加到存储库中?

Answers:


106

使用svn status命令:

svn status | grep ^?

未版本控制的文件以?表示。在该行的开头。

如果发现始终有一些不应添加到存储库的特定文件(例如,生成的二进制文件),则应svn:ignore在包含目录中设置该属性,以便在使用时这些文件不会一直显示svn status


4
就个人而言,我总是“SVN DIFF”之前“SVN词”,但由于有时很慢,我总是“SVN STAT”之前“SVN差异”,因为当时我没有忘记添加的东西:)这是很方便
ephemient

10
如果您要添加许多未版本控制的文件,请执行以下操作: svn st | grep ^? | awk '{print $2} | xargs svn add 这将首先查找未版本控制的文件,awk将仅打印该行中的第二项(即文件路径),而xargs将使该路径成为svn的参数。加。
duality_ 2012年

7
在awk命令的末尾缺少单引号。该命令应为:svn st | grep ^? | awk '{print $2}' | xargs svn add
jplandrain 2014年

46

如果某些文件已ignore添加到其状态,则它们不会显示在中svn status。你需要:

svn status --no-ignore

1
对于二进制文件也很有用,在我的设置中默认情况下svn状态似乎会忽略这些文件。我可能不知道执行此操作的某些设置,但是在这种情况下使用--no-ignore可以帮助我。
安迪·温斯坦

这应该是公认的答案,因为选择的答案不是在我的情况下工作(二进制文件在Linux环境)
Asqan

15

如果您在Windows上运行,则可以使用PowerShell执行类似于Greg Hewgill的回答。

(svn stat) -match '^\?'

可以很容易地扩展它,以找到所有未版本控制和忽略的文件并删除它们。

(svn stat "--no-ignore") -match '^[I?]' -replace '^.\s+','' | rm

希望对某人有帮助!


1
这个怎么() -math称呼?
Pavel Petrov

11

或从Windows命令行:

svn stat | find "?"

1

您可以使用此命令列出未版本控制文件的所有路径:

svn status | awk '/^?/ {print $2}'

第一部分将执行svn status,然后将输出重定向到AWK,后者将执行简单的过滤器“第一个字符应为'?'”,然后将打印第二个参数“这是文件路径”。

svn status始终不会打印忽略的文件。您可以使用以下方式添加文件或路径:

svn propset svn:ignore "PATH OR PATERN"

这似乎会获得的所有结果svn status,而不仅仅是非版本化文件。我相信命令应该svn status | awk '/^\?/ {print $2}'转义?,因为过滤器是一个正则表达式。
KymikoLoco
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.