svn日志显示deleteed,svn addedd,modified怎么操作

> 博客详情
摘要: 如果对文件做SVN Delete操作,然后再SVN Add一个同名文件,此时提交的操作被视为一次Replacing。文件的所有历史记录从此断裂,查看日志只能看到Replacing之后的日志。万恶的Replacing。。。
如果对文件做SVN Delete操作,然后再SVN Add一个同名文件,此时提交的操作被视为一次Replacing。文件的所有历史记录从此断裂,查看日志只能看到Replacing之后的日志。万恶的Replacing。。。
最近在准备提交SVN文件时,Update到最新版时,提示Tree conflict。仔细一看,发现文件被其他人做了Replacing提交。Show Log时,之前所有的日志都不见了。
查阅了网上各种方法,发现都不靠谱。我们需要的是恢复SVN版本库中的原文件及日志,而不仅仅是找到修改前的文件。
经过各种尝试,找到一种恢复办法,这里介绍给大家。希望大家碰到类似问题一定冷静,不要抓狂。
以文件test.txt举例,假设版本48中有人做了Replacing操作,替换了原有文件。
&冷静,在文件所在文件夹空白处点击右键,SVN子菜单中选择Repo-browser。
选择文件test.txt,右键选择Delete。
然后再切换到Replacing之前的版本,例如这里是版本47.
在版本47的视图中,文件又出现了,这个文件就是Replacing之前的文件。要还原这个文件,我们对这个47版的文件做Copy to操作。如图,弹出的路径默认为文件当前路径,不用修改,直接确定,输入日志然后提交。
好了,我们的文件成功还原到了历史版本。
人打赏支持
码字总数 5926
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥博客访问: 307663
博文数量: 101
博客积分: 1415
博客等级: 上尉
技术积分: 1212
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co
2、往版本库中添加新的文件
svn add file例如:svn add test.php(添加test.php)svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)例如:svn commit -m "add test file for my test" test.php简写:svn ci
4、加锁/解锁
svn lock -m "LockMessage" [--force] PATH例如:svn lock -m "lock test file" test.phpsvn unlock PATH
5、更新到某个版本
svn update -r m path例如:svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】2)svn status -v path(显示文件和子目录状态)第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。简写:svn st
7、删除文件
svn delete path -m "delete test fle"例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"或者直接svn delete test.php 然后再svn ci -m 'delete test file‘,推荐使用这种简写:svn (del, remove, rm)
8、查看日志
svn log path例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)例如:svn diff test.phpsvn diff -r m:n path(对版本m和版本n比较差异)例如:svn diff -r 200:201 test.php简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn helpsvn help ci
------------------------------------------------------------------------------
以上是常用命令,下面写几个不经常用的
------------------------------------------------------------------------------
13、版本库下的文件和目录列表
svn list path显示path目录下的所有属于版本库的文件和目录简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。用法: 1、mkdir PATH...2、mkdir URL...创建版本控制的目录。1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。2、每个以URL指定的目录,都会透过立即提交于仓库中创建。在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:用法: revert PATH...注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。用法: 1、switch URL [PATH]2、switch --relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动 (比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。用法: resolved PATH...注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]...如果指定了版本,将从指定的版本开始查找。svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
---------------------------------------------------------
对于日常操作来说,最常用的就是那几个命令, svn co/update/add/ci 1>修改了某个文件,想传上去: svn ci bob.c& &-m "bob modify"2>如果 想想cvs 那样, cvsi ci bob.c 的时候自动弹出 vi窗口,要设置SVN_EDITOR变量: export SVN_EDITOR=/usr/bin/vim&&, 可以写死在 /root/.bash_profile 里面去。 3>新添加了某个文件, 想传上去,& &echo 1 > bob.c& & ;& & svn add bob. svn ci bob.c 4>自己修改了, 发现错了, 想恢复到svn上面的版本, 可以用 svn update bob.c -r25& &// 25 是版本号 。5>想要删除某个文件bob.c&&:&&svn del bob.c&&;&&svn ci bob.c6> 想彻底更新某个目录(可能改了某个目录的一些文件,都不想要了) , svn revert -R xxx&&(xxx是那个目录)7>比如 ,我checkout下来后,新建了一个目录,然后要上传整个目录, 这点比cvs强, svn add xxx& &(xxx就是那个目录)&&,他会递规的增加整个目录的。然后 svn ci 即可
再次强调一点使用svn/cvs 的流程:比如bob ,假如我修改了比较大的地方的代码, 我的流程是:1>checkout 下来kernel的最新版本 (如果以前已经有了就update 一下 , 具体的命令不能用update ,应该用svn revert2> 修改,本地调试, 测试ok3> check in 自己修改过的文件和增加的文件(svn add xxx) 。& &注意人无完人, 可能会忘记传了某个文件,&&你可以在根目录下 ,执行svn ci ,它会列出来你改了哪些文件4> 上传完毕后, 把全部代码 checkout 下来 ,编译, 测试, 如果ok , 发mail 给相关的人, 内容,比如“I have updated "drivers/fs/ext3.c , pls update it " ,总之越详细越好, 最好精确到文件, 如果不能精确到文件 ,也要精确到目录, 不要说 ,"我更新了kernel的代码, 你update一下”这样的话 , 会给别人增加工作量,kernel 那么多的代码, 别人总不能每次都update , 那样时间会很长。 5> 等待着别人的问题报告。。。。。。注意事项: 当你都没有稳定某个c文件的时候 ,不要check in , 不要三天两头checkin svn上的同一个文件(如果是这样,只能说明,你的改的还不稳定, 先自己测试稳定了再传)另外, svn 不是个人的备份的仓库,是大家的财产,要一字千金的改。
---------------------------------------------------------
很多人用VPS做subversion服务器来管理代码。在subversion里面怎样撤销一次错误的check in呢?一般用svn merge来达成目的。
比如我们刚才有了一次错误的checkin,我们想回滚到正确的版本去。
首先保证我们拿到的是最新代码,运行svn update,假设是28版本。
然后找出要撤销的确切版本:
svn log contacts.java
根据log怀疑是27版本改坏的,比较一下:
svn diff -r 26:27 contacts.java
发现果真是27版本坏事。
撤销27版本的改动:
svn merge -r 27:26 contacts.java
为了保险起见,再次确认合并的结果:
svn diff contacts.java
发现已正确撤销了改动,提交。
svn commit -m "Revert wrong change from r27"
提交后版本变成了29。
---------------------------------------------------------
svn switch解决svn服务器地址改变工作拷贝问题
我的指令:svn sw --relocate svn://192.168.1.144/device/branches svn://192.168.1.56/device/branches .
svn switch — Update working copy to a different URL.
Synopsissvn switch URL [PATH]switch --relocate FROM TO [PATH...]
Description
This subcommand updates your working copy to mirror a new URL—usually a URL which shares a common ancestor with your working copy, although not necessarily. This is the Subversion way to move a working copy to a new branch. See
for an in-depth look at switching.
Alternate Names
Working copy
Accesses Repository
Switches--revision (-r) REV--non-recursive (-N)--quiet (-q)--diff3-cmd CMD--relocate--username USER--password PASS--no-auth-cache--non-interactive--config-dir DIR
If you're currently inside the directory vendors which was branched to vendors-with-fix and you'd like to switch your working copy to that branch:$ svn switch http://svn./repos/branches/vendors-with-fix .U
myproj/foo.txtU
myproj/bar.txtU
myproj/baz.cU
myproj/qux.cUpdated to revision 31.
And to switch back, just provide the URL to the location in the repository from which you originally checked out your working copy:$ svn switch http://svn./repos/trunk/vendors .U
myproj/foo.txtU
myproj/bar.txtU
myproj/baz.cU
myproj/qux.cUpdated to revision 31.
You can just switch part of your working copy to a branch if you don't want to switch your entire working copy.
Sometimes an administrator might change the “base location” of your repository—in other words, the contents of the repository doesn't change, but the main URL used to reach the root of the repository does. For example, the hostname may change, the URL scheme, or any part of the URL which leads to the repository itself. Rather than checkout a new working copy, you can have the svn switch command “rewrite” the beginnings of all the URLs in your working copy. Use the --relocate option to do the substitution. No file contents are changed, nor is the repository contacted. It's similar to running a Perl script over your working copy .svn/ directories which runs s/OldRoot/NewRoot/.$ svn checkout file:///tmp/repos testA
test/b…$ mv repos newlocation$ cd test/$ svn updatesvn: Unable to open an ra_local session to URLsvn: Unable to open repository 'file:///tmp/repos'$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .$ svn updateAt revision 3.
Be careful when using the --relocate option. If you mistype the argument, you might end up creating nonsensical URLs within your working copy that render the whole workspace unusable and tricky to fix. It's also important to understand exactly when one should or shouldn't use --relocate. Here's the rule of thumb:
If the working copy needs to reflect a new directory within the repository, then use just svn switch.
If the working copy still reflects the same repository directory, but the location of the repository itself has changed, then use svn switch --relocate.
阅读(25001) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。svn常见问题,报错,命令及我的总结
我自己犯过的一个错误是:/svn/MyERP_core_Main/!svn/act/b8bd621b-c193-4969-b66c-d35f
&后来证实是地址的大小写问题,我修改了大小写,然后删掉了本地的文件,check out
服务器的文件,然后提交和更新就好了,麻烦之处在于,你需要重新将文件修改,然后提交上去。
更换提交地址:svn
switch --relocate
http://1.1.5.54:8080/svn/MyERP_Core_Main/MyERP_Core/trunk/trunk_ios5x_1_2
http://1.1.5.54:8080/svn/MyERP_Core_Main/MyERP_Core/trunk/trunk_ios5x_1_2
命令告诉系统冲突已经解决请忽略。
svn add foobar 时出现
xx is already under version
我的方法是:先添加,再提交,记得要层层add然后提交一遍&
举例:HummingBird/Config_Vehicle/Mobile/Vehicle
,Config_Vehicle是新文件夹,在HummingBird svn add Config_Vehicle,然后svn
commit -m " " 然后再cd到Config_Vehicle svn add Mobile 一层层add commit
下去,貌似是这样,如果不行就运行下边的代码删除隐藏的.svn文件,再试。
find . -name ".svn" |
xargs rm -Rf
问题1:’.’ is not a working copy.
Can’t open file
‘.svn/entries’:&系统找不到指定的路径。
解答:原因是输入的访问路径不正确,如svn://192.168.6.200/如果最后少写了“/”,就会出现这种错误提示。
问题2:将文件checkout之后,没有出现SVN的图标,是怎么回事?
解答:有些时候在客户端Checkout文件后,SVN的系统图标也会不显示,可以执行一下“Clean
up”,就会出现SVN的系统图标。
问题3:为什么添加的文件,别人看不到,版本库里也没有?
解答:最可能的原因是,你只是执行了“Add”而没有“Commit”,这样只是在本地注明某个文件是预定要增加的,而没有实际添加到版本库中,要添加到版本库必须执行“Commit”。删除文件也是一样。
问题4:“Commit failed。……You have to
update your working copy
first”&&提交失败,需要首先执行更新操作。
解答:多人同时修改同一文件,在提交前其他人已经抢先提交到SVN服务器中,导致该错误;解决方法:对工作复本中的文件进行更新即可。
问题5:更新时提示文件发生冲突:“One or
more files are not a conflicted state。”
解答:多人同时修改同一文件的同一部分,SVN无法自动进行合并,会导致该错误;解决方法:对工作复本中的文件和服务器的文件进行比较,手工合并即可。
问题6:“Commit failed;File already
exists”提交失败,文件**已存在。
解答:版本管理系统在改变你的计算机上的工作副本时,是非常的小心的。在做任何事情之前,它都尽可能把您的意图写到你的计算机上的日志文件中去。但如果偶然地操作中断了(例如:突然停电了,您的计算机死机了),那么日志文件记录就可能同您最后的工作状态不一致。一种建议解决途径:先把要提交的东西拷出来放到其它目录,再更新本地文件,然后把拷出来的文件重新放回去提交。
问题7:Working copy’**’locked.
Please execute the ’Clean up’command.
解答:Subversion客户端在提交内容之前会在本地的工作拷贝写日志,防止其他客户端再次作操作,如果这个提交过程中发生错误,就会存在未清理的日志,解决这个问题之需要执行“清理”操作,整理你的计算机上的工作副本,清理错误的日志记录,使您可以继续操作。
问题8:执行clean
up时,出现错误“Subversion reported an error while doing a cleanup!” '**'
is not a working copy directory ”
解答:遇到这种情况,先删除隐藏文件夹.svn中的tmp下面的临时文件,再执行clean
问题9:因为仓库与目录很多,使用TSVN每次选择目录URL of
repository有很多地址,如何才清除呢?像清除浏览器中的历史那样,用什么方法呢?
解答:右键-&TortoiseSVN-&Settings-&Saved
Data,就可以清除你想要的东西了,包括URL、log、窗口大小、密码缓存等。
问题10:在SVN中选中一个目录show
log时,出现了某些版本只显示版本号和(no
date),没有其他信息,什么原因引起的?
解答:出现了(no date)的revision,为其他人修改了你所没有权限访问的某个目录下的文件。
问题11:Attempted to lock an
already-locked dir & &
&& is not under version
I deleted the log file in the .svn directory (I also deleted the
offending file in .svn/props-base)
&Then did a
cleanup..&&&&&&&&&&
Then resumed my update.
问题12:svn: warning: 'xxxxx' is
already under version control
只添加相应目录到SVN,但不添加目录下的文件:&
&&& #svn st
uploads|grep ^?|awk "{print /$2}"|xargs svn add -N
原因:& 很可能是 .svn 隐藏目录版本信息被修改了
&&& 解决办法:
删除uploads目录下的.svn目录及下面的文件(保留uploads目录的.svn)
uploads |grep 'uploads/[^/.]*/.svn'|xargs rm -rf
或者:find
. -name ".svn" |
xargs rm -Rf
1、将文件checkout到本地目录
svn checkout
path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件或文件夹
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit
-m&“LogMessage“ [-N] [--no-unlock]
PATH(如果选择了保持锁,就使用&no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某个版本
svn update -r m
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update
test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn
resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn
revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m “delete
test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test
或者直接svn delete test.php 然后再svn ci -m ‘delete test
file‘,推荐使用这种
简写:svn (del, remove,
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205
test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help ci
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch &relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename & filename (PREV
是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
Aborting&commit:&'XXXXXXXX'remains&in&conflict错误
今天在提交项目文件到本地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 in
conflict查了一下SVN的手册才知道原来是多个版本之间遇到冲突。此时你需要解决冲突(合并别人的修改)。
--------------------------------------------------------------------------------
举一个例子,Sally修改了sandwich.txt,Harry刚刚改变了他的本地拷贝中的这个文件并且提交到服务器,Sally在提交之前更新它的工作拷贝得到了冲突:
$ svn update C sandwich.txt Updated to revision 2. $ ls -1
sandwich.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&来放弃所有的修改。
一旦你解决了冲突,你需要通过命令svn
resolved让Subversion知道,这样就会删除三个临时文件,Subversion就不会认为这个文件是在冲突状态了。
$ svn resolved sandwich.txt Resolved conflicted state of
'sandwich.txt'
手工合并冲突
第一次尝试解决冲突让人感觉很害怕,但经过一点训练,它简单的像是骑着车子下坡。
这里一个简单的例子,由于不良的交流,你和同事Sally,同时编辑了sandwich.txt。Sally提交了修改,当你准备更新你的版本,冲突发生了,我们不得不去修改sandwich.txt来解决这个问题。首先,看一下这个文件:
$ cat sandwich.txtTop piece of
breadMayonnaiseLettuceTomatoProvolone&&&&&&&
.mineSalamiMortadellaProsciutto=======SauerkrautGrilled
Chicken&&&&&&&
.r2Creole MustardBottom piece of
bread小于号、等于号和大于号串是冲突标记,并不是冲突的数据,你一定要确定这些内容在下次提交之前得到删除,前两组标志中间的内容是你在冲突区所做的修改:
.mineSalamiMortadellaProsciutto=======后两组之间的是Sally提交的修改冲突:
=======SauerkrautGrilled
Chicken&&&&&&&
.r2通常你并不希望只是删除冲突标志和Sally的修改—当她收到三明治时,会非常的吃惊。所以你应该走到她的办公室或是拿起电话告诉Sally,你没办法从从意大利熟食店得到想要的泡菜。一旦你们确认了提交内容后,修改文件并且删除冲突标志。
Top piece of
breadMayonnaiseLettuceTomatoProvoloneSalamiMortadellaProsciuttoCreole
MustardBottom piece of bread现在运行svn resolved,你已经准备好提交了:
$ svn resolved sandwich.txt$ svn commit -m "Go ahead and use my
sandwich, discarding Sally's
edits."记住,如果你修改冲突时感到混乱,你可以参考subversion生成的三个文件—包括你未作更新的文件。你也可以使用第三方的合并工具检验这三个文件。
拷贝覆盖你的工作文件
如果你只是希望取消你的修改,你可以仅仅拷贝Subversion为你生成的文件替换你的工作拷贝:
updateC&&sandwich.txtUpdated
to revision 2.$ ls
sandwich.*sandwich.txt&&sandwich.txt.mine&&sandwich.txt.r2&sandwich.txt.r1$
cp sandwich.txt.r2 sandwich.txt$ svn resolved sandwich.txt下注:使用svn
如果你得到冲突,经过检查你决定取消自己的修改并且重新编辑,你可以恢复你的修改:
$ svn revert sandwich.txtReverted 'sandwich.txt'$ ls
sandwich.*sandwich.txt注意,当你恢复一个冲突的文件时,不需要再运行svn resolved。
现在我们准备好提交修改了,注意svn
resolved不像我们本章学过的其他命令一样需要参数,在任何你认为解决了冲突的时候,只需要小心运行svn
resolved,—一旦删除了临时文件,Subversion会让你提交这文件,即使文件中还存在冲突标记。
提交你得修改
最后!你的修改结束了,你合并了服务器上所有的修改,你准备好提交修改到版本库。
commit命令发送所有的修改到版本库,当你提交修改时,你需要提供一些描述修改的日志信息,你的信息会附到这个修订版本上,如果信息很简短,你可以在命令行中使用--message(-m)选项:
$ svn commit --message "Corrected number of cheese slices." Sending
sandwich.txt Transmitting file data . Committed revision 3.
然而,如果你把写日志信息当作工作的一部分,你也许会希望通过告诉Subversion一个文件名得到日志信息,使用--file选项:
$ svn commit --file logmsg Sending sandwich.txt Transmitting file
data . 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' in
transaction 'g'
此刻,你需要运行svn update来处理所有的合并和冲突,然后再尝试提交。
我们已经覆盖了Subversion基本的工作周期,还有许多其它特性可以管理你得版本库和工作拷贝,但是只使用前面介绍的命令你就可以很轻松的工作了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 sql delete 不写日志 的文章

 

随机推荐