【问题标题】:svn script to commit a set of deleted filessvn 脚本提交一组已删除的文件
【发布时间】:2014-01-06 19:23:05
【问题描述】:

我从本地副本中删除了许多文件,这些文件存在于主目录的不同子目录中。我还想从我的 SVN 存储库中删除所有本地删除的文件。

如果我使用 svn st main_dir 检查我的主目录的 SVN 状态,那么所有已删除的文件都显示为“!”符号,表示相应的文件丢失。但即使我使用svn ci main_dir 提交更改,这些文件也不会从我的 SVN 存储库中删除。

是否有任何方法或命令或脚本可以从我的 SVN 存储库中删除我的主目录和子目录的所有本地删除的文件。我想我们可以遍历每个文件夹的所有文件,并通过检查相应的文件 SVN STATUS('!') 从 SVN 中删除本地删除的文件,但我不知道如何将我的想法转换为脚本。

谁能帮我完成这个任务?在此先感谢...

湿婆

【问题讨论】:

标签: linux svn shell


【解决方案1】:

for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i; done

【讨论】:

  • 非常感谢加多林,这工作得很好。我对这个脚本很陌生,请你解释一下这个语句,以便我能正确理解。
  • 1. grep 只取 svn status 中以 ! 开头的行,所以你有兴趣,然后因为 svn status 输出有两列,awk 取第二列(文件名所在的位置),然后将每个文件作为 for 循环中的输入作为“我”。在循环内部我调用 svn delete $i,其中 $i 被文件替换。
  • 感谢加多林的解释。
  • 如果文件路径中有空格则失败。
【解决方案2】:

我发现xargs 比 for 循环更容易:

svn stat | grep \\! | awk '{print $2}' | xargs svn remove

【讨论】:

    【解决方案3】:
    for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i'@'; done
    

    对于其中包含@2x 的文件。

    【讨论】:

    • 你是我的救星! :D 在 Google 或 SO 中搜索“svn delete @2x”并得到正确答案真是太难了!再次感谢!
    【解决方案4】:

    您应该使用svn delete PATH 删除这些文件。这样它们就会从您的文件系统和工作副本中删除。

    有关详细信息,请参阅svn delete

    我建议您svn update 从远程存储库中取回文件并使用svn delete 删除它们。

    【讨论】:

    • 我没有手动删除这些文件,实际上在升级我的第三方库之一时,一些旧文件已从该库的旧版本中删除。所以我只需要从我的 SVN 存储库中删除这些文件。
    • 这将要求您仅使用 svn delete 删除文件,这非常繁琐,有时根本不可能(例如,当您将工作副本与某些其他版本的项目)。
    【解决方案5】:

    也适用于文件名中的空格:

    svn st | grep ! | sed 's/!\s*//' | xargs -I{} svn remove '{}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 2011-08-15
      • 2012-08-11
      • 2020-11-04
      • 2013-10-19
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多