一、’.’ is not a working copy.Can’t open file‘.svn/entries’: 系统找不到指定的路径。php
解答:缘由是输入的访问路径不正确,如svn://192.168.6.200/若是最后少写了“/”,就会出现这种错误提示。
二、将文件checkout以后,没有出现SVN的图标,是怎么回事?
解答:有些时候在客户端Checkout文件后,SVN的系统图标也会不显示,能够执行一下“Cleanup”,就会出现SVN的系统图标。
三、为何添加的文件,别人看不到,版本库里也没有?
linux
解答:最可能的缘由是,你只是执行了“Add”而没有“Commit”,这样只是在本地注明某个文件是预约要增长的,而没有实际添加到版本库中,要添加到版本库必须执行“Commit”。删除文件也是同样。
四、“Commit failed。……You have toupdate your working copyfirst” 提交失败,须要首先执行更新操做。
解答:多人同时修改同一文件,在提交前其余人已经抢先提交到SVN服务器中,致使该错误;解决方法:对工做复本中的文件进行更新便可。
五、更新时提示文件发生冲突:“One ormore files are not a conflicted state。”
解答:多人同时修改同一文件的同一部分,SVN没法自动进行合并,会致使该错误;解决方法:对工做复本中的文件和服务器的文件进行比较,手工合并便可。
六、“Commit failed;File alreadyexists”提交失败,文件**已存在。
解答:版本管理系统在改变你的计算机上的工做副本时,是很是的当心的。在作任何事情以前,它都尽量把您的意图写到你的计算机上的日志文件中去。但若是偶然地操做中断了(例如:忽然停电了,您的计算机死机了),那么日志文件记录就可能同您最后的工做状态不一致。一种建议解决途径:先把要提交的东西拷出来放到其它目录,再更新本地文件,而后把拷出来的文件从新放回去提交。
七、Working copy’**’locked.Please execute the ’Clean up’command.
解答:Subversion客户端在提交内容以前会在本地的工做拷贝写日志,防止其余客户端再次做操做,若是这个提交过程当中发生错误,就会存在未清理的日志,解决这个问题之须要执行“清理”操做,整理你的计算机上的工做副本,清理错误的日志记录,使您能够继续操做。
八、执行cleanup时,出现错误“Subversion reported an error while doing a cleanup!” '**'is not a working copy directory ”
解答:遇到这种状况,先删除隐藏文件夹.svn中的tmp下面的临时文件,再执行cleanup。
九、由于仓库与目录不少,使用TSVN每次选择目录URL ofrepository有不少地址,如何才清除呢?像清除浏览器中的历史那样,用什么方法呢?
解答:右键->TortoiseSVN->Settings->SavedData,就能够清除你想要的东西了,包括URL、log、窗口大小、密码缓存等。
十、在SVN中选中一个目录showlog时,出现了某些版本只显示版本号和(nodate),没有其余信息,什么缘由引发的?
解答:出现了(no date)的revision,为其余人修改了你所没有权限访问的某个目录下的文件。web
十一、Attempted to lock analready-locked dir is not under versioncontrol浏览器
I deleted the log file in the .svn directory (I also deleted theoffending file in .svn/props-base)
Then did acleanup.. Then resumed my update.缓存
十二、svn: warning: 'xxxxx' isalready under version control解决办法?服务器
只添加相应目录到SVN,但不添加目录下的文件:
#svn stuploads|grep ^?|awk "{print /$2}"|xargs svn add -N
缘由: 极可能是 .svn 隐藏目录版本信息被修改了
解决办法:
删除uploads目录下的.svn目录及下面的文件(保留uploads目录的.svn)
#finduploads |grep 'uploads/[^/.]*/.svn'|xargs rm -rf网络
或者:find. -name ".svn" |xargs rm -Rf dom
一、将文件checkout到本地目录
svn checkoutpath(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co编辑器
二、往版本库中添加新的文件或文件夹
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下全部的php文件)svn
三、将改动的文件提交到版本库
svn commit-m “LogMessage“ [-N] [--no-unlock]PATH(若是选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
四、加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
五、更新到某个版本
svn update -r mpath
例如:
svn update若是后面没有目录,默认将当前目录以及子目录下的全部文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn updatetest.php(更新,于版本库同步。若是在提交的时候提示过时的话,是由于冲突,须要先update,修改文件,而后清除svnresolved,最后再提交commit)
简写:svn up
六、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预约加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工做版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svnrevert这三条命令在没有网络的状况下也能够执行的,缘由是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
七、删除文件
svn delete path -m “deletetest fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete testfile”
或者直接svn delete test.php 而后再svn ci -m ‘delete testfile‘,推荐使用这种
简写:svn (del, remove,rm)
八、查看日志
svn log path
例如:svn log test.php 显示这个文件的全部修改记录,及其版本号的变化
九、查看文件详细信息
svn info path
例如:svn info test.php
十、比较差别
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差别)
例如:svn diff -r 200:201 test.php
简写:svn di
十一、将两个版本之间的差别合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205test.php(将版本200与205之间的差别合并到当前文件,可是通常都会产生冲突,须要处理一下)
十二、SVN 帮助
svn help
svn help ci
1三、版本库下的文件和目录列表
svn list path
显示path目录下的全部属于版本库的文件和目录
简写:svn ls
1四、建立归入版本控制下的新目录
svn mkdir: 建立归入版本控制下的新目录。
用法: 一、mkdir PATH…
二、mkdir URL…
建立版本控制的目录。
一、每个以工做副本 PATH 指定的目录,都会建立在本地端,而且加入新增
调度,以待下一次的提交。
二、每一个以URL指定的目录,都会透过当即提交于仓库中建立。
在这两个状况下,全部的中间目录都必须事先存在。
1五、恢复本地修改
svn revert: 恢复原始未改变的工做副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,而且会解除冲突的情况。可是它不会恢复
被删除的目录
1六、代码库URL变动
svn switch (sw): 更新工做副本至不一样的URL。
用法: 一、switch URL [PATH]
二、switch –relocate FROM TO [PATH...]
一、更新你的工做副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工做副本对应到同一仓库中某个分支或者标记的
方法。
二、改写工做副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变更
(好比方案名或是主机名称变更),可是工做副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工做副本与仓库的对应关系。
1七、解决冲突
svn resolved: 移除工做副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,而后让 PATH 能够再次提交。
1八、输出指定文件或URL的内容。
svn cat 目标[@版本]…若是指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV是上一版本,也能够写具体版本号,这样输出结果是能够提交的)
今天在提交项目文件到本地SVN时提示错误以下:
过时:”global.php“在事务”21-1“,
You have to update your working copy first.
运行update更新后再次提交又出现以下错误:
svn: Commit failed (details follow):svn: Aborting commit:'global.php' remains inconflict查了一下SVN的手册才知道原来是多个版本之间遇到冲突。此时你须要解决冲突(合并别人的修改)。
--------------------------------------------------------------------------------
举一个例子,Sally修改了sandwich.txt,Harry刚刚改变了他的本地拷贝中的这个文件而且提交到服务器,Sally在提交以前更新它的工做拷贝获得了冲突:
$ svn update C sandwich.txt Updated to revision 2. $ ls -1sandwich.txt sandwich.txt.mine sandwich.txt.r1 sandwich.txt.r2
在这种状况下,Subversion不会容许你提交sandwich.txt,直到你的三个临时文件被删掉。
$ svn commit --message "Add a few more things" svn: Commit failed(details follow): svn: Aborting commit:'/home/sally/svn-work/sandwich.txt' remains in conflict
若是你遇到冲突,三件事你能够选择:
“手动”合并冲突文本(检查和修改文件中的冲突标志)。
用某一个临时文件覆盖你的工做文件。
运行svn revert <filename>来放弃全部的修改。
一旦你解决了冲突,你须要经过命令svnresolved让Subversion知道,这样就会删除三个临时文件,Subversion就不会认为这个文件是在冲突状态了。
$ svn resolved sandwich.txt Resolved conflicted state of'sandwich.txt'
手工合并冲突
第一次尝试解决冲突让人感受很惧怕,但通过一点训练,它简单的像是骑着车子下坡。
这里一个简单的例子,因为不良的交流,你和同事Sally,同时编辑了sandwich.txt。Sally提交了修改,当你准备更新你的版本,冲突发生了,咱们不得不去修改sandwich.txt来解决这个问题。首先,看一下这个文件:
$ cat sandwich.txtTop piece ofbreadMayonnaiseLettuceTomatoProvolone<<<<<<<.mineSalamiMortadellaProsciutto=======SauerkrautGrilledChicken>>>>>>>.r2Creole MustardBottom piece ofbread小于号、等于号和大于号串是冲突标记,并非冲突的数据,你必定要肯定这些内容在下次提交以前获得删除,前两组标志中间的内容是你在冲突区所作的修改:
<<<<<<<.mineSalamiMortadellaProsciutto=======后两组之间的是Sally提交的修改冲突:
=======SauerkrautGrilledChicken>>>>>>>.r2一般你并不但愿只是删除冲突标志和Sally的修改—当她收到三明治时,会很是的吃惊。因此你应该走到她的办公室或是拿起电话告诉Sally,你没办法从从意大利熟食店获得想要的泡菜。一旦大家确认了提交内容后,修改文件而且删除冲突标志。
Top piece ofbreadMayonnaiseLettuceTomatoProvoloneSalamiMortadellaProsciuttoCreoleMustardBottom piece of bread如今运行svn resolved,你已经准备好提交了:
$ svn resolved sandwich.txt$ svn commit -m "Go ahead and use mysandwich, discarding Sally'sedits."记住,若是你修改冲突时感到混乱,你能够参考subversion生成的三个文件—包括你未做更新的文件。你也可使用第三方的合并工具检验这三个文件。
拷贝覆盖你的工做文件
若是你只是但愿取消你的修改,你能够仅仅拷贝Subversion为你生成的文件替换你的工做拷贝:
$ svnupdateC sandwich.txtUpdatedto revision 2.$ lssandwich.*sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1$cp sandwich.txt.r2 sandwich.txt$ svn resolved sandwich.txt下注:使用svnrevert
若是你获得冲突,通过检查你决定取消本身的修改而且从新编辑,你能够恢复你的修改:
$ svn revert sandwich.txtReverted 'sandwich.txt'$ lssandwich.*sandwich.txt注意,当你恢复一个冲突的文件时,不须要再运行svn resolved。
如今咱们准备好提交修改了,注意svnresolved不像咱们本章学过的其余命令同样须要参数,在任何你认为解决了冲突的时候,只须要当心运行svnresolved,—一旦删除了临时文件,Subversion会让你提交这文件,即便文件中还存在冲突标记。
提交你得修改
最后!你的修改结束了,你合并了服务器上全部的修改,你准备好提交修改到版本库。
svncommit命令发送全部的修改到版本库,当你提交修改时,你须要提供一些描述修改的日志信息,你的信息会附到这个修订版本上,若是信息很简短,你能够在命令行中使用--message(-m)选项:
$ svn commit --message "Corrected number of cheese slices." Sendingsandwich.txt Transmitting file data . Committed revision 3.
然而,若是你把写日志信息看成工做的一部分,你也许会但愿经过告诉Subversion一个文件名获得日志信息,使用--file选项:
$ svn commit --file logmsg Sending sandwich.txt Transmitting filedata . Committed revision 4.
若是你没有指定--message或者--file选项,Subversion会自动地启动你最喜欢的编辑器来编辑日志信息。
版本库不知道也不关心你的修改做为一个总体是否有意义,它只检查是否有其余人修改了同一个文件,若是别人已经这样作了,你的整个提交会失败,而且提示你一个或多个文件已通过时了:
$ svn commit --message "Add another rule" Sending rules.txt svn:Commit failed (details follow): svn: Out of date: 'rules.txt' intransaction 'g'
此刻,你须要运行svn update来处理全部的合并和冲突,而后再尝试提交。
咱们已经覆盖了Subversion基本的工做周期,还有许多其它特性能够管理你得版本库和工做拷贝,可是只使用前面介绍的命令你就能够很轻松的工做了。