Rsync 除了 .svn 文件夹及其子内容?

Sea*_*een 10 subversion rsync

处理一个 subversion 存储库和一个不太了解它是如何工作的新用户。

长话短说,由于他们的本地结构由于复制随机 .svn 文件夹而混乱,我做了以下事情:

  • 将本地结构复制到名为 staging 的文件夹中
  • 从暂存目录中递归删除所有 .svn 文件夹
  • 将 repo 签出到“干净的文件夹”

现在我们处于最后一步 - 获取暂存文件夹内容以覆盖干净的内容。

我需要一个命令将暂存目录的内容复制到干净目录,删除仅在干净目录中的所有内容,但保留干净文件夹的 .svn 文件夹。

这听起来像是 rsync 的工作。以下命令是否正确?

rsync -avr --exclude=.svn* [staging] [clean]
Run Code Online (Sandbox Code Playgroud)

Zor*_*che 31

-Crsync的选项可能是你想要的。

不过,不要让手册页中的简短描述欺骗了您。该选项似乎仅适用于 CVS,但根据您的 rsync 版本,它会跳过几乎所有现有常见版本控制系统的文件。

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).
Run Code Online (Sandbox Code Playgroud)

  • 要非常小心,因为这些扩展名可能用于您确实想要复制的文件,例如。`*.a` 用于 iOS 静态库。 (2认同)

Gil*_*il' 7

差不多——这应该是

rsync -av --exclude='.svn*' [staging] [clean]
Run Code Online (Sandbox Code Playgroud)

或任何其他形式的引用,以防止外壳扩展通配符。(通配符只会匹配名称以 开头的不太可能的文件--exclude=.svn,但最好不要冒险,并且即使外壳被配置为阻塞不匹配的通配符或将它们扩展到空列表也能正常工作。 )

-r已包含在-a. 额外r的只是多余的,它不会造成任何伤害。

--exclude导致与其参数匹配的文件既不被复制,也不被考虑进行递归遍历。rsync 的常见困难是相反,除了目录的某些部分之外,排除目录。有关一些提示,请参阅Rsync 过滤器:仅复制一种模式

在这种特殊情况下,排除版本控制目录是获得所需内容的快速方法。