svn 命令行 faq
使用Subversion也一年多了,今天整理了一些有用的小窍门,和大家分享一下。
在Windows下面大家经常用的是到的客户端是tortoisesSVN ,这个图形工具很强大,但是也有一些缺陷。例如使用tortoiseSVN不能进行svn cp, svn mv以及批量进行文件属性的修改等的操作,而这些通过Subversion命令行工具可以很轻松的实现。
还有tortoiseSVN为了能够实时地在资源管理器上显示当前被管理文件地状态信息,会使用TSVNCache.exe在后台不断扫描文件系统,这样会占用大量的系统资源,这里有相关地配置说明。使用 Subversion命令行工具则不存在这样地问题,你可以通过 svn st 命令及时获取文件的状态信息。
在这里主要讲的几个小窍门都是和 Subversion的命令行工具相关的,在下面得示例中我使用得都是简写命令,大家可以通过查找 svn的帮助信息获取到详细的命令信息.
1。 如何查找svn 的帮助信息
你可以通过查看 svn book 或者使用 svn help命令查找svn所支持的指令信息
如果要查找更为详细的命令可以通过 svn help 指令名 如 svn help ci ,来查看svn提交指令的参数信息。
2。如果使用 svn rm 删除了不该删除的文件,如何进行恢复?
如果这时你没有使用过svn ci提交代码,那你只需要使用svn revert 文件名就可以将你误删除的文件恢复
如果你已经把删除操作提交到代码库了,别担心 svn代码库并没有彻底的将这些文件删除了(svn就像一个时空保管,保留了你提交的所有文件),你可以通过 svn cp -r PREV 源文件名 目的文件名 恢复
3。添加了不该添加的文件, 如何删除这些文件?
如果在提交代码前,你可以使用 svn revert 文件名 将你的操作撤销。
如果在提交代码之后发现了这个问题,你就得使用 svn rm来进行删除操作了。
4。如果我得代码库地址发生改变了,如何更新当前工作空间?
这时你不需要从新的代码库 check out, 只需要使用 svn sw --relocate FROM TO [PATH...] 就可以更新你的当前工作空间的代码库地址
5。在提交代码时如何查看当前工作空间的文件信息。
使用 svn st 命令, 你可以看到当前工作空间中修改的文件 'M'表示,没有加入代码库的文件 '?', 有冲突的文件 'C' 表示, 新添加的文件 'A', 删除的文件'D' ...。
在提交代码前最好执行一下svn st 检查一下, 如果发现'C',你需要修改你的代码,然后使用 svn resolved 文件名来解决这个冲突,否则你是不能成功提交的。
同时也要留心一下'?'的文件,因为你有可能忘记执行 svn add 命令把其中某个文件添加到代码库中了。
6. 如果已经提交代码了,如何回滚到以前的版本上。
可以使用svn cat -r PREV filename > filename 恢复到上一个版本,注意这个时候文件的状态是M,也就是说你可以提交你的修改。
如果你只是想co 文件的比较老的版本,并不想在上面做什么修改。 你可以使用 svn up -r NUMBER ,切换当前的工作路径的文件版本。这时,你是不能将这些工作路径内的修改提交到代码库中。
7。什么是 svn property?
由于svn来说文件有很多属性,因为svn客户端是跨平台的,对于代码库的文件,需要根据这些属性以及客户端所在平台来处理工作空间文件的属性。例如我们 常见的Windows文件的回车换行和Unix文件的换行是不相同的。我们可以通过指定svn文件中的 svn:eol-style 属性来实现, 具体命令如下 svn propset svn:eol-style native。
如果你想指定一个shell脚本为可执行文件, 你可以通过命令使用 svn propset svn:executable 文件名来实现。
8。 如何设置svn自动属性
前面提到的文件属性要设置起来通过命令行的方式很麻烦,我们可以通过修改 Subversion的配置文件让Subsersion自动实行上面的操作。 具体做法如下:
修改 home/Subversion/config 文件。
将 enable-auto-props = yes
然后添加如下的内容
*.java = svn:eol-style=native;svn:keywords=Rev Date
*.xml = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
*.xsl = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
*.xsd = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
*.xjb = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
*.wsdl = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
*.properties = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Rev Date
.checkstyle = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
.pmd = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
.ruleset = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date
*.c = svn:eol-style=native;svn:keywords=Rev Date
*.cpp = svn:eol-style=native;svn:keywords=Rev Date
*.h = svn:eol-style=native;svn:keywords=Rev Date
*.dsp = svn:eol-style=CRLF
*.dsw = svn:eol-style=CRLF
*.sh = svn:eol-style=native;svn:executable
*.bat = svn:eol-style=native
*.pl = svn:eol-style=native
*.py = svn:eol-style=native
*.cmd = svn:eol-style=native
*.txt = svn:eol-style=native;svn:mime-type=text/plain
*.cat = svn:eol-style=native;svn:mime-type=text/plain
*.htm* = svn:eol-style=native;svn:mime-type=text/html;svn:keywords=Rev Date
ChangeLog = svn:eol-style=native;svn:mime-type=text/plain
README* = svn:eol-style=native;svn:mime-type=text/plain
LICENSE* = svn:eol-style=native;svn:mime-type=text/plain
NOTICE* = svn:eol-style=native;svn:mime-type=text/plain
TODO* = svn:eol-style=native;svn:mime-type=text/plain
KEYS* = svn:eol-style=native;svn:mime-type=text/plain
INSTALL* = svn:eol-style=native;svn:mime-type=text/plain
WHATSNEW* = svn:eol-style=native;svn:mime-type=text/plain
NEWS* = svn:eol-style=native;svn:mime-type=text/plain
COPYING = svn:eol-style=native;svn:mime-type=text/plain
*.png = svn:mime-type=image/png
*.jpg = svn:mime-type=image/jpeg
*.gif = svn:mime-type=image/gif
Makefile = svn:eol-style=native
*.css = svn:eol-style=native
*.js = svn:eol-style=native
*.jsx = svn:eol-style=native
*.cxf = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Rev Date