超詳細 - SVN下載安裝及使用教程



SVN簡介:

?為什么要使用SVN?

??????程序員在編寫程序的過程中,每個程序員都會生成很多不同的版本,這就需要程序員有效的管理代碼,在需要的時候可以迅速,準確取出相應的版本。

Subversion是什么?

?? 它是一個自由/開源的版本控制系統,一組文件存放在中心版本庫,記錄每一次文件和目錄的修改,Subversion允許把數據恢復到早期版本,或是檢查數據修改的歷史,Subversion可以通過網絡訪問它的版本庫,從而使用戶在不同的電腦上進行操作。

一:SVN服務器搭建和使用。

? ?1.?????首先來下載和搭建SVN服務器,下載地址如下:?http://subversion.apache.org/packages.htmlhttp://subversion.apache.org/packages.html,進入網址后,滾動到瀏覽器最底部看到如下截圖:

??

? ? ? 個人認為最好用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項目文件。

? ??新建或者進入目錄下(比如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)

? ? ?如果被刪除的文件還未入版本庫,則可以直接使用操作系統的刪除操作刪除該文件。

? ? ?如果被刪除的文件已入版本庫,則刪除的方法如下:

  1. 選擇被刪除文件,右鍵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. 1.txt.mine 是沖突前自己的文件。可以看下內容如下:

? ? ? aaaasdf11222333 dderderder

? ? ? 2. ?1.txt.r4 是沖突前本地的版本文件

? ? ?內容如下:aaaasdf11222333

? ? ? 3. ?1.txt.r5? 是別人趕在你之前提交的版本

? ? ? 內容如下: b

其中,<<<<<<<<.mine .....=======之間的代碼是你自己的,而======......>>>>>>>.r5是別人與你沖突的代碼部分

這樣就不難理解為什么會產生沖突這種奇怪的東西了,因為你們修改的同一塊代碼,當然會產生沖突。

解決方案如下:

  1. 假如我現在的1.txt中的沖突內容如下:

? ? ? <<<<<<< .mine

? ? ? ?6666666666666600000

? ? ? ?=======

? ? ? 66666666666aaaaaaaaaa666

? ? ? >>>>>>> .r16
? ? 前面說過? <<<<<<< .mine …… =======

? ? ……之間的代碼是我未產生沖突之前修改的代碼,

? ? =======?………>>>>>>> .r16?這中間……的代碼是別人與我沖突代碼的部分,從上面的代碼可以看到 aaaaaaaaa是我同事新增的 ,00000是我后增加的。

    1. 使用revert(回滾)操作,該操作表示用戶放棄自己的更新代碼,然后直接提交,這個時候你的代碼就會使服務器上最新的代碼,即A用戶提交的新代碼,你的代碼不會被提交,如下所示:

      點擊ok按鈕后 可以看到其他三個文件都自動刪掉了,1.txt代碼變成如下代碼:

      66666666666aaaaaaaaaa666

      也就是a用戶提交的代碼,我自己更新的代碼需要自己動手復制進去即可提交commit。

    2. 假如我現在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文件了,也就是說,合并主干到分支上也是可以的,如下圖所示:

轉載自:http://www.cnblogs.com/armyfai/p/3985660.html


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451012.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TW實習日記:第16天

前端的樣式bug實在是太太太莫名其妙了&#xff0c;尤其是封裝好的組件&#xff0c;一層套一層的&#xff0c;根本不知道是哪一層出了問題...除了改bug就是做新功能&#xff0c;真想吐槽一下這個項目的留言板&#xff0c;根本沒人會用吧...這功能實在是太老舊了... 感覺每一天都…

重載與重寫(overload and override)

在java編程中經常會遇到重載和重寫&#xff0c;剛接觸java的時候對這對概念比較懵比&#xff0c;也不能理解其中的區別&#xff0c;后來在逐漸的學習中更加深刻的理解了其中的原理。哎&#xff0c;說來還是基礎知識學的不扎實&#xff0c;這些都是大學期間偷懶欠下的帳。 &…

洛谷P4114 Qtree1(樹鏈剖分+線段樹)

傳送門 LCT秒天秒地用什么樹剖 這題可以算是樹剖的比較裸的題目了 把每一條邊的權值下放到他兩邊的點中深度較深的那個 然后直接用樹剖線段樹帶進去亂搞就可以了 1 //minamoto2 #include<bits/stdc.h>3 using namespace std;4 template<class T>inline bool cmax(T…

什么是CDN ,CDN的作用

轉自&#xff1a;https://baike.baidu.com/item/CDN/420951?fraladdin 簡介 CDN是構建在網絡之上的內容分發網絡&#xff0c;依靠部署在各地的邊緣服務器&#xff0c;通過中心平臺的負載均衡、內容分發、調度等功能模塊&#xff0c;使用戶就近獲取所需內容&#xff0c;降低網…

docker 中不能用vim編輯文件

2019獨角獸企業重金招聘Python工程師標準>>> docker 中不能用vim編輯文件 2017年08月28日 16:54:29 閱讀數&#xff1a;2061 更新來源 apt-get update 1安裝vim apt-get install -y vim 轉載于:https://my.oschina.net/u/3367404/blog/1923901

使用final修飾局部變量???

在編程中我們偶爾會看到如下的代碼&#xff1a; public void foo(final int arg){final int localData 0;// ...}以及與之相似的代碼 public void foo(int arg){int localData 0;// ...}這兩段代碼的主要區別就是&#xff1a;局部變量是否使用了final關鍵字修飾。有同學可能會…

