有时候在开发过程中,你会决定提交代码,忘记了项目中创建了一些文件。几天后,你的朋友从Subversion获取你的构建版本,抱怨一些文件似乎丢失了。你意识到,“糟糕,我忘记将这些文件添加到仓库中了!”
如何从Subversion获取未被纳入版本控制的文件列表,以确保将项目中所有内容都添加到了仓库中?
有时候在开发过程中,你会决定提交代码,忘记了项目中创建了一些文件。几天后,你的朋友从Subversion获取你的构建版本,抱怨一些文件似乎丢失了。你意识到,“糟糕,我忘记将这些文件添加到仓库中了!”
如何从Subversion获取未被纳入版本控制的文件列表,以确保将项目中所有内容都添加到了仓库中?
使用svn status
命令:
svn status | grep ^?
没有版本控制的文件在行首用 ? 标示。
如果你发现总有一些特定的文件不应该被加入到仓库(例如生成的二进制文件),你应该在包含目录上设置 svn:ignore
属性,这样当使用 svn status
时就不会再出现这些文件了。
如果你在Windows上运行,你可以使用PowerShell来做类似于Greg Hewgill的回答。
(svn stat) -match '^\?'
这可以很容易地扩展到查找所有未标记版本和被忽略的文件并将它们删除。
(svn stat "--no-ignore") -match '^[I?]' -replace '^.\s+','' | rm
希望对某些人有所帮助!
() -math
怎么称呼? - Pavel Petrov或者从Windows命令行中执行:
svn stat | find "?"
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
svn st | grep ^? | awk '{print $2} | xargs svn add
首先找到未版本化的文件,awk将仅打印行中的第二个项目(即文件路径),而xargs将使得该路径成为svn add命令的参数。 - duality_svn st | grep ^? | awk '{print $2}' | xargs svn add
。 - jplandrain