【问题标题】:How do I get a list of all unversioned files from SVN?如何从 SVN 获取所有未版本控制文件的列表?
【发布时间】:2018-10-19 23:57:33
【问题描述】:

有时您正在开发并决定提交,却忘记了您在项目中创建了一些文件。然后几天后,您的伙伴从 Subversion 中获取了您的构建,并抱怨某些文件似乎丢失了。你意识到,啊废话,我忘了添加那些文件!

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

【问题讨论】:

    标签: svn version-control


    【解决方案1】:

    使用svn status 命令:

    svn status | grep ^?
    

    没有版本控制的文件用 ?在行首。

    如果您发现您总是有一些不应该添加到存储库的特定文件(例如,生成的二进制文件),您应该在包含目录上设置 svn:ignore 属性,这样这些文件就不会一直显示使用svn status时向上。

    【讨论】:

    • 就我个人而言,我总是在“svn ci”之前“svn diff”,但由于有时速度很慢,所以我总是在“svn diff”之前“svn stat”,这很方便,因为那时我不会忘记添加东西:)
    • 如果你有很多无版本的文件要添加,这样做:svn st | grep ^? | awk '{print $2} | xargs svn add 这将首先找到无版本的文件,awk 将只打印行中的第二项(即文件路径) 并且 xargs 将使这个路径成为 svn add 的参数。
    • awk 命令末尾缺少单引号。命令应该是:svn st | grep ^? | awk '{print $2}' | xargs svn add
    【解决方案2】:

    如果某些文件的状态中添加了ignore,它们将不会显示在svn status 中。你需要:

    svn status --no-ignore
    

    【讨论】:

    • 对于在我的设置中默认被 svn status 忽略的二进制文件也很有帮助。我可能不知道有什么设置可以做到这一点,但在这种情况下使用 --no-ignore 对我有帮助。
    • 这应该是公认的答案,因为所选答案在我的情况下不起作用(对于 linux 环境中的二进制文件)
    【解决方案3】:

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

    (svn stat) -match '^\?'
    

    这可以很容易地扩展以查找所有未版本化和被忽略的文件并删除它们。

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

    希望对某人有所帮助!

    【讨论】:

    • 这个() -math怎么叫?
    【解决方案4】:

    或从 Windows 命令行:

    svn stat | find "?"
    

    【讨论】:

      【解决方案5】:

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

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

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

      svn status 将始终打印被忽略的文件。您可以通过使用添加路径来添加文件或路径

      svn propset svn:ignore "PATH OR PATERN"
      

      【讨论】:

      • 这似乎得到了svn status 的所有结果,而不仅仅是非版本化文件。我相信命令应该是svn status | awk '/^\?/ {print $2}' 来转义?,因为过滤器是一个正则表达式。
      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2015-12-18
      • 2012-10-05
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多