SVN 學習筆記-高級操作


 

所謂高級操作,只是曲高和寡,其實都不怎么用的。但是關鍵時候,可能會很有用。

這個高級只是針對基本操作而言。有些操作可能也是比較基本的。

 

 

清除鎖

 

 

有時候我們在操作的時候,可能系統崩潰了,或者SVN非正常結束了。由於SVN在Working Copy 改變時,會有一個 to_do_list ,並且鎖住了要改變的東西。改變以后恢復解鎖。當時如果正在這是系統非正常結束了。某些文件可能就被鎖住了。

 

$svn status 

L   somedir

 

L表示lock,被鎖住了。此時我們可以用cleaup來清除這樣的鎖。

 

$svn cleanup

$svn status

 

 

樹沖突

有時候,我們的沖突發生在刪除,移動一個文件時。例如我提交的時候,這個文件已經被更名了。此時的解決方法,和普通沖突類似。例如,code/bar.c 被改名為 code/baz.c

我們首先需要和發生沖突的同事商量,如果要保留baz.c那么就

$svn remove --force code/bar.c

$svn resolve --accept=working code/bar.c

$svn status 

$svn diff

同樣,我們如果要保留bar.c那么把要removed和resolved的文件改成baz.c即可。

 

屬性

 

SVN的每個文件都可以增加一個屬性。屬性有自定義的,SVN原生的。屬性也分為有版本的,和無版本的等等。

屬性是一個有時很有用的東西,她一般用來存放一些元數據,額外的信息,方便獲取。也可以用來做一些有意思的事情。

對屬性的操作還是增刪改查

$svn propset copyright "(C) 2011 YDTF Software Inc." code/readme.txt

Property 'copyright' set on 'code/readme.txt'

 

$svn proplist code/readme.txt

$svn propdel ...

$svn propget

 

以上幾個命令,可以通過help查看詳細。

幾個SVN自帶的屬性介紹:

svn自帶幾個屬性以svn開頭。

1、svn:eol-style 表示的是行結束。

不同的操作系統,可能使用不同的行結束符號。

比如Window使用  CRLF。LF就是換行  CR就是回車。

而Unix中 只使用 LF。

這樣,這個svn:eol-style就有幾種值:

native; 根據本地定義

CRLF: 使用CRLF作為EOF(End-of-line)

LF: 

CR

 

svn:ignore

Svn:ignore表示忽略Working Copy中的Unversioned文件。

當你使用svn status 時,你會發現,很多無關緊要的文件都列出來了。

於是我們可以使用svn:ignore忽略這些文件。比如 有很多 .bak文件。

我們可以設置 svn:ignore=*.bak 這樣所有后綴為bak 的文件,在svn status時就不見了。

$svn status

M mydir/foo.c

M mydir/bar.c

? mydir/bar.c.bak

? mydir/foo.c.bak

$svn propset svn:ignore mydir *.bak 

$svn status

M mydir/foo.c

M mydir/bar.c

 

注意,ignore 使用類似正則的匹配。比如 ? 表示一個,*表示多個,[ 表示開始

但是這個屬性還會影響很多,諸如svn add * 時,

如果想把所有的文件加入到SVN庫 ,那么使用 svn add -* -force 即可。

3、svn:keywords

我們來編輯一個svn庫中的文本文件

$vi foo.c

 

$Date$

$Revision$

$Author$

#include<stdio.h>

...

:wq

 

$svn propset svn:keywords "Date Author" foo.c

$svn cat foo.c

$Author: yinshaoxin $ 

$Date: 2011-07-26 17:01:10 +0800 (Tue, 26 Jul 2011) $

$Revision$

#include<stdio.h>

...

於是SVN為我們的文檔自動加上了Author和Date。 這里注意,SVN命令有一個全局選項,那就是--username,這個涉及到SVN的認證和授權。你最好使用自己的帳號來操作SVN。

 

4 svn:needs-lock

這個屬性,用在一些不能同時多個人編輯的文件上。只有使用了lock鎖住文件,這些文件才能是可讀的,否則是不可讀的。

注意,這個屬性的值無關緊要。

$svn propset svn:needs-lock foo.jpg

這樣,我們如果要修改這個foo.jpg 那么,只能先執行

$svn lock foo.jpg 

關於lock我們后面馬上就講到。這樣做並不是很嚴格的,但是某些時候很有用。例如,因為一些二進制文件,例如jpg文件是不可合並的。如果沒有鎖,兩個人可能同時做了很大的修改,但是有一個人的卻要是白費時間,因為他比另一個人玩提交,修改的地方是不可能自動合並的。為了不必要的浪費時間,Lock-Modify-Unlock的這種方式,就對我們很重要了。

 

5 svn:externals

當我們同時在兩個庫中工作時,我們可能在一個Working Copy中需要從另外一個庫中checkout文件。這時,svn:externals就很有用了。

 

$svn propedit svn:externals file:///var/idp2/svn/repos/src

third-party/souds   file:///var/idp/svn/repos/souds

third-party/skin -r148 file:///var/idp/svn/repos/skin

 

注意,我們使用 propedit來編輯 這個屬性,因為她是多行的。

$svn checkout file:///var/idp2/svn/repos/src

A              src

A          src/Makefile

...

...

Checkd  out revision 148

Fetching external item into src/third-party/souds

A  src/third-party/sounds/ding.ogg

A  src/third-party/sounds/dong.ogg

...

...

 

我們可以看到,checkout會吧external的屬性設置的庫也一起checkout出來了。

當我們用svn status看的時候

 $svn status

E 表示External 

X 表示 從external獲取的。

外部文件可以提交,只要這個外部文件是HEAD版本。

我們checkout的時候,如果不想check出external的,可以加 --ignore-externals

 

上面列舉的是一些有意思的SVN自帶屬性的,最好的原則是不去管他們。除非必要。

 

修改列表(Changelists)

 

有時候,我們修改的文件太多了,提交的時候,忘記了改了些什么文件,如果全部提交吧,不好區分填寫日志。於是我們把修改的某一類,加如一個changlists中。提交的時候指定提交這個changlists內的東西,這樣就避免了上述的問題。

 

$svn changlist sort-fixes  sort.c  list.c  array.c

Path  'sort.c' now is a member of changlist 'sort-fixes'

Path  'list.c' now is a member of changlist 'sort-fixes'

Path  'array.c' now is a member of changlist 'sort-fixes'

 

$svn status --changelist 'math-fixes'

M sort.c

M list.c

M array.c

如果需要刪除,則使用svn  changlist --remove 

$svn changelist --remove sort.c

 

一但有了changlist,我們可以用來做很多事情。比如,比較文件的時候,我們只關心指定的chagnlist的。

$svn diff  --changelist  sort-fixes

 

$svn -commit -m "fix the sort bugs" --changelist sort-fixes

 

提交后的changelist自動被清除。如果想保留,使用 --keep-changelists

有意思的是,changelist命令也帶有--changelist選項,啊,遞歸。

我們需要注意的是,changlist只在Working Copy中有效,而且不能用於目錄。

 

本文摘自:https://airu.iteye.com/blog/1145030  版權歸作者所有


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM