SVN使用教程總結(轉載)
SVN簡介:
為什麼要使用SVN?
公司多人協同開發有需要,類似於GIT, 關於git可以看我之前的部落格git的使用[轉],也可以看網上的廖雪峰寫的部落格。
Subversion是什麼?
它是一個自由/開源的版本控制系統,一組檔案存放在中心版本庫,記錄每一次檔案和目錄的修改,Subversion允許把資料恢復到早期版本,或是檢查資料修改的歷史,Subversion可以通過網路訪問它的版本庫,從而使使用者在不同的電腦上進行操作。
一:SVN伺服器搭建和使用。
個人認為最好用VisualSVN server 服務端和 TortoiseSVN客戶端搭配使用. 點開上面的VisualSVN連線,下載VisualSVN server,下載完成後雙擊安裝,如下圖:
點選Next下一步,如下:
然後再點選Next項,下一步,如下:
點選【Next】 如下:
Location是指VisualSVN Server的安裝目錄,Repositorys是指定你的版本庫目錄.Server Port指定一個埠,Use secure connection勾山表示使用安全連線,
點選Next,進入下一步,如下圖:
再點選【Install】,進入如下安裝圖:
等待安裝完成後,點選【next】,進入下一步:如下圖
點選【Finish】即可完成安裝。安裝完成後,啟動VisualSVN Server Manager,如圖:
可以在視窗的右邊看到版本庫的一些資訊,比如狀態,日誌,使用者認證,版本庫等.
要建立版本庫,需要右鍵單擊左邊視窗的Repositores,如下圖:
在彈出的右鍵選單中選擇Create New Repository或者新建->Repository:
進入下一步,如下圖:
點選【下一步】,如下圖:
點選【create】,如下圖:
點選【Finish】即可完成基本建立。
2. 需要建立使用者和組,並且需要分配許可權。
1. 在VisualSVN Server Manager視窗的左側右鍵單擊使用者組,選擇Create User或者新建->User,如圖:
點選User後,進入如下圖:
填寫Username和password後,點選ok按鈕後,進入如下圖:
點選上面的【Add】按鈕後,如下圖
增加longen0707到使用者中(如果有多個使用者,操作一樣)。
2 . 然後我們建立使用者組,在VisualSVN Server Manager視窗的左側右鍵單擊使用者組,選擇Create Group或者新建->Group,如圖:
點選【Group】按鈕後,進入如下圖:
在彈出視窗中填寫Group name為Developers,然後點Add按鈕,在彈出的視窗中選擇Developer,加入到這個組,然後點Ok.
接下來我們需要給使用者組設定許可權,在MyRepository上單擊右鍵,選擇屬性,如圖:
在彈出的對話方塊中,選擇Security選項卡,點選Add按鈕,選中longen0707,然後新增進來,許可權設定為Read/Write,如下圖:
點選【確定】按鈕即可。
二:客戶端SVN安裝。
1.首先我們需要下載 ”svn小烏龜”後,進行安裝。比如我下載如下的:
安裝完成後,比如在我的專案在qiandaun1中,我右鍵就可以看到如下:
說明snv已經安裝成功了!
2:checkout專案檔案。
啥是checkout?? 最開始我也一臉蒙逼,這裡有幾個概念要必須掌握:checkout--->將SVN倉庫的程式碼烤到本地,比如你現在參與一個團隊專案,專案程式碼在你之前肯定已經寫了很多了,你可以通過checkout專案程式碼,獲得整個專案。update--->在你寫程式碼的過程中,同事很可能已經提交過程式碼到SVN伺服器,而你本地專案顯然沒有同事新提交的程式碼,你可以通過update SVN獲得SVN最新的程式碼。commit--->當你完成一部分開發後,你可以通過commit提交程式碼到SVN伺服器,這樣別人就可以獲得你寫的程式碼,記得先update再commit。
新建或者進入目錄下(比如qianduan1),右鍵 --> Svn Checkout -->
其中URL我可以在SVN伺服器獲取到,我在myRepositories下右鍵新建檔案
qianduan檔案被建立,然後比如我這樣右鍵 --> copy下
即可。
將複製的版本庫URL貼上上,如下圖:
點選【ok】按鈕後,就可以檢索出來,如下:
如下圖:
注意事項:
.svn這個隱藏目錄記錄著兩項關鍵資訊:工作檔案的基準版本和一個本地副本最後更新的時間戳,千萬不要手動修改或者刪除這個.svn隱藏目錄和裡面的檔案!!,否則將會導致你本地的工作拷貝(靜態試圖)被破壞,無法再進行操作。
1) TortoiseSVN圖示介紹
一個新檢出的工作複本使用綠色的對勾過載,表示Subversion狀態正常。
在你開始編輯一個檔案之後,狀態就變成了已修改,而圖示過載已變成了紅色感嘆號。通過這種方式,你可以很容易地看出那些檔案從你上次更新工作複本被修改過,且需要提交。
如果在提交的過程中出現了衝突,圖示就會變成了黃色感嘆號。
加號告訴你有一個檔案或者目錄已經被計劃加入到版本控制中。
2) TortoiseSVN Client基礎操作:
1. SVN檢出(SVN Checkout)
在資料夾或者目錄下單擊右鍵 –> 選擇SVN檢出,如下圖所示
點選後,在彈開視窗的版本庫url框中輸入版本庫的目錄地址,然後點選確定,如下圖
再點選ok按鈕後,如下圖:
在彈出的對話方塊中輸入使用者名稱和密碼,驗證成功後,專案檔案開始從遠端伺服器下載到本地工作目錄中。
點選ok按鈕後,即可獲取完成,如下圖所示:
2. 增加(Add)
在test專案檔案下,新建一個b.txt檔案,提交到版本庫的方法如下2種:
1. 先提到變更列表中,再commit到配置庫中,選擇新增檔案,右鍵SVN選單執行“Add“操作提交到”變更列表中”,然後右鍵SVN選單執行”SVN Commit”提交到版本庫中。
2. 不提交到變更列表中,而是直接commit配置庫中,選擇該檔案,右鍵svn選單執行”SVN Commit”操作。
3. 刪除(Delete)
如果被刪除的檔案還未入版本庫,則可以直接使用作業系統的刪除操作刪除該檔案。
如果被刪除的檔案已入版本庫,則刪除的方法如下:
- 選擇被刪除檔案,右鍵svn選單執行”delete”操作,然後選擇被刪除檔案的父目錄,右鍵svn選單執行”SVN Commit”.
使用作業系統的刪除操作刪除該檔案,然後選擇被刪除檔案的父目錄,右鍵svn選單執行”SVN Commit”,在變更列表中選擇被刪除的檔案。如下圖:
4. 改名(Rename)
修改檔名,選中需要重新命名的檔案或資料夾,然後右鍵“TortoiseSVNàRename“,在彈出的對話方塊中輸入新名稱,點選”ok”按鈕,並將修改檔名後的檔案或資料夾通過 “SVN Commit”提交到SVN伺服器上。
5. SVN還原(SVN Revert)
右擊想要回退的檔案或者資料夾,在TortoiseSVN彈出選單中選擇”Update to reversion…” 然後會彈出一個視窗,如下:
比如說我們要回退到第10個版本只需要在Revision中填寫相應的版本號,然後點選ok即可。
6. 檢查更新(Check for modifications)
此功能可以顯示你所做的修改有哪些還沒有提交的,此功能不光能看到對檔案的修改變化,所有的變化都能看到,包括增加檔案或者目錄,刪除檔案或者目錄,移動檔案或者目錄等,如果你點選了檢查版本庫,那你還可以看到版本庫裡的改動,既別人提交了哪些檔案的改動,你還沒更新到本地,如下:
7. SVN更新(SVN Update)
更新原生代碼與SVN伺服器上最新的版本一致,只要在需要更新的資料夾上點選右鍵或者在檔案下空白處點選右鍵,選擇”SVN Update” (獲取指定版本中的內容,點選右鍵執行SVN選單中的“Update to reversion“),就可以了。
7.1 如何解決衝突檔案
對於每個衝突的檔案Subversion在你的目錄下放置了三個檔案:如下:
為什麼會產生衝突程式碼呢?原因很簡單就是因為不同的人,同時修改了同一個檔案的同一個地方,這時候,他提交了,我沒有提交,我就提交不了,這個時候我們要進行先更新,然後在進行提交即可,那如果產生衝突,會生成如上3個檔案。
解決方案如下:
首先我們可以看下1.txt程式碼如下:
<<<<<<< .mine
aaaasdf11222333 dderderder
=======
b>>>>>>> .r5
然後我去掉多餘的程式碼,1.txt變成這樣
aaaasdf11222333 dderderder
進行提交,還是提交不了,如下所示:
為什麼?因為衝突會產生上面的三個檔案,有上面3個檔案存在肯定提交不了,這三個檔案程式碼及解釋如下:
- 1.txt.mine 是衝突前自己的檔案。可以看下內容如下:
aaaasdf11222333 dderderder
2. 1.txt.r4 是衝突前本地的版本檔案
內容如下:aaaasdf11222333
3. 1.txt.r5 是別人趕在你之前提交的版本
內容如下: b
其中,<<<<<<<<.mine .....=======之間的程式碼是你自己的,而======......>>>>>>>.r5是別人與你衝突的程式碼部分
這樣就不難理解為什麼會產生衝突這種奇怪的東西了,因為你們修改的同一塊程式碼,當然會產生衝突。
解決方案如下:
- 假如我現在的1.txt中的衝突內容如下:
<<<<<<< .mine
6666666666666600000
=======
66666666666aaaaaaaaaa666
>>>>>>> .r16
前面說過 <<<<<<< .mine …… =======
……之間的程式碼是我未產生衝突之前修改的程式碼,
======= ………>>>>>>> .r16 這中間……的程式碼是別人與我衝突程式碼的部分,從上面的程式碼可以看到 aaaaaaaaa是我同事新增的 ,00000是我後增加的。
- 使用revert(回滾)操作,該操作表示使用者放棄自己的更新程式碼,然後直接提交,這個時候你的程式碼就會使伺服器上最新的程式碼,即A使用者提交的新程式碼,你的程式碼不會被提交,如下所示:
點選ok按鈕後 可以看到其他三個檔案都自動刪掉了,1.txt程式碼變成如下程式碼:
66666666666aaaaaaaaaa666
也就是a使用者提交的程式碼,我自己更新的程式碼需要自己動手複製進去即可提交commit。
- 假如我現在3.txt產生衝突程式碼如下:
<<<<<<< .mine
333333338888888888888=======
3333cccccccccc3333>>>>>>> .r16
通過第一點我們知道,333333338888888888888這個內容是我修改後,未產生衝突之前的內容,3333cccccccccc3333這個程式碼是A使用者提交的程式碼,從上面得知 A使用者新增內容是ccccccc,而我新增的內容是8888888。
那麼第二種解決方法如下:
選擇檔案->右鍵Editconficts:這種方法需要衝突雙方經過協商之後將程式碼更改統一之後再提交。不僅解決了衝突而且還保證了程式碼是正確的,因為只有一方的程式碼被提交.
如上圖所示,紅色的部分是衝突程式碼:theirs表示當前伺服器端最新的程式碼,Mine表示自己修改後的程式碼,Merged表示合併後的程式碼。點選紅色後右鍵選擇:use this text block就可以將該部分程式碼作為合併後的程式碼
接下來再說說由於衝突導致重要程式碼被覆蓋的情況。衝突發生時如果採取的措施不對可能會導致部分程式碼丟失,如果想要還原之前的程式碼也很容易。
選擇檔案->右鍵選擇show log在這裡面你可以看見之前提交的所有版本,找到你想要恢復的版本右鍵選擇revert to this version 就可以恢復了.
SVN提交(SVN Commit)
Svn的提交是將在工作空間做的修改進行提交,包括檔案內容的修改,檔案或目錄的新增,刪除,命名,移動等操作。如下圖所示:
8. 顯示日誌(Show log)
通過此功能可以查到誰,什麼時候,對那個目錄下的那些檔案進行了那些操作,如下圖:
9. 版本庫瀏覽(Repo-browser)
此功能是用來瀏覽需要檢視的資料庫,在本地資料夾下點選右鍵,選擇TortoiseSVNàRepo-browser,在彈出的對話方塊中輸入資料庫地址,再輸入使用者名稱和密碼,就能檢視到你需要檢視到版本庫的內容,在這你還能看到那些檔案被誰鎖定了,如下圖:
三: 建立分支合併相互操作
專案中為何要建立分支,及合併?
比如我現在專案所有的檔案放在主幹上(trunk)中,由於需求的變更,需要增加新的需求,但是我們主幹上還要繼續往下開發,在此我們可以新建一個分支,來做增加新的需求那一塊,主幹上繼續開發,等分支上程式碼沒有問題的時候,再合併到主幹上來。
建立分支的最大的目的就是跟主線進行並行開發時候不影響主線的開發。
如何操作?
假如我本地新建一個資料夾test下有2個資料夾trunk(存放主幹上的程式碼)和branch(存放分支上的程式碼),如下所示:
一:先提取主幹上的程式碼。
點選trunk --> 滑鼠右鍵 --> 點選SVN Checkout --> 彈出一個對話方塊,如下圖所示:
其中上面的URL是從伺服器VisualSVN Server上獲取的,如下所示:
直接右鍵qianduan3 --> Copy URL to Clipboard 即可。
其中qianduan3專案有如下檔案,如下圖所示:
最後點選上面的checkout按鈕後,就可以在主幹上把程式碼從遠端伺服器上獲取到,如下所示:
二:新建分支
從trunk(主幹上)建立分支(branch)步驟如下:
1. 右鍵trunk --> branch/Tag 如下圖:
在彈出的對話方塊如下圖:
點選ok按鈕後,就可以在VisualSVN Serval伺服器上新增newBranch,是從如上伺服器qianduan3上的檔案拷貝一份的,如下所示:
現在我們可以再來看看本地branch檔案夾了,我現在直接進入branch檔案下,右鍵 --> Chenckout下,就可以把newBranch下的所有檔案提取出來了,如下所示:
點選ok按鈕就可以把檔案提取出來了,如下圖所示:
分支目前建立在svn的伺服器端,本地並沒有更新,對本地branch資料夾 右鍵--> update即可,就可以更新到分支程式碼,如下所示:
四:合併分支到主幹上
比如我現在對branch分支上新增3.txt檔案,然後提交上去,如下所示:
我現在想把分支上的程式碼3.txt合併到主幹上trunk,現在要怎麼合併呢?步驟如下:
1. 回到我們剛剛的主幹(trunk)資料夾下,滑鼠右鍵該資料夾 --> TortoiseSVN --> Merge 如下圖所示:
在彈出的視窗,如下圖所示:
接著點選【Next】下一步,如下圖所示:
再接著【Next】下一步,如下圖所示:
就可以看到主幹trunk上多加了一個3.txt,就是從分支上合併過來的。
五:合併主幹到分支。
如果主幹上有一些更新,比如說jar包更新等等,那麼這些要更新到分支上去,如何操作呢?比如我現在在主幹上新建一個4.txt檔案,比如如下:
我現在的分支上目錄如下:
現在是想把主幹上的4.txt合併到分支上來,要如何操作?
步驟如下,還是和剛剛操作類似.
1. 我們在分支點選branch --> 右鍵TortoiseSVN --> Merge 如下圖所示:
在彈出新視窗後,如下圖所示:
接著點選【Next】下一步,如下圖所示:
繼續下一步,如下圖:
最後直接merge,就可以看到分支branch上也有主幹上的4.txt檔案了,也就是說,合併主幹到分支上也是可以的,如下圖所示:
相關推薦
SVN使用教程總結(轉載)
SVN簡介:為什麼要使用SVN? 公司多人協同開發有需要,類似於GIT, 關於git可以看我之前的部落格git的使用[轉],也可以看網上的廖雪峰寫的部落格。Subversion是什麼? 它是一個自由/開源的版本控制系統,一組檔案存放在中心版本庫,記錄每一次檔案和目錄的修改,Subversion允許把資料恢
linux最大文件句柄數量總結(轉載)
指定 which 非root cti 文件打開 可能 查看 mit value 最近部署上線的一個引擎,啟動之後內存、日誌顯示一切正常,但是外部無法進行引擎訪問。幾經周折,在同事的協助下,找出了問題:root用戶的open files為1024,引擎啟動時,1024個文
Oracle中Merge into用法總結 (轉載)
字符 存在 sin 刪除 ron mic 但是 多個 前段時間 Oracle中Merge into用法總結 (出處:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因: 前段時間,因為涉及到一張表的大數據操作,要同時
機器學習算法基礎概念學習總結(轉載)
原則 不清楚 tof 條件 cnblogs 偽代碼 相關關系 什麽 最近鄰 來源:lantian0802的專欄 blog.csdn.net/lantian0802/article/details/38333479 一、基礎概念
算法導論22.3深度優先搜索 練習總結 (轉載)
由於 .net -c art 單個 hit 包含 strong 進行 22.3-1 畫一個 3*3 的網格,行和列的擡頭分別標記為白色、灰色和黑色,對於每個表單元 (i, j),請指出對有向圖進行深度優先搜索的過程中,是否可能存在一條邊,鏈接一個顏色為 i 的結點和一個顏色
算法導論22.4拓撲排序 練習總結 (轉載)
裏的 添加 %d closed ace style 數量級 ase ica 22.4-1 給出算法 TOPOLOGICAL-SORT 運行於圖 22-8 上時所生成的結點次序。這裏的所有假設和練習 22.3-2 一樣。 ANSWER: 22.4-2 請給出一個線性時間
機器學習基本概念總結(轉載)
9.png png log images es2017 enter 08-18 機器學習 style 機器學習基本概念總結(轉載)
Hash算法總結(轉載)
avr 人員 鏈地址法 函數 說明 rfc jdk8 的人 完成 1. Hash是什麽,它的作用 先舉個例子。我們每個活在世上的人,為了能夠參與各種社會活動,都需要一個用於識別自己的標誌。也許你覺得名字或是身份證就足以代表你這個人,但是這種代表性非常脆弱,因為重名的人很多,
$.extend()用法總結(轉載)
1.用法描述 $.extend(setting,option)用於合併物件setting和物件option並將合併後的值返回給setting 常規用法(1) var settings = { validate: false, limit: 5, name: "foo" }; var opti
java io 流 輸入輸出 大牛經典總結(轉載)
轉載出處:https://www.cnblogs.com/shaohz2014/p/3652548.html java io 流 輸入輸出 大牛經典總結 在軟體開發中,資料流和資料庫操作佔據了一個很重要的位置,所以,熟
在C#中,Json的序列化和反序列化的幾種方式總結(轉載)
在這篇文章中,我們將會學到如何使用C#,來序列化物件成為Json格式的資料,以及如何反序列化Json資料到物件。 什麼是JSON? JSON (JavaScript Object Notation) is a lightweight data-interchange format.
java之static四大作用總結(轉載)
用於學習記錄,原地址(https://www.cnblogs.com/dotgua/p/6354151.html) 在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同於其他關鍵字,他們都有多種用法,而且在一定環境下使用,可以提高程式的執行效能,優化程式的結構。下面我們
String類中的equals方法總結(轉載)
轉載:https://blog.csdn.net/qq_25827845/article/details/53868815 1.String原始碼中equals大致寫法: 1 public boolean equals(Object anObject) { 2 if (this == anObj
三種迴圈的流程圖畫法總結 (轉載)
三種迴圈的流程圖畫法總結 C語言程式設計中常用的三種迴圈為for(;;),while 和 do-while。 1.&nbs
一個老程式設計師十年生涯總結(轉載)
今年是我大學畢業滿10年的日子,也是我投身IT技術的第10年。一直想能對過去的經歷做些回顧與反思,以更 好地走向未來,但總沒有筆。剛好CSDN舉辦“講述程式設計師的故事”徵文,這件事成了一個引子,我終於趁著暑期有時間,敲了一天鍵盤,便有了這篇人生自述。 10年對於一個人
iOS -- 學習資料總結(轉載)
先著名轉載地址:https://www.jianshu.com/p/c47c24ab1e76/ 關於iOS學習進階的必讀一些部落格總結 經過一週的思考還是決定重組一下優秀的部落格,首次整理這些部落格比較亂,但是後期會慢慢增加github 常用的優秀開源專案,部落格會細緻分類,針對某一些功
c++輸出方式總結(轉載)(有刪改)
原文地址(有刪改) 1.cin 用法1:最基本,也是最常用的用法,輸入一個數字: #include <iostream> using namespace std; main () { int a,b; cin
google的開源專案總結(轉載)
轉自http://www.feng5166.com/blog/424.htmlgoogle的開源專案值得我們一用的,這些專案很有意義,甚至可以直接用在我們自己的工作上!學習程式設計的的一個比較好的方式就是閱讀優秀專案的原始碼,從而能夠了解作者的方法、思路、技巧,另外閱讀原始碼對於一些朋友是枯燥乏味
所有排序總結(轉載)
前言 查詢和排序演算法是演算法的入門知識,其經典思想可以用於很多演算法當中。因為其實現程式碼較短,應用較常見。所以在面試中經常會問到排序演算法及其相關的問題。但萬變不離其宗,只要熟悉了思想,靈活運用也不是難事。一般在面試中最常考的是快速排序和歸併排序,並且經常有面試官要
OOD經驗原則總結(轉載)
經驗原則總結第2章 類和物件:面向物件範型的建材1. 所以資料都應該隱藏在它所在的類內部。2. 類的使用者必須依賴類的公有介面,但類不能依賴它的使用者3. 儘量減少類的協議中的訊息4. 實現所有類都理解的最基本公有介面[例如:拷貝操作(深拷貝與淺拷貝),相等性判