处理一个 subversion 存储库和一个不太了解它是如何工作的新用户。
长话短说,由于他们的本地结构由于复制随机 .svn 文件夹而混乱,我做了以下事情:
现在我们处于最后一步 - 获取暂存文件夹内容以覆盖干净的内容。
我需要一个命令将暂存目录的内容复制到干净目录,删除仅在干净目录中的所有内容,但保留干净文件夹的 .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)
差不多——这应该是
rsync -av --exclude='.svn*' [staging] [clean]
Run Code Online (Sandbox Code Playgroud)
或任何其他形式的引用,以防止外壳扩展通配符。(通配符只会匹配名称以 开头的不太可能的文件--exclude=.svn,但最好不要冒险,并且即使外壳被配置为阻塞不匹配的通配符或将它们扩展到空列表也能正常工作。 )
-r已包含在-a. 额外r的只是多余的,它不会造成任何伤害。
--exclude导致与其参数匹配的文件既不被复制,也不被考虑进行递归遍历。rsync 的常见困难是相反,除了目录的某些部分之外,排除目录。有关一些提示,请参阅Rsync 过滤器:仅复制一种模式。
在这种特殊情况下,排除版本控制目录是获得所需内容的快速方法。