SVN全稱Subversion,是一個開放源代碼的版本控制系統,Subversion 在 2000 年由 CollabNet Inc 開發,如今發展成爲 Apache 軟件基金會的一個項目,一樣是一個豐富的開發者和用戶社區的一部分。html
SVN是一個開放源代碼的版本控制系統,管理着隨時間改變的數據。這些數據放置在一箇中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變更。 這樣你就能夠把檔案恢復到舊的版本, 或是瀏覽文件的變更歷史。說得簡單一點SVN就是用於多我的共同開發同一個項目,共用資源的目的。程序員
Subversion 實現了一個 「虛擬」 的版本控管文件系統, 可以依時間跟蹤整個目錄的變更。 目錄和文件都能進行版本控制。安全
Subversion中,能夠增長(add)、刪除(delete)、複製(copy)和重命名(rename),不管是文件仍是目錄。全部的新加的文件都從一個新的、乾淨的版本開始。服務器
一個提交動做,不是所有更新到了檔案庫中,就是徹底不更新。這容許開發人員以邏輯區間創建並提交變更,以防止當部分提交成功時出現的問題。svn
…this
開始新一天的工做.net
一、從服務器下載項目組最新代碼。(Checkout)
二、若是已經Checkout而且有人已Commit了代碼,你能夠更新以得到最新代碼。(Update)開放源代碼
三、進入本身的分支,進行工做,每隔一個小時向服務器本身的分支提交一次代碼(不少人都有這個習慣。由於有時候本身對代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時本身修改了哪些代碼,就須要這樣作了)。(Commit)版本控制
四、下班時間快到了,把本身的分支合併到服務器主分支上,一天的工做完成,並反映給服務器。(Commit)code
注意:若是兩個程序員同時修改了同一個文件, _SVN能夠合併這兩個程序員的改動,實際上SVN管理源代碼是以行爲單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。若是是同一行,SVN會提示文件Confict, 衝突,須要手動確認。_
版本庫至關於一個集中的空間,用於存放開發者全部的工做成果。版本庫不只能存放文件,還包括了每次修改的歷史,即每一個文件的變更歷史。
Create 操做是用來建立一個新的版本庫。大多數狀況下這個操做只會執行一次。當你建立一個新的版本庫的時候,你的版本控制系統會讓你提供一些信息來標識版本庫,例如建立的位置和版本庫的名字。
Checkout 操做是用來從版本庫建立一個工做副本。工做副本是開發者私人的工做空間,能夠進行內容的修改,而後提交到版本庫中。
顧名思義,update 操做是用來更新版本庫的。這個操做將工做副本與版本庫進行同步。因爲版本庫是由整個團隊共用的,當其餘人提交了他們的改動以後,你的工做副本就會過時。
讓咱們假設 Tom 和 Jerry 是一個項目的兩個開發者。他們同時從版本庫中檢出了最新的版本並開始工做。此時,工做副本是與版本庫徹底同步的。而後,Jerry 很高效的完成了他的工做並提交了更改到版本庫中。
此時 Tom 的工做副本就過時了。更新操做將會從版本庫中拉取 Jerry 的最新改動並將 Tom 的工做副本進行更新。
當檢出以後,你就能夠作不少操做來執行變動。編輯是最經常使用的操做。你能夠編輯已存在的文件來,例如進行文件的添加/刪除操做。
你能夠添加文件/目錄。可是這些添加的文件目錄不會馬上成爲版本庫的一部分,而是被添加進待變動列表中,直到執行了 commit 操做後纔會成爲版本庫的一部分。
一樣地你能夠刪除文件/目錄。刪除操做馬上將文件從工做副本中刪除掉,但該文件的實際刪除只是被添加到了待變動列表中,直到執行了 commit 操做後纔會真正刪除。
Rename 操做能夠更改文件/目錄的名字。"移動"操做用來將文件/目錄從一處移動到版本庫中的另外一處。
當你檢出工做副本或者更新工做副本後,你的工做副本就跟版本庫徹底同步了。可是當你對工做副本進行一些修改以後,你的工做副本會比版本庫要新。在 commit 操做以前複查下你的修改是一個很好的習慣。
Status 操做列出了工做副本中所進行的變更。正如咱們以前提到的,你對工做副本的任何改動都會成爲待變動列表的一部分。Status 操做就是用來查看這個待變動列表。
Status 操做只是提供了一個變更列表,但並不提供變更的詳細信息。你能夠用 diff 操做來查看這些變更的詳細信息。
咱們來假設你對工做副本作了許多修改,可是如今你不想要這些修改了,這時候 revert 操做將會幫助你。
Revert 操做重置了對工做副本的修改。它能夠重置一個或多個文件/目錄。固然它也能夠重置整個工做副本。在這種狀況下,revert 操做將會銷燬待變動列表並將工做副本恢復到原始狀態。
合併的時候可能會發生衝突。Merge 操做會自動處理能夠安全合併的東西。其它的會被當作衝突。例如,「hello.c」 文件在一個分支上被修改,在另外一個分支上被刪除了。這種狀況就須要人爲處理。Resolve 操做就是用來幫助用戶找出衝突並告訴版本庫如何處理這些衝突。
Commit 操做是用來將更改從工做副本到版本庫。這個操做會修改版本庫的內容,其它開發者能夠經過更新他們的工做副原本查看這些修改。
在提交以前,你必須將文件/目錄添加到待變動列表中。列表中記錄了將會被提交的改動。當提交的時候,咱們一般會提供一個註釋來講明爲何會進行這些改動。這個註釋也會成爲版本庫歷史記錄的一部分。Commit 是一個原子操做,也就是說要麼徹底提交成功,要麼失敗回滾。用戶不會看到成功提交一半的狀況。
https://www.visualsvn.com/downloads/ (服務器)
http://tortoisesvn.net/downloads.html (客戶端)
最後下載完成的安裝包
說明:服務器端須要提供IP、端口、賬號、密碼供客戶端使用。即有以下配置
設置Server name ,建議使用當前IP
Server name的值能夠設置爲: 1.127.0.0.1 (只能本地本身訪問) 2.電腦用戶名(只能本地本身訪問) 3.當前IP(可以拼通IP的用戶都可訪問) Server Port使用默認值便可 查看當前IP: 打開dos窗口(Windows+R鍵),輸入ipconfig,按回車
假設A、B兩個用戶都在版本號爲100的時候,更新了kingtuns.txt這個文件,A用戶在修改完成以後提交kingtuns.txt到服務器,這個時候提交成功,這個時候kingtuns.txt文件的版本號已經變成101了。同時B用戶在版本號爲100的kingtuns.txt文件上做修改,修改完成以後提交到服務器時,因爲不是在當前最新的101版本上做的修改,因此致使提交失敗。此時用戶B去更新文件,若是B用戶和A用戶修改了文件的同一行代碼,就會出現衝突
衝突發生時,subversion會在當前工做目錄中保存全部的目標文件版本[上次更新版本、當前獲取的版本(即別人提交的版本)、本身更新的版本、目標文件]。
假設文件名是kingtuns.txt
對應的文件名分別是:
kingtuns.txt.r101
kingtuns.txt.r102
kingtuns.txt.mine
kingtuns.txt
同時在目標文件中標記來自不一樣用戶的更改。
用戶A
用戶B
打開編輯衝突的窗口
Theirs窗口爲服務器上當前最新版本 Mine窗口爲本地修改後的版本 Merged窗口爲合併後的文件內容顯示
同理若是要使用本地版本,在協商後,在Mine窗口右鍵,選擇Use this text block(使用這段文本塊)。
注:也可先不標記爲解決,直接保存文件後,在B用戶的衝突目錄下,選中文件—右鍵菜單—TortoiseSVN—Resolved(解決)。而後再提交文件。
配置svn
找不到svn.exe文件,TortoiseSVN的bin目錄下面沒有svn.exe 之因此沒有是由於安裝TortoiseSVN的時候沒有勾選指定安裝項,添加command line client tools
注:項目提交前,最好先更新,而後再提交。