ubuntu18rapidsvn修改url,svn客户端命令SVN⼯作副本已经
锁定错误的解决⽅法
2019.03.24
我今天想在终端使⽤svn客户端下载代码,结果不成功。我的主机是ubuntu18,虚拟机是windows7,svn安装在虚拟机windows7⾥⾯,⽤virtual svn。我发现虚拟机的IP地址已经变了,怎么办呢?⽤这个命令重新签出吗:
cd /home/ubt/temp_file1 ;
svn checkout 192.168.1.60/svn/project1  #(不指定⽬录,因为这个⽬录原来已经有代码啦)
后来想,这样会不会有问题啊。
我想起来,我还可以⽤rapidsvn啊。(具体情况,看我的其他博客)
打开rapidsvn-->书签-->对着“/home/ubt/temp_file1”点击右键-->修改⽂档库URL(S)...-->结果⼜出现“ssl证书 ... ... 永久的(P)”,点击“永久的(P)”-->结果⼀样,出现之前博客写的问题。没办法,只好⼜在终端⾥重新下载了。不会有问题吧。
然后事情永远都不顺利的。我回到/home/ubt/temp_file1执⾏svn update,竟然不⾏。我想起来了是IP变了。
没办法我在/home/ubt/temp_file1执⾏:svn checkout  192.168.1.253/svn/project1 后⾯没有⽂件夹,因为我打算把⽂件更新到/home/ubt/temp_file1下。结果把project1直接搬到/home/ubt/temp_file1。不是我想要的,我想要的是把
192.168.1.253/svn/project1的⽂件全部签出到/home/ubt/temp_file1,希望跟原来执⾏svn checkout
192.168.1.60/svn/project1 /home/ubt/temp_file1的结果⼀样。
没办法我在/home/ubt下执⾏svn checkout 192.168.1.253/svn/project1 /home/ubt/temp_file1,结果提⽰已经有了,就是说被原来的192.168.1.60/svn/project1 /home/ubt/temp_file1占⽤了。怎么办呢?
我有突然想到,有没有办法在/home/ubt/temp_file1的把原来的url 192.168.1.60更换成url 192.168.1.253
经过研究,搞定了。
再次提醒⼤家,只有在终端使⽤svn命令,checkout成功了,才可以使⽤rapidsvn签出!!
在终端没问题了,打开rapidsvn-->对着书签点击右键-->添加已存在的⼯作副本(A)-->选择刚才在终端⽤svn签出成功
的/home/ubt/temp_file1
>>>>>>>>>>>>>>>>####
#!/bin/bash
# blog.csdn/cdh1213/article/details/8128696  《TortoiseSVN Switch与Relocate的区别》
# wwwblogs/fengwei/archive/2012/09/20/2694854.html 《如何进⾏svn relocate 操作》
# 之前的地址,如果不知道,那么在⽬录下执⾏以下svn update,过⼀段时间后,会出错然后显⽰原来的地址。或者执⾏svn info
url_pre=192.168.1.60
# 现在的地址
url_cur=192.168.1.253
svn switch --relocate ${url_pre}/svn/workspace ${url_cur}/svn/workspace
# 不可重复执⾏,会出现下⾯的错误:
# svn: E155024: ⾮法源 URL 前缀: '192.168.1.60/svn/workspace' (不与⽬标的 URL
'192.168.1.253/svn/workspace' 交叠)
#注意:⼀定要在svn所在的⽬录下执⾏本脚本。
>>>>>>>>>>>>>>>>####
那么TortoiseSVN怎么办呢?
在看到.svn的⽂件夹下点击右键-->TortoiseSVN--&-->对话框To URL:
注意:这是在windows下修改SVN路径的⽅法,要在.svn的⽂件夹下才有Relocate选项!
有时候会出现:SVN⼯作副本已经锁定错误
把⽂件夹的上层⽬录删除,重新创建⽬录,也没有⽤
这时重启电脑就好了
我把⼈家的东西也贴出来,⽅便查看。
SVN常⽤命令详解
-------------------------------------------------------------------------------------------
命令的使⽤
1、检出
svn
co 路径(⽬录或⽂件的全路径) [本地⽬录全路径]
--username ⽤户名 --password 密码svn co svn://路径(⽬录或⽂件的全路径) [本地⽬录全路径]  --username⽤户名 --password 密码svn  checkout 路径(⽬录或⽂件的全路径) [本地⽬录全路径] --username ⽤户名
svn  checkout svn://路径(⽬录或⽂件的全路径) [本地⽬录全路径] --username ⽤户名
注:如果不带--password 参数传输密码的话,会提⽰输⼊密码,建议不要⽤明⽂的--password 选项。
其中 username 与 password前是两个短线,不是⼀个。
不指定本地⽬录全路径,则检出到当前⽬录下。
例⼦:
svn cosvn://localhost/测试⼯具 /home/testtools --username wzhnsc
svn co localhost/test/testapp--username wzhnsc
svn checkout svn://localhost/测试⼯具/home/testtools--username wzhnsc
svn checkoutlocalhost/test/testapp--username wzhnsc
2、导出(导出⼀个⼲净的不带.svn⽂件夹的⽬录树)
svn export  [-r 版本号] 路径(⽬录或⽂件的全路径) [本地⽬录全路径] --username ⽤户名
svn export  [-r 版本号] svn://路径(⽬录或⽂件的全路径) [本地⽬录全路径] --username ⽤户名
svn export 本地检出的(即带有.svn⽂件夹的)⽬录全路径 要导出的本地⽬录全路径
注:第⼀种从版本库导出⼲净⼯作⽬录树的形式是指定URL,
如果指定了修订版本号,会导出相应的版本,
如果没有指定修订版本,则会导出最新的,导出到指定位置。
如果省略 本地⽬录全路径,URL的最后⼀部分会作为本地⽬录的名字。
第⼆种形式是指定 本地检出的⽬录全路径 到要导出的本地⽬录全路径,所有的本地修改将会保留,
但是不在版本控制下(即没提交的新⽂件,因为.svn⽂件夹⾥没有与之相关的信息记录)的⽂件不会拷贝。
例⼦:
svn exportsvn://localhost/测试⼯具/home/testtools --usernamewzhnsc
svn exportsvn://localhost/test/testapp--usernamewzhnsc
svn export/home/testapp/home/testtools
3、添加新⽂件
svn add ⽂件名
注:告诉SVN服务器要添加⽂件了,还要⽤svn commint -m真实的上传上去!
例⼦:
svn add test.php <- 添加test.php
svn commit -m “添加我的测试⽤test.php“test.php
svn add *.php <- 添加当前⽬录下所有的php⽂件
svn commit -m “添加我的测试⽤全部php⽂件“*.php
4、提交
svn commit -m “提交备注信息⽂本“ [-N] [--no-unlock] ⽂件名
svn ci -m “提交备注信息⽂本“ [-N] [--no-unlock] ⽂件名
必须带上-m参数,参数可以为空,但是必须写上-m
例⼦:
svn commit -m “提交当前⽬录下的全部在版本控制下的⽂件“ *<- 注意这个*表⽰全部⽂件
svn commit -m “提交我的测试⽤test.php“test.php
svn commit -m “提交我的测试⽤test.php“-N --no-unlock test.php<- 保持锁就⽤–no-unlock开关svn ci -m “提交当前⽬录下的全部在版本控制下的⽂件“ *<- 注意这个*表⽰全部⽂件
svn ci -m “提交我的测试⽤test.php“test.php
svn ci -m “提交我的测试⽤test.php“-N --no-unlock test.php<- 保持锁就⽤–no-unlock开关
5、更新⽂件
svn update
svn update -r 修正版本 ⽂件名
svn update ⽂件名
例⼦:
svn update <-后⾯没有⽬录,默认将当前⽬录以及⼦⽬录下的所有⽂件都更新到最新版本
svn update -r 200test.cpp <- 将版本库中的⽂件 test.cpp还原到修正版本(revision)200 svnupdate test.php<- 更新与版本库同步。
提交的时候提⽰过期冲突,需要先 update 修改⽂件,
然后清除svn resolved,最后再提交commit。
6、删除⽂件
svn delete svn://路径(⽬录或⽂件的全路径) -m “删除备注信息⽂本”
推荐如下操作:
svn delete ⽂件名
svn ci -m “删除备注信息⽂本”
例⼦:
svn deletesvn://localhost/testapp/test.php -m “删除测试⽂件test.php”
推荐如下操作:
svn deletetest.php
svn ci -m “删除测试⽂件test.php”
7、加锁/解锁
svn lock -m “加锁备注信息⽂本“ [--force] ⽂件名
svn unlock ⽂件名
例⼦:
svn lock -m “锁信测试⽤test.php⽂件“test.php
svn unlock test.php
8、⽐较差异
svn diff ⽂件名
svn diff -r 修正版本号m:修正版本号n ⽂件名
例⼦:
svn diff test.php<- 将修改的⽂件与基础版本⽐较
svn diff -r 200:201 test.php<- 对修正版本号200 和 修正版本号201 ⽐较差异
9、查看⽂件或者⽬录状态
svn st ⽬录路径/名
svn status ⽬录路径/名<-⽬录下的⽂件和⼦⽬录的状态,正常状态不显⽰
【?:不在svn的控制中; M:内容被修改;C:发⽣冲突;
A:预定加⼊到版本库;K:被锁定】
svn  -v ⽬录路径/名
svn status -v ⽬录路径/名<-显⽰⽂件和⼦⽬录状态
【第⼀列保持相同,第⼆列显⽰⼯作版本号,
第三和第四列显⽰最后⼀次修改的版本号和修改⼈】
注:svn status、svn diff和 svn revert这三条命令在没有⽹络的情况下也可以执⾏的,
原因是svn在本地的.svn中保留了本地版本的原始拷贝。
10、查看⽇志
svn log ⽂件名
例⼦:
svn log test.php<-显⽰这个⽂件的所有修改记录,及其版本号的变化
11、查看⽂件详细信息
svn info ⽂件名
例⼦:
svn info test.php
12、SVN 帮助
svn help <- 全部功能选项
svn help ci <- 具体功能的说明
13、查看版本库下的⽂件和⽬录列表
svn list svn://路径(⽬录或⽂件的全路径)
svn ls svn://路径(⽬录或⽂件的全路径)
例⼦:
svn list svn://localhost/test
svn ls svn://localhost/test<- 显⽰svn://localhost/test⽬录下的所有属于版本库的⽂件和⽬录
14、创建纳⼊版本控制下的新⽬录
svn mkdir ⽬录名
svn mkdir -m "新增⽬录备注⽂本" ⽬录全路径
例⼦:
svn mkdir newdir
svn mkdir -m "Making a new dir."svn://localhost/test/newdir
注:添加完⼦⽬录后,⼀定要回到根⽬录更新⼀下,不然在该⽬录下提交⽂件会提⽰“提交失败”
svn update
注:如果⼿⼯在checkout出来的⽬录⾥创建了⼀个新⽂件夹newsubdir,
再⽤svn mkdirnewsubdir命令后,SVN会提⽰:
repository文件夹可以删除吗svn: 尝试⽤ “svn add”或 “svn add --non-recursive”代替?
svn: ⽆法创建⽬录“hello”: ⽂件已经存在
此时,⽤如下命令解决:
svn add --non-recursivenewsubdir
在进⼊这个newsubdir⽂件夹,⽤ls -a查看它下⾯的全部⽬录与⽂件,会发现多了:.svn⽬录
再⽤ svn mkdir -m "添hello功能模块⽂件"svn://localhost/test/newdir/newsubdir 命令,
SVN提⽰:
svn: File already exists: filesystem '/data/svnroot/test/db',transaction '4541-1',
path '/newdir/newsubdir '
15、恢复本地修改
svn revert [--recursive] ⽂件名
注意: 本⼦命令不会存取⽹络,并且会解除冲突的状况。但是它不会恢复被删除的⽬录。
例⼦:
svn revert foo.c <- 丢弃对⼀个⽂件的修改
svn revert --recursive . <-恢复⼀整个⽬录的⽂件,.为当前⽬录
16、把⼯作拷贝更新到别的URL
svn switch ⽬录全路径 本地⽬录全路径
例⼦:
svn switch localhost/test/456 .<-(原为123的分⽀)当前所在⽬录分⽀到localhost/test/456
17、解决冲突
svn resolved [本地⽬录全路径]
例⼦:
$ svn update
C foo.c
Updated to revision 31.
如果你在更新时得到冲突,你的⼯作拷贝会产⽣三个新的⽂件:
$ ls
foo.c
<30
<31
当你解决了foo.c的冲突,并且准备提交,运⾏svn resolved让你的⼯作拷贝知道你已经完成了所有事情。
你可以仅仅删除冲突的⽂件并且提交,但是svnresolved除了删除冲突⽂件,还修正了⼀些记录在⼯作拷贝管理区域的记录数据,所以我们推荐你使⽤这个命令。
18、不checkout⽽查看输出特定⽂件或URL的内容
svn cat ⽂件全路径
例⼦:
svn catlocalhost/
19、新建⼀个分⽀copy
svn copy branchAbranchB  -m "make B branch" //从branchA拷贝出⼀个新分⽀branchB

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论