【发布时间】:2018-10-19 23:57:33
【问题描述】:
有时您正在开发并决定提交,却忘记了您在项目中创建了一些文件。然后几天后,您的伙伴从 Subversion 中获取了您的构建,并抱怨某些文件似乎丢失了。你意识到,啊废话,我忘了添加那些文件!
如何从 Subversion 获取不受版本控制的文件列表,以便确定我已将所有内容添加到存储库?
【问题讨论】:
标签: svn version-control
有时您正在开发并决定提交,却忘记了您在项目中创建了一些文件。然后几天后,您的伙伴从 Subversion 中获取了您的构建,并抱怨某些文件似乎丢失了。你意识到,啊废话,我忘了添加那些文件!
如何从 Subversion 获取不受版本控制的文件列表,以便确定我已将所有内容添加到存储库?
【问题讨论】:
标签: svn version-control
使用svn status 命令:
svn status | grep ^?
没有版本控制的文件用 ?在行首。
如果您发现您总是有一些不应该添加到存储库的特定文件(例如,生成的二进制文件),您应该在包含目录上设置 svn:ignore 属性,这样这些文件就不会一直显示使用svn status时向上。
【讨论】:
svn st | grep ^? | awk '{print $2} | xargs svn add 这将首先找到无版本的文件,awk 将只打印行中的第二项(即文件路径) 并且 xargs 将使这个路径成为 svn add 的参数。
svn st | grep ^? | awk '{print $2}' | xargs svn add
如果某些文件的状态中添加了ignore,它们将不会显示在svn status 中。你需要:
svn status --no-ignore
【讨论】:
如果您在 Windows 上运行,则可以使用 PowerShell 执行类似于 Greg Hewgill 的答案的操作。
(svn stat) -match '^\?'
这可以很容易地扩展以查找所有未版本化和被忽略的文件并删除它们。
(svn stat "--no-ignore") -match '^[I?]' -replace '^.\s+','' | rm
希望对某人有所帮助!
【讨论】:
() -math怎么叫?
或从 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}' 来转义?,因为过滤器是一个正则表达式。