㈠ svn如何使用
svn(subversion)是近年來崛起的版本管理工具,是cvs的接班人。目前,絕大多數開源軟體都使用svn作為代碼版本管理軟體。如何快速建立Subversion伺服器,並且在項目中使用起來,這是大家最關心的問題,與CVS相比,Subversion有更多的選擇,也更加的容易,幾個命令就可以建立一套伺服器環境,
本文是使用Subversion最快速的教程,在最短的時間里幫助您建立起一套可用的伺服器環境,只需略加調整就可以應用到實際項目當中。
本教程分為以下幾個部分,為了說明簡單,教程是在windows下使用的方式,以方便資源有限的項目使用。在UNIX環境下,只是安裝方式不同,命令執行並無太大區別。
工具/原料
Subversion伺服器程序安裝包
Subversion的Windows客戶端TortoiseSVN安裝包
方法/步驟
1軟體下載
<1>、下載Subversion伺服器程序
到官方網站的下載二進制安裝文件,來到二進制包下載部分,找到 Windows NT, 2000, XP and 2003部分,然後選擇Apache 2.0 或者 Apache 2.2,這樣我們可以看到許多下載的內容,目前可以下載Setup-Subversion-1.7.12.msi 。
<2>、下載Subversion的Windows客戶端TortoiseSVN。
TortoiseSVN是擴展Windows Shell的一套工具,可以看作Windows資源管理器的插件,安裝之後Windows就可以識別Subversion的工作目錄。
官方網站是TortoiseSVN ,下載方式和前面的svn伺服器類似,在Download頁面的我們可以選擇下載的版本,目前的最高穩定版本的安裝文件為TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi。
2svn伺服器和客戶端安裝
<1>、安裝Subversion,直接運行Setup-Subversion-1.5.3.msi ,根據提示安裝即可,這樣我們就有了一套伺服器可以運行的環境。
<2>、安裝TortoiseSVN,同樣直接運行TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi按照提示安裝即可,不過最後完成後會提示是否重啟,其實重啟只是使svn工作拷貝在windows中的特殊樣式生效,與所有的實際功能無關,這里為了立刻看到好的效果,還是重新啟動機器。
<3>、安裝svn的客戶端程序,需要的話還可以安裝svn的語言包,注意語言包的版本也必須與客戶端程序的版本一致
3建立版本庫(Repository)
運行Subversion伺服器需要首先要建立一個版本庫(Repository),可以看作伺服器上存放數據的資料庫,在安裝了Subversion伺服器之後,可以直接運行,如:
svnadmin create E:\svndemo\repository
就會在目錄E:\svndemo\repository下創建一個版本庫。
我們也可以使用TortoiseSVN圖形化的完成這一步:
在目錄E:\svndemo\repository下"右鍵->TortoiseSVN->Create Repository here...「, 然後可以選擇版本庫模式, 這里使用默認即可, 然後就創建了一系列目錄和文件。
步驟閱讀 .4SVN配置用戶和許可權
來到E:\svndemo\repository\conf目錄,修改svnserve.conf:
# [general]
# password-db = passwd
改為:
[general]
password-db = passwd
然後修改同目錄的passwd文件,去掉下面三行的注釋:
# [users]
# harry = harryssecret
# sally = sallyssecret
最後變成:
[users]
harry = harryssecret
sally = sallyssecret
在passwd文件中,「=」前的字元就是用戶名,後面的就是密碼。還要注意「[users]」前面的注釋「#」一定要刪除掉。
步驟閱讀 .5運行獨立伺服器
在任意目錄下運行:
svnserve -d -r E:\svndemo\repository 我們的伺服器程序就已經啟動了。注意不要關閉命令行窗口,關閉窗口也會把svnserve停止。
6初始化導入
來到我們想要導入的項目根目錄,在這個例子里是E:\svndemo\initproject,目錄下有一個readme.txt文件:
右鍵->TortoiseSVN->Import...
在URL of repository輸入「svn://localhost/trunk」
在Import Message中輸入你的日誌信息
完成之後目錄沒有任何變化,如果沒有報錯,數據就已經全部導入到了我們剛才定義的版本庫中。
需要注意的是,這一步操作可以完全在另一台安裝了TortoiseSVN的主機上進行。例如運行svnserve的主機的IP是133.96.121.22,則URL部分輸入的內容就是「svn://133.96.121.22/trunk」。
步驟閱讀 .7基本客戶端操作
取出版本庫到一個工作拷貝:
來到任意空目錄下,在本例中是E:\svndemo\wc1,運行右鍵->Checkout,在URL of repository中輸入svn://localhost/trunk,這樣我們就得到了一份工作拷貝。
在工作拷貝中作出修改並提交:
打開readme.txt,作出修改,然後右鍵->Commit...,這樣我們就把修改提交到了版本庫,我們可以運行。
察看所作的修改:
readme.txt上右鍵->TortoiseSVN->Show Log,這樣我們就可以看到我們對這個文件所有的提交。在版本1上右鍵->Compare with working ,我們可以比較工作拷貝的文件和版本1的區別。
最後,所有的內容都已經錄制為動畫文件,大家可以參考。
關於本教程大家有什麼意見,可以這里討論 。
如果更新文件以後,有兩個人或者多個人同時修改了某個文件的某個位置,是否沖突,(一般不會這樣子,因為上傳的版本是可以編譯通過的,而且每個人負責自己的模塊,不會多人獨立修改同一個文件,別人也是先更新,後上傳修改,,,,)
開發者習慣性動作。早上上班第一件事就是更新svn版本庫,再開始一天的工作。
晚上下班,或者其他時候要上傳東西可以直接上傳因為你負責的東西沒人去修改。
沖突是怎麼產生的呢:因為不同的人,同時修改了同一個文件的同一個地方,這個時候,他提交了,你沒有提交,你就提交不了,這個時候,你要先更新,更新就會出現代碼沖突問題。最好不要多人同時修改一個文件,公用的文件,更改之前要和大家溝通一下,或者解決沖突 呵呵
先更新,沒有沖突,再提交。有沖突,解決沖突再提交。否則也提交不了。
對於一些處於沖突狀態下的文件 ,右鍵TortoiseSVN ->Resolved,解決沖突。解決沖突: http://www.blogjava.net/jasmine214--love/archive/2011/04/07/347769.html
更新-解決沖突-刪掉以下三個文件-提交(如果自己沒有修改的文件有沖突,刪除再更新即可,自己修改的文件解決沖突)
test.php.mine 是沖突前自己的文件
test.php.版本號 是沖突前本地的版本文件
test.php.伺服器的版本號 是沖突後伺服器版本文件
END注意事項
如果修改文件後提交不了,大多是因為版本不一致造成的。更新一下,不產生沖突的情況,就可以提交了。
更新文件,如果出現沖突的情況,打開沖突文件test.php會看到類似以下的內容
<<<<<<<<<<<<<<<
asdfadfadfadf
11111111111111
=======
asdfadfadfadf
111111111111111
222222222222
>>>>>>>>>>>>>>>>
結合別人修改的內容和自己修改的內容,然後把文件中的<<<<<,=====,>>>>>>>這類沖突符號去掉。去掉後,還是不能提交的,為什麼?因為沖突時會產生三個文件,有這三個文件存在肯定提交不了。
客戶端用的tortoisesvn(這個估計程序員用的最多),沖突時會多產生,三個文件
test.php.mine 是沖突前自己的文件
test.php.版本號 是沖突前本地的版本文件
test.php.伺服器的版本號 是沖突後伺服器版本文件
提交的時候,把這三個文件刪除掉就可以提交了。
產生覆蓋的原因。
a),在修改沖突文件test.php時,把別人代碼都刪除掉了,只留下了自己的代碼。這樣就會產生覆蓋了。
b),把test.php.mine中的內容直接到test.php文件,這樣也會產生代碼覆蓋。
上面二種情況都是我親眼看到新手這樣操作的,要避免這二種操作方法。
㈡ svn使用教程是什麼
分支在SVN中一點都不特別,其實它就是版本庫中的另外一個目錄。sVN是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似。svn、cvs等的文件夾里。SVN有:目前為止這是跟SVN相比Git缺少的最大的一個特徵。
將svnserve.conf中的#
authz-db=authz
和#password-db
=passwd的『#』號去掉且前面不能存在空格。
應用途徑:
SVN伺服器既具有CVS所具有數據儲存的優點,像是信息資源存儲後會形成資源樹結構,便於存儲的同時,數據一般不會丟失,同時又擁有自己的特色。SVN是通過關系資料庫及二進制的存儲方式,同時解決了既往不能同時讀寫同一文件等問題,同時增添了自己特有的「零或一」原則。
以上內容參考:網路-版本控制
以上內容參考:網路-SVN
㈢ 如何使用svn客戶端
你好~
1、將文件checkout到本地目錄
svn checkout path(path是伺服器上的目錄)
例如:svn checkout svn://192.168.1.1/pro/domain
簡寫:svn co
2、往版本庫中添加新的文件
svn add file
例如:svn addtest.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 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.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
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 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
希望可以幫助到你~
㈣ svn是什麼工具,如何使用
你說的那個程序員、你和你的團隊都不需要知道svn的重要性。
因為svn已經過時了。
你們現在應該學習的是git。
好吧,你說的不是svn,而是版本管理。最好的方法是你的部門有相應的規范,新人加入必須按照規范操作。不按規范視為不合格員工,影響考評,頑固不可改變的人會被解僱(事實上無法改變的人根本不適合當程序員,解僱對他對團隊都是好的)。
如果部門根本沒有規范,麻煩了。如果你有能力,推進部門建立這個規范,其他普通人都會對你發生印象分-1,因為你給他們帶來了「麻煩」。團隊中真正的程序員會對你印象分+1,因為你做了他想做而沒敢去做的事情。如果無法推進,那麼最好的選擇應該是離開這個團隊。這個時候就不是這個程序員的問題了,而是你的團隊和領導的問題。
你肯定聽過這句話:一流團隊招聘一流人才,二流團隊招聘二流和三流人才。一個不理解源碼管理重要性的人能夠成功通過面試,已經說明你的團隊存在問題。
所以關注如何改變這名「落後」程序員的時候,也可以順便考慮一下自己是不是應該更換一個「不落後」的團隊了。
㈤ svn使用方法疑惑
我想首先你需要明白一個問題,SVN伺服器端是存儲了所有的歷史版本,而不僅僅是最新版本,所以你可以更新到其中任何一個版本的狀態。
svn的更新,是將庫里的最新文件下載到你的本地工作區,並替換你本地目前的文件。這個時候如果你本地的這個文件沒有被你修改過,那麼會直接替換,如果你已經修改過還沒有提交,那麼可能會報告發生沖突。
update
to
revision
是更新當前文件或當前文件夾到某個歷史版本狀態,也就是說取回某個歷史版本。
svn的提交是將你本地修改過的文件提交到伺服器,形成伺服器的最新版本。原來的版本和最新的版本都會被伺服器儲存。
SVN的操作是對文件進行的,而不是針對文件的內容。我想你的C這個類的兩個方法都是存在同一個源碼文件中的吧,那麼提交之後,SVN是記錄了這個源碼文件的兩個歷史狀態:只有a方法的狀態和有a、b兩個方法的狀態。
㈥ svn命令使用方法
刪除那個丟失了.svn文件夾的文件夾,然後在上層文件夾執行更新操作,這樣應該就能恢復正常了
㈦ 詳細使用TortoiseSVN的步驟
TortoiseSVN是一個SVN的客戶端,下面是我以前不知道從哪復制的大致使用,希望對你有用:
五.客戶端的使用
1.Checkout Repository
首先要Checkout伺服器端的Repository,
所謂的Checkout就是指獲得伺服器端指定的Repository存儲的所有文件。
這個Checkout和Visual Source Safe的Checkout意義完全不一樣,
VSS的Checkout指的是鎖定某個文件,如果你以前使用過VSS,
在學習Subversion時這個問題一定要注意。
Checkout的具體方式是:
在客戶端新建一個空目錄,比如:F:\Project1
在該目錄上單擊右鍵,在彈出式菜單中選中SVN Checkout...,
之後在「URL of Repository」文本框中填入你想要連接的Repository的地址,
這個URL地址可以用瀏覽方式加入。
對於在本教程第二節建立的Repository,
URL應該是「svn://xxx/project1」
(xxx可以是伺服器端主機名,也可以是伺服器端的ip地址)。
然後點OK,會彈出一個認證對話框,
輸入在教程第三節設置的用戶名和密碼。
點OK後就完成了對Repository的Checkout。
比如:在伺服器端Repository中有一個a.txt文件,
那麼Checkout之後F:\Project1目錄下也會出現一個a.txt文件。
在本例中由於伺服器端的Repository還未添加任何文件,
所以在客戶端的F:\Project1下沒有文件被Checkout。
執行Checkout除了會在F:\Project1產生Repository存儲的文件及目錄外,
還會產生了一個「.svn」的隱含目錄,該目錄是由subversion管理的,
不要刪除或者手工改動其中的文件和目錄。
現在F:\Project1中的文件和目錄就叫做Repository的「Working Copy」簡寫「WC」
(這個簡寫...汗)。
以後對Repository中文件和目錄的修改,添加,刪除的操作,
都是通過對這個「Working Copy」的操作實現的。
Checkout執行完後,
會發現F:\Project1目錄的圖標的左下角附著了一個小的狀態圖標
(當F:\Project1目錄中的文件改變時,這個狀態圖標也會隨之變化),
它表示F:\Project1是一個Repository的「Working Copy」,
F:\Project1內的所有文件和目錄也會有類似的狀態圖標。
2.添加文件
將要添加的文件或者目錄拷貝到F:\Project1下,
然後在該文件或目錄上單擊右鍵,TortoiseSVN->Add,點OK。
如果添加了不止一個文件或目錄,
則滑鼠不要在F:\Project1中點中任何文件,
然後單擊右鍵,TortoiseSVN->Add,
就可以添加多個文件或目錄。
這時文件的狀態圖標會發生變化。
Add命令只是告訴本地的「Working Copy」將該文件納入版本管理,
並沒有將這個改變提交到伺服器端,
如果想要別人也看見你對Repository的修改,你需要
在F:\Project1下單擊右鍵,SVN Commit...,
將你所做的修改提交到Repository。
文件的狀態圖標也會更新。
不管你在「Working Copy」內添加、修改、刪除文件後,
要想其他人也看見你的修改,
都必須用Commit命令將所做修改遞交到伺服器端的Repository。
3.修改文件
用文本編輯器或IDE對文件修改後,
文件的狀態圖標會變化,
然後單擊右鍵,SVN Commit...
提交修改,只有當執行Commit提交修改後,
你所作的修改才會反映到伺服器端的Repository中。
4.刪除文件
刪除文件時,選中要刪除的文件或目錄,
單擊右鍵,TortoiseSVN->Delete,提交修改。
注意千萬不要用「Delete」鍵來刪除文件,否則將無法提交你的修改。
這一點對目錄的刪除來說尤為重要。
5.放棄修改
當你添加、修改、刪除文件後,決定放棄修改,
你可以單擊右鍵,TortoiseSVN->Revert,
本地的「Working Copy」中的文件和目錄會恢復到你修改前的狀態。
6.獲取Repository的最新版本
當一個團隊合作開發項目時,
每一個人都在不斷的對Repository進行更新,
你需要不斷的更新自己的「Working Copy」,
以獲取項目最新的文件。
當第一次獲得最新Repository的文件時,
我們用Checkout命令,前面已經介紹了,
以後再獲取最新文件時就不用Checkout了。
而改用Update命令。
接著前面的例子,這時F:\Project1已經成為一個「Working Copy」了
(通過執行Checkout命令),現在其他人已經對Repository進行了修改,
我想將別人的修改反映到我的「Working Copy」中,
具體的方法是:在F:\Project1目錄上單擊右鍵,
SVN Update。這時F:\Project1中的文件就是最新的版本了。
注意,如果當你的「Working Copy」中有被修改的文件,
或者有被刪除的文件,並且還未提交這些修改時,
這些文件在執行Update過程中是不會被更新的。
比如你修改了F:\Project1下a.txt文件,
還未提交修改,那麼,
當你對F:\Project1進行Update時,
a.txt文件是不會更新為Repository上的a.txt文件的。
所以如果想放棄當前的所有修改,
並將F:\Project1下所有文件及目錄更新到最新版本,
應該先對F:\Project1執行Revert命令再執行Update命令。
7.subversion的版本控制模型
當你用subversion進行版本控制時,
Subversion會記錄你對Repository進行的每一次修改(包括添加,修改,刪除等等),
每修改一次Repository都會產生一個新的Revision(修訂版本號),
不同的Revision代表了不同時刻Repository的狀態,
因此我們可以用這個Revision回朔任意時刻Repository的狀態,
就像時間機器一樣,也就是說某一Revision
就是Repository在某一時刻的一個「快照」。
注意:Revision不是針對某一個文件或者目錄,
而是針對整個Repository而言的。
每修改一次Repository,Revision 都會增加1。
Subversion的版本控制模型是一種叫做Copy-Modify-Merge
(拷貝-修改-合並)的模型。
考慮這種情況:
張三和李四是公司同一個部門的同事,
他們共同維護一個文本文件a.txt,
並且對該文件進行版本控制,
因此他們把這個文件放到一個Repository上共同維護該文件。
周一上午9點,張三和李四同時想對a.txt文件進行修改,
於是他們同時從Repository上取得該文件的最新版本(Revision 10),
然後進行修改。過了三分鍾,張三首先完成了修改,
他在該文件的第五行修改了一個單詞的拼寫(將Typo改為Type),
於是張三對修改後的文件執行Commit命令,
將修改提交到伺服器端的Repository中。
這時Repository的Revision變為11。
六分鍾過後,李四也完成了他的修改,
他修改了該文件第十行上的一個單詞拼寫(將He改為She),
於是他也對修改後的文件執行Commit命令,
這時Subversion 在提交修改時會發現,
李四修改的文件是Revision10的a.txt文件,
而不是最新的Revision 11的a.txt文件。
於是,Subversion 提示李四在提交修改前,
應該先將Working Copy更新到最新版本,
李四執行Update命令將Working Copy更新到Revision 11,
這時Subversion會提示已經完成合並,
李四的a.txt文件的第五行的「Typo」已經變為了「Type」,
第十行還是「She」,就是說Subversion已經將張三的修改「合並」到李四的a.txt文件中了。
之後,李四再執行Commit命令,就能將他對第十行的修改(將He改為She)
提交到伺服器端的Repository中了(生成Revision 12)。
但是這種合並在某些情況下會變得復雜一些,
比如:李四對a.txt文件的修改並不是第十行,
而是與張三同樣修改第五行的單詞,
李四將「Typo」改為「Typr」,並且提交修改,
這時Subversion會提示李四在提交修改前,
應該先將Working Copy更新到最新版本,
李四執行Update命令將Working Copy更新到Revision 11,
這時Subversion將Revision11的a.txt文件與
李四修改的a.txt文件進行合並時發現李四修改的同樣是第五行,
於是Subversion就無法判斷是李四的修改(「Tpyr」)
正確還是張三的修改(「Type」)正確,
因為他們都是在Revision10的a.txt基礎上作的修改。
這種情況叫做Conflict(沖突),
a.txt文件的圖標會變成一個黃色三角。
這時,只能依靠李四自己去判斷到底第三行應該修改為「Typr」還是「Type」。
當李四確定修改之後,在a.txt文件上單擊右鍵,TortoiseSVN->Resolved
告訴Subversion已經解決了Conflict。
這時再執行Commit命令就能提交修改(生成Revision 12)。
Subversion 這種控制方式保證了你對文件所作的修改都是基於文件的最新版本。
8.「.svn」目錄
在客戶端Working Copy的每一層目錄中都會有一個「.svn」目錄,
該目錄是Subversion進行管理用的目錄。
不要手動修改其中的文件。
該目錄存儲了Working Copy的一個副本
(實際存儲副本的地方是F:\project1\.svn\text-base目錄),
比如:F:\Project1是一個Working Copy,
該目錄下有兩個文件a.txt和b.txt還有一個子目錄ccc,
子目錄ccc中還有一個d.txt文件。
「.svn」目錄中存儲的是你最近一次執行完Update或者Commit命令之後當前目錄中文件的副本,
比如:F:\project1\.svn\text-base中存儲的a.txt和b.txt
是最近一次執行完Update或者Commit命令之後F:\project1下的a.txt和b.txt的拷貝。
也就是說你所作的修改都是基於「.svn」目錄存儲的那些文件。
這種機制可以讓我們在不連接網路的情況下,
將Working Copy中的文件恢復到修改之前的狀態。
Subversion的Revert命令就是利用了這種機制來實現的。
比如你修改了F:\project1\a.txt文件,
這時你又改變了主意想放棄對該文件的修改,
你可以單擊右鍵,TortoiseSVN->Revert,
修改過的F:\project1\a.txt文件
就會被F:\project1\.svn\text-base中a.txt文件的副本所替代,
使得a.txt恢復到修改前的狀態。
Working Copy中每一個子目錄下都會有一個「.svn」目錄,
並不是只有最上層目錄才有「.svn」目錄。
所以,F:\project1\ccc下也有一個「.svn」目錄,
該目錄存儲的是F:\project1\ccc\d.txt的副本
(d.txt的副本位於F:\project1\ccc\.svn\text-base)。
也就是說每個「.svn」目錄只存儲同級目錄中的「文件」副本,
而不存儲「目錄」副本。「.svn」目錄存有許多重要的內容,
所以前面說在刪除文件或目錄時,
必須用TortoiseSVN->Delete,
而不能用「Delete」鍵來刪除文件或目錄,尤其是對於目錄的刪除。
9.混合版本
Subversion的Working Copy被設計成一種能夠包含不同版本的文件共存的形式。
比如F:\Project1是一個Working Copy,
該目錄下有兩個文件a.txt和b.txt。
執行Update命令,將Working Copy更新到最新版本(Revision 24)。
這時,a.txt和b.txt的Revision都是24
(其實對於單個文件來說並不存在Revision,
Revision是對於整個Repository而言的,
這里所指的是Repository的Revision24所存儲的a.txt和b.txt,
但為了方便而採用這種描述方式,請注意,下同)。
之後,你的同事修改了a.txt,並且提交了修改,
這時Repository的Revision就變成25了。
注意,這時你沒有再次執行Update,
因此你的Working Copy的Revision還是24。
這時你修改了b.txt文件,並提交修改。
因為Revision25並沒有對b.txt文件進行修改,
因此你對b.txt文件的修改是基於b.txt文件最新的版本,
所以不會出現Conflict。
當你提交b.txt的修改後,產生Revision26。
這時你會發現你的Working Copy中的a.txt文件並不是Revision25中的a.txt文件,
它還是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。
也就是說當你Commit時,你的Working Copy中只有你提交的那些文件是最新版本,
而其他沒有修改的文件並不會更新為最新版本。
這樣就造成了你的Working Copy由不同的Revision文件所組成
(Revision24的a.txt文件和Revision26的b.txt文件)。
前面說過在提交修改前必須保證你是在文件的最新版本基礎上修改,
如果在這種混合版本的情況下,
怎樣才能知道當前Working Copy中的文件是否為最新版本?
在前面所說的「.svn」目錄中有一個文件名為「entries」的文件,
該文件記錄了當前Working Copy中的每一個文件的Revision,
因此當你Commit時,Subversion會從該文件中取得你提交文件的Revision,
再與Repository的最新Revision一比較就可以知道你修改的文件是否基於該文件的最新版本。
10.文件的鎖定
前面說過Subversion的版本控制模型是一種叫做Copy-Modify-Merge
(拷貝-修改-合並)的模型。
該模型在對文本文件進行版本控制時工作的很好,
但是有些需要進行版本控制的文件並不是文本文件,
比如說圖像文件,這種模型在這種情況下就不能正常工作了,
因為文本文件可以合並,而二進制文件則無法合並。
所以Subversion從1.2開始支持一種叫Lock-Modify-Unlock
(鎖定-修改-解鎖)的版本控制模型。
在Windows下最常用的版本控制軟體Visual Source Safe(VSS)就是採用這種模型。
這種模型要求在對一個文件修改前首先要鎖定這個文件,
然後才能修改,這時,別人將無法對該文件進行修改,
當修改完後再釋放鎖,使其他人可以對該文件進行鎖定,然後修改。
鎖定文件的方法是:TortoiseSVN->Get Lock...再點OK按鈕,
這時就完成了對文件的鎖定。
這時,如果其他人想對文件進行鎖定時,
Subversion會對他提示該文件已經被別人鎖定。
當你修改完文件後,然後單擊右鍵,SVN Commit...,
將修改提交,默認情況下,提交的時候就會對該文件解鎖,
如果你想仍然鎖定該文件,請在commit時彈出的對話框中選中keep lock復選框。
11.文件的附加屬性
在Subversion中,每個文件可以擁有一種叫做附加屬性的東西。
附加屬性描述了該文件所擁有的一些特性。
Subversion已經預定義了一些附加屬性
(這里只是指Subversion已經定義了一些附加屬性的「名稱」,
並不是指已經將這些屬性附加在文件上了,
比如默認情況下文本文件一開始不含任何屬性,
直到人為的對該文件添加附加屬性),
並且你可以對文件添加自定義的屬性。
Subversion對待附加屬性就像對待文件內容一樣,
當修改了一個文件的附加屬性(添加,改變,刪除附加屬性),
即使沒有對文件的內容進行修改,
同樣可以Commit該文件,就像更改了文件內容那樣,
Repository也會生成新的Revision,
所以從某種意義上來說,
Subversion不區別對待文件的附加屬性的修改和文件的內容的修改,
文件的附加屬性可以看成是一種特殊的文件內容。
Subversion預定義了若干個附加屬性,
這里只討論「svn:needs-lock」屬性,
因為它與我們上面的文件鎖定會產生的一個問題有關。
其他的屬性可以參考Subversion自帶的幫助文檔。
考慮這種情況,
張三和李四同時想對一個圖片文件a.jpg作修改,
張三在修改時先將該文件鎖定,然後進行修改,
同時李四也開始對該文件進行修改,
但李四忘記了對非文本文件進行修改時應該先鎖定該文件。
張三首先對該文件修改完畢,於是張三向伺服器提交了他的修改。
之後,李四也完成了修改,當他提交修改時,
Subversion提示李四的文件版本不是最新的,
在Commit之前應先更新a.jpg到最新版本,
由於圖片文件無法合並,
這就意味著張三和李四之間必定有一個人的修改會作廢。
應用「svn:needs-lock」屬性可以避免這個問題。
當一個文件擁有「svn:needs-lock」屬性時,
該文件在沒有鎖定時,文件的圖標是灰色的,
表示該文件是一個只讀文件(該文件的Windows只讀屬性的復選框為選中),
這個灰色的圖標就會提醒想對該文件進行修改的人,
在修改該文件之前應該首先鎖定該文件。
鎖定該文件之後,文件的只讀屬性就會去掉了,
一旦釋放掉鎖,文件的圖標又會變成灰色,
文件也會變成只讀的了。
李四在這種情況下就會避免在沒有鎖定文件時對文件進行修改。
對非文本文件添加「svn:needs-lock」
屬性應該在將該文件第一次添加到Repository時就設置,
當然,一個文件可以在任意時刻添加附加屬性,
這樣做是為了減少李四所遇到的那個問題發生的幾率。
具體的方法是:
首先將a.jpg文件拷貝到Working Copy中,
然後在該文件上單擊右鍵,
TortoiseSVN->Add,告訴Subversion要將該文件納入版本控制,
接著在該文件上單擊右鍵並選中屬性,
在彈出的屬性對話框中選中Subversion頁。
在下拉框中選中「svn:needs-lock」,
並在下面的文本框中填入「*」
(其實這里填什麼都無所謂,只要文件有「svn:needs-lock」附加屬性就行),
之後點Set按鈕,「svn:needs-lock」附加屬性就設置好了。
然後執行Commit命令提交修改。
這時當其他人執行Update時,
a.jpg就會添加到他們的Working Copy中,
並且文件的附加屬性也會隨文件一起被得到。
可以看到a.jpg此時的圖標就是灰色的,
文件的Windows屬性也是只讀的。
12.回到以前的版本
由於Subversion會記錄你對Repository的每一次修改,
因此能夠很容易的獲得Repository以前某一時刻的狀態。
比如:現在Repository的最新Revision是56,
這時我想看看Repository在Revision24時的狀態,
可以在本地的Working Copy中單擊右鍵,
TortoiseSVN->Update to Revision...,
然後輸入你想要回復到的Revision號,點OK按鈕。
回到以前的版本還有一種情況是我想將Repository的
最新Revision的狀態與以前某一個Revision的狀態一模一樣,
上面那種方法就不適合,
上面的那種方法只是將本地的Working Copy回復到以前的狀態,
而伺服器端的Repository並沒有回到以前的狀態。
將Repository的最新Revison的狀態回復到以前某個Revision的狀態具體的方法是:
先執行Update命令將Working Copy更新到最新的Revision,
然後在Working Copy中單擊右鍵,
TortoiseSVN->Show Log,
彈出的Log Messages窗口中會顯示該Repository的所有Revision,
選中最新的Revision,之後按住Shift鍵,
再單擊你想回復到的Revision+1的那個Revision
(比如Repository的最新Revision是30,
你想將Repository的狀態回復到Revision16,
那麼就選中Revision30,再按住Shift鍵,
選中Revision17,
就是說選中Revision17到Revision30之間的所有Revision)。
然後在選中的Revision上單擊右鍵,
選中「Revert changes from these revision」。
再點Yes按鈕,就可以將Working Copy的狀態回復到目標Revision。
注意,此時只是Working Copy回復到目標Revision,
之後應該用Commit提交修改,
這樣Repository最新狀態就與目標Revision的狀態一樣了。
這兩種回復到以前版本的方式截然不同,
第一種方式是將整個Working Copy回復到某個Revision,
也就是說這種方式Working Copy中的「.svn」目錄所存的文件副本也與目標Revision的一模一樣,
如果這時你沒有修改文件,你將不能執行Commit命令。
而第二種方式客戶端Working Copy中的
「.svn」目錄所存的副本始終是最新的Revision的文件副本
(這里我們基於一個假設:在Update之後沒有其他人對Repository做修改)。
這種方式就像是我們自己手工將Working Copy的文件狀態修改為目標Revision,
在修改之後提交修改一樣。
13.查看修改
有時我們對Working Copy的許多文件進行了修改,
這些文件位於不同的子目錄,我們就可以在Working Copy的最上層目錄單擊右鍵,
TortoiseSVN->Check For Modifications,
彈出的對話框就會顯示你所做的所有修改明細。
還有一種情況是我們的Working Copy已經很久沒有執行Update命令,
我們想看看Working Copy中有哪些文件已經發生修改了,
這時就可以在Working Copy的最上層目錄單擊右鍵,
TortoiseSVN->Check For Modifications,
在彈出的對話框點擊Check Repository按鈕後,
就會顯示伺服器端已經修改了的文件。
該方法還有一個用途就是查看文件的鎖定,
當你想鎖定一個文件時,你想先看看這個文件有沒有被別人鎖定,
點擊Check Repository按鈕會顯示伺服器端Repository所有被鎖定的文件,
如果你想鎖定的文件不在這裡面,那就說明該文件目前沒有人鎖定。
㈧ svn怎樣使用
TortoiseSVN
TortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,可以超越時間的管理文件和目錄。文件保存在中央版本庫,除了能記住文件和目錄的每次修改以外,版本庫非常像普通的文件伺服器。你可以將文件恢復到過去的版本,並且可以通過檢查歷史知道數據做了哪些修改,誰做的修改。這就是為什麼許多人將 Subversion 和版本控制系統看作一種「時間機器」。
在2002年,Tim Kemp 發現 Subversion 是一個很好的版本控制系統,但是沒有好的圖形化客戶端,創建一個作為 Windows 外殼集成的 Subversion 客戶端的創意來自 TortoiseCVS,一個非常類似的 CVS 客戶端。
Tim 學習了 TortoiseCVS 的源代碼,將其作為 TortoiseSVN 的基礎,然後開始這個項目,注冊了域名 tortoisesvn,並將源代碼提交到網上。此時 Stefan Küng 正在尋找一個好的免費版本控制系統,他發現了 Subversion 和 TortoiseSVN,由於 TortoiseSVN 還不能夠使用,他加入了這個項目並開始編程。很快他便重寫了大多數代碼,並且開始添加命令和特性,此時,最初的代碼都已經不復存在了。
隨著 Subversion 越來越穩定,吸引了越來越多的用戶開始使用 TortoiseSVN 作為他們的 Subversion 客戶端。用戶群增長迅速(每天都持續增長)。Lübbe Onken 提供了許多漂亮圖標和 TortoiseSVN 的 logo,細心照料網站並且管理翻譯。
TortoiseSVN 與Windows 外殼(例如資源管理器)無縫集成,你可以保持在熟悉的工具上工作,不需要在每次使用版本控制功能時切換應用程序。
並且你不一定必須使用 Windows 資源管理器,TortoiseSVN 的右鍵菜單可以工作在其他文件管理器,以及文件/打開對話框等標準的 Windows 應用程序中。你必須牢記,TortoiseSVN 是有意作為 Windows 資源管理器的擴展開發,因此在其他程序可能集成的並不完整,例如重載圖標可能不會顯示。
TortoiseSVN的界面已經翻譯成了許多種語言,所以你可以下載符合你要求的語言包。你可以在我們的翻譯狀態頁里看到語言包。如果沒有你需要的,為什麼不加入我們的團隊並且提交你的翻譯呢?-)
每一種語言包都是一個.exe安裝程序,只要根據向導運行安裝程序,當你下一次啟動程序時,翻譯就會生效。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/WYZSC/archive/2010/12/07/6059903.aspx
這個地址,還有一些其它文章,可以參考一下。
㈨ svn的一些基本的操作!!!
一、將版本庫中的資源簽出到本地工作區。首先,在本地硬碟中創建一個新的空文件夾,例如e: proj_trunk。右鍵單擊文件夾並選擇簽出選項,如下圖所示: