如何删除SVN中未跟踪的文件

Ker*_* SB 46 svn version-control

如何使用svn命令行工具从SVN结帐中删除所有未跟踪的文件?为此目的Git和Hg提供cleanpurge命令,但我在SVN中找不到相应的命令.

我不在乎是否必须在此过程中恢复所有本地修改(在这种情况下,我基本上希望将我的结帐恢复到原始状态)或者对跟踪文件的本地修改是否可以保持不变; 两种情况都可以接受.

Oli*_*rth 63

可能有内置方式,但如果是这样,我不知道.但是,像下面这样的事情应该做的工作:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

(所有未版本控制的文件都应出现?在以svn st.开头的行中.)

编辑(@GearoidMurphy) 让这个片段在cygwin环境中工作很有挑战性,因为xargs将windows路径斜杠视为转义序列并且无法解析'\ r \n'行结尾,下面是我完全适应的解决方案有效答案:

svn st | grep '^?' | gawk '{printf(\"%s|\", $2)}' | xargs -d "|" -n1 C:\cygwin\bin\rm -r
Run Code Online (Sandbox Code Playgroud)

  • 这适用于带空格的文件名:`svn st | grep'^?' | awk'{print $ 2}'| xargs -I {} rm -rf'{}'` (6认同)
  • 这没有考虑被忽略的文件,所以你可能还需要``no-ignore`标志来`svn st` (2认同)
  • 另外我认为对于包含空格的文件名可能会失败 (2认同)

Jul*_*lio 23

从版本1.9开始,您可以使用以下内容:

svn cleanup . --remove-unversioned
Run Code Online (Sandbox Code Playgroud)

请参阅https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options

  • 丁丁丁!2018年的最佳答案. (4认同)
  • --remove-ignored 也是必需的 (2认同)

the*_*ill 20

SVN清洁脚本目的正是这个,虽然它依赖于已经安装的perl.它会保留本地修改,但会删除被忽略的文件.使用'-p'运行以预览将要删除的文件.