視頻編解碼概述

視頻編解碼概述 1. 常用的基本知識 基本概念 編解碼 編解碼器&#xff08;codec&#xff09;指的是一個能夠對一個信號或者一個數據流進行變換的設備或者程序。這里指的變換既包括將信號或者數據流進行編碼&#xff08;通常是為了傳輸、存儲或者加密&#xff09;或者提取得到…

洛谷 2759 奇怪的函數

【題解】 取個對數然后二分即可。對于一個數x&#xff0c;x^x的位數就是(int)(lg(x)*x1). 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<cmath>5 #define LL long long6 #define rg register7 #define N 2000108 using name…

區塊鏈技術怎么構架落地應用?

自從區塊鏈技術火爆起來之后&#xff0c;越來越多的金融機構和金融科技公司宣布探索區塊鏈在金融上的運用&#xff0c;國內區塊鏈技術服務商跟隨金融機構的腳步&#xff0c;一方面是基于以太坊智能合約作為底層架構&#xff0c;通過提供中間層工具及協議和應用層的身份驗證、證…

JVM中GC Root對象有哪些?

眾所周知&#xff0c;我們目前最常用的虛擬機hotspot使用可達性分析來進行垃圾回收&#xff0c;而可達性分析需要依賴GC Root。下面我就來介紹下可以作為GC Root的對象。 &#xff08;一&#xff09;虛擬機棧中引用的對象 虛擬機棧中的引用的對象可以作為GC Root。我們程序在虛…

IPv6 解說 ,與IPv4的同異

見&#xff1a;https://baike.baidu.com/item/IPv6/172297 IPv6 IPv6是Internet Protocol Version 6的縮寫&#xff0c;其中Internet Protocol譯為“互聯網協議”。IPv6是IETF&#xff08;互聯網工程任務組&#xff0c;Internet Engineering Task Force&#xff09;設計的用于替…

USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)

夫約翰想要建造一個圍欄用來圍住他的奶牛&#xff0c;可是他資金匱乏。他建造的圍欄必須包括他的奶牛喜歡吃草的所有地點。對于給出的這些地點的坐標&#xff0c;計算最短的能夠圍住這些點的圍欄的長度。 輸入 輸入數據的第一行包括一個整數 N。N&#xff08;0 < N < 10,…

Linux各發行版本簡介

Linux的發行版本可以大體分為兩類&#xff0c;一類是商業公司維護的發行版本&#xff0c;一類是社區組織維護的發行版本&#xff0c;前者以著名的Redhat&#xff08;RHEL&#xff09;為代表&#xff0c;后者以Debian為代表。 1、Redhat&#xff0c;應該稱為Redhat系列&#xff…

個推應用統計產品(個數)Android集成實踐

2019獨角獸企業重金招聘Python工程師標準>>> 前段時間&#xff0c;我們公司的產品又雙叒叕給我們提了新需求&#xff0c;要求我們把APP相關的數據統計分析一下&#xff0c;這些指標包括但不限于應用每日的新增、活躍、留存率等等&#xff0c;最好每天都能提供數據報…

JVM中安全點safePoint有哪些?

安全點是jvm選來進行GC的線程中斷點。線程在執行到安全點后詢問GC標志位&#xff0c;若標志位標識將要進行GC&#xff0c;則程序主動中斷掛起線程等待GC。安全點的選定基本上是根據"是否具有讓程序長時間執行的特征"為標準進行選定的。目前會產生安全點的主要有&…

深入理解 PHP7 中全新的 zval 容器和引用計數機制

深入理解 PHP7 中全新的 zval 容器和引用計數機制 最近在查閱 PHP7 垃圾回收的資料的時候&#xff0c;網上的一些代碼示例在本地環境下運行時出現了不同的結果&#xff0c;使我一度非常迷惑。 仔細一想不難發現問題所在&#xff1a;這些文章大多是 PHP5.x 時代的&#xff0c;而…

分布式系統的架構思路

見&#xff1a;http://www.cnblogs.com/chulung/p/5653135.html 一、前言 在計算機領域&#xff0c;當單機性能達到瓶頸時&#xff0c;有兩種方式可以解決性能問題&#xff0c;一是堆硬件&#xff0c;進一步提升配置&#xff0c;二是分布式&#xff0c;水平擴展。當然&#xff…

狂賭智能手機 中國互聯網巨頭深陷零利潤困局

編者按&#xff1a;智能手機正在中國普及&#xff0c;互聯網企業趨之若鶩。然而&#xff0c;在蘋果、三星共享智能手機市場99%利潤的大背景下&#xff0c;中國互聯網企業要從所剩無幾的利潤空間里分一杯羹&#xff0c;注定備受煎熬&#xff0c;前路迷茫。 互聯網巨頭紛紛進入智…

占用較多堆外內存的區域

&#xff08;1&#xff09;Director Memory 主要在nio中會使用&#xff0c;在內存不足時會拋出OOM或者OOM:Direct buffer memory。 &#xff08;2&#xff09;線程堆棧 為每個線程分配的棧空間&#xff0c;用于保存局部變量&#xff0c;執行程序代碼。內存不足時可能拋出StackO…

Oracle SELECT INTO 和 INSERT INTO SELECT 兩種表復制語句詳解

在Oracle中select into from不可以使用&#xff0c;用create table select代替該功能&#xff01;&#xff01;&#xff01;在Sql Server中可以正常使用。1.INSERT INTO SELECT語句語句形式為&#xff1a;Insert into Table2(field1,field2,...) select value1,value2,... from…