版本控制工具(SVN/Git)介紹(非原創)


文章大綱

一、SVN介紹
二、Git介紹
三、IDEA使用SVN和Git
四、總結
五、參考文章

 

一、SVN介紹

1. SVN服務器搭建和使用

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

 
image

個人認為最好用VisualSVN server 服務端和 TortoiseSVN客戶端搭配使用. 點開上面的VisualSVN連接,下載VisualSVN server,下載完成后雙擊安裝,如下圖:

 

點擊Next下一步,如下:

 
image

然后再點擊Next項,下一步,如下:

 
image

點擊【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,如下圖:

 

點擊【確定】按鈕即可。

3. 客戶端SVN安裝

1.首先我們需要下載 ”svn小烏龜”后,進行安裝。比如我下載如下所示

 

安裝完成后,比如在我的項目在qiandaun1中,我右鍵就可以看到如下:

 

說明snv已經安裝成功了!

2:checkout項目文件。

新建或者進入目錄下(比如qianduan1),右鍵 --> Svn Checkout -->
 

其中URL我可以在SVN服務器獲取到,我在myRepositories下右鍵新建文件

 

qianduan文件被建立,然后比如我這樣右鍵 --> copy下

 

將復制的版本庫URL粘貼上,如下圖:

 

點擊【ok】按鈕后,就可以檢索出來,如下:

 

如下圖:

 

注意事項:

.svn這個隱藏目錄記錄着兩項關鍵信息:工作文件的基准版本和一個本地副本最后更新的時間戳,千萬不要手動修改或者刪除這個.svn隱藏目錄和里面的文件!!,否則將會導致你本地的工作拷貝(靜態試圖)被破壞,無法再進行操作。

1) TortoiseSVN圖標介紹

 

 

一個新檢出的工作復本使用綠色的對勾重載,表示Subversion狀態正常。

 

在你開始編輯一個文件之后,狀態就變成了已修改,而圖標重載已變成了紅色感嘆號。通過這種方式,你可以很容易地看出那些文件從你上次更新工作復本被修改過,且需要提交。

 

如果在提交的過程中出現了沖突,圖標就會變成了黃色感嘆號。

 

加號告訴你有一個文件或者目錄已經被計划加入到版本控制中。

4. 常見SVN圖標及含義

 

綠色對勾:表示一個新檢出的工作復本使用綠色的對勾做重載。表示Subversion狀態正常.

紅色嘆號:表示在你開始編輯一個文件后,狀態就變成了已修改,而圖標重載變成了紅色感嘆號。通過這種方式,你可以很容易地看出哪些文件從你上次更新工作復本后被修改過,需要被提交。

黃色嘆號:表示如果在提交的過程中出現了沖突圖標變成黃色感嘆號。

灰色對勾:表示如果你給一個文件設置了svn:needs-lock屬性,Subversion會讓此文件只讀,直到你獲得文件鎖。只讀文件具有這個重載圖標來表示你必須在編輯之前先得到一個鎖。

黃色小鎖:表示如果你擁有了一個文件的鎖,並且Subversion狀態是正常,這個重載圖標就提醒你如果不使用該文件的話應該釋放鎖,允許別人提交對該文件的修改。

紅色叉號:表示這個圖標表示當前文件夾下的某些文件或文件夾已經被計划從版本控制中刪除,或是該文件夾下某個受控的文件丟失了。

藍色加號:表示加號告訴你有一個文件或是目錄已經被計划加入版本控制。

5. TortoiseSVN Client基礎操作

  1. SVN檢出(SVN Checkout)

    在文件夾或者目錄下單擊右鍵 –> 選擇SVN檢出,如下圖所示

 
image

點擊后,在彈開窗口的版本庫url框中輸入版本庫的目錄地址,然后點擊確定,如下圖

 

再點擊ok按鈕后,如下圖:

在彈出的對話框中輸入用戶名和密碼,驗證成功后,項目文件開始從遠程服務器下載到本地工作目錄中。

 

點擊ok按鈕后,即可獲取完成,如下圖所示:

  1. 增加(Add)

在test項目文件下,新建一個b.txt文件,提交到版本庫的方法如下2種:

(1) 先提到變更列表中,再commit到配置庫中,選擇新增文件,右鍵SVN菜單執行“Add“操作提交到”變更列表中”,然后右鍵SVN菜單執行”SVN Commit”提交到版本庫中。

(2)不提交到變更列表中,而是直接commit配置庫中,選擇該文件,右鍵svn菜單執行”SVN Commit”操作。

  1. 刪除(Delete)

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

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

選擇被刪除文件,右鍵svn菜單執行”delete”操作,然后選擇被刪除文件的父目錄,右鍵svn菜單執行”SVN Commit”.

使用操作系統的刪除操作刪除該文件,然后選擇被刪除文件的父目錄,右鍵svn菜單執行”SVN Commit”,在變更列表中選擇被刪除的文件。如下圖:

 
  1. 改名(Rename)

    修改文件名,選中需要重命名的文件或文件夾,然后右鍵“TortoiseSVNàRename“,在彈出的對話框中輸入新名稱,點擊”ok”按鈕,並將修改文件名后的文件或文件夾通過 “SVN Commit”提交到SVN服務器上。

  2. SVN還原(SVN Revert)

    右擊想要回退的文件或者文件夾,在TortoiseSVN彈出菜單中選擇”Update to reversion…” 然后會彈出一個窗口,如下:

 
image

比如說我們要回退到第10個版本只需要在Revision中填寫相應的版本號,然后點擊ok即可。

  1. 檢查更新(Check for modifications)

    此功能可以顯示你所做的修改有哪些還沒有提交的,此功能不光能看到對文件的修改變化,所有的變化都能看到,包括增加文件或者目錄,刪除文件或者目錄,移動文件或者目錄等,如果你點擊了檢查版本庫,那你還可以看到版本庫里的改動,既別人提交了哪些文件的改動,你還沒更新到本地,如下:

 
image
  1. 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 進行提交,還是提交不了,如下所示: ![image](http://upload-images.jianshu.io/upload_images/16598307-9bbaf161f822d400.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

為什么?因為沖突會產生上面的三個文件,有上面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用戶提交的新代碼,你的代碼不會被提交,如下所示:
     
    image
     
    image

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

    66666666666aaaaaaaaaa666

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

  2. 假如我現在3.txt產生沖突代碼如下:

    <<<<<<< .mine

    333333338888888888888=======

    3333cccccccccc3333>>>>>>> .r16

    通過第一點我們知道,333333338888888888888這個內容是我修改后,未產生沖突之前的內容,3333cccccccccc3333這個代碼是A用戶提交的代碼,從上面得知 A用戶新增內容是ccccccc,而我新增的內容是8888888。

    那么第二種解決方法如下:

                選擇文件->右鍵Editconficts:這種方法需要沖突雙方經過協商之后將代碼更改統一之后再提交。不僅解決了沖突而且還保證了代碼是正確的,因為只有一方的代碼被提交.
    
     
    image

如上圖所示,紅色的部分是沖突代碼:theirs表示當前服務器端最新的代碼,Mine表示自己修改后的代碼,Merged表示合並后的代碼。點擊紅色后右鍵選擇:use this text block就可以將該部分代碼作為合並后的代碼

接下來再說說由於沖突導致重要代碼被覆蓋的情況。沖突發生時如果采取的措施不對可能會導致部分代碼丟失,如果想要還原之前的代碼也很容易。

選擇文件->右鍵選擇show log在這里面你可以看見之前提交的所有版本,找到你想要恢復的版本右鍵選擇revert to this version 就可以恢復了.

  1. SVN提交(SVN Commit)

    Svn的提交是將在工作空間做的修改進行提交,包括文件內容的修改,文件或目錄的添加,刪除,命名,移動等操作。如下圖所示:

     
  2. 顯示日志(Show log)

    通過此功能可以查到誰,什么時候,對那個目錄下的那些文件進行了那些操作,如下圖:
    
 
  1. 版本庫瀏覽(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 如下圖所示:

 

在彈出的窗口,如下圖所示:

 
image

接着點擊【Next】下一步,如下圖所示:

 

再接着【Next】下一步,如下圖所示:

 
 

就可以看到主干trunk上多加了一個3.txt,就是從分支上合並過來的。

五:合並主干到分支。

如果主干上有一些更新,比如說jar包更新等等,那么這些要更新到分支上去,如何操作呢?比如我現在在主干上新建一個4.txt文件,比如如下:

 

我現在的分支上目錄如下:

 

現在是想把主干上的4.txt合並到分支上來,要如何操作?

步驟如下,還是和剛剛操作類似.

1. 我們在分支點擊branch --> 右鍵TortoiseSVN --> Merge 如下圖所示:

 

在彈出新窗口后,如下圖所示:

 

接着點擊【Next】下一步,如下圖所示:

 

繼續下一步,如下圖:

 

最后直接merge,就可以看到分支branch上也有主干上的4.txt文件了,也就是說,合並主干到分支上也是可以的,如下圖所示:

 

二、Git介紹

1. Windows上安裝Git

msysGit 發行了exe格式的Git安裝文件,可以通過以下網站進行下載。
官網下載地址:https://git-for-windows.github.io/
https://git-scm.com/download/win
國內下載地址:https://github.com/waylau/git-for-win
下載的Git安裝文件是exe格式的可執行文件,直接打開,按照默認的配置一路點擊Next即可完成安裝。

 

2. 創建本地倉庫

  1. 配置用戶身份
    在Git Bash中,輸入如下指令 :
 

此操作在多人協作時非常有用,可以用來標識更新代碼的用戶的身份。

  1. 切換到需要創建倉庫的文件目錄
 
  1. 初始化本地倉庫
    在倉庫目錄下,輸入指令“git init”來初始化git的本地倉庫,該操作會在倉庫目錄下生成一個.git的隱藏文件夾,用來記錄用戶的git操作。若要刪除本地倉庫,直接刪除倉庫下的這個隱藏文件夾即可。
 

輸入指令“git status” 來查看當前倉庫中的文件狀態。

 
  1. 提交代碼到本地倉庫
    使用“git add”命令來添加要提交的文件。
    語法:git add .(表示添加所有文件)|目錄名|文件名

添加文件后,輸入指令“git status” 來查看當前倉庫中的文件狀態。

 

使用“git commit”命令來提交文件。
語法:git commit -m “提交描述信息”

 

提交完成后,輸入指令“git status” 再次查看當前倉庫中的文件狀態。

 

三、IDEA使用SVN和Git

1. 使用SVN管理代碼

在進行本操作前, 請准備好SVN環境
第一步

 

第二步
指定服務器地址

 

第三步

填寫相應信息后, 提交代碼

 

第四步
指定SVN版本, 選擇默認即可

 

第五步
輸入訪問服務器的用戶名和密碼, 點擊OK

第六步

 
 

通常我們要忽略掉.idea文件夾和以.iml結尾的文件

第七步
提交代碼

 
 

此時代碼檢查工具會有提示, 直接點擊commit即可

 

看到如下提示, 說明提交成功

 

2. 使用GIT管理代碼

在進行本操作前, 請准備好GIT環境
第一步
開啟版本控制

 

第二步

 

第三步
設置忽略

 
 

通常我們要忽略掉.idea文件夾和以.iml結尾的文件

第四步
提交代碼到本地倉庫

 
 

第五步
提交代碼到遠程倉庫

 
 
 
 

輸入帳號之后, 如果右下角彈出如下提示, 說明提交成功

 

四、總結

1. SVN

優點
(1)管理方便,邏輯明確,符合一般人思維習慣。
(2)易於管理,集中式服務器更能保證安全性。
(3)代碼一致性非常高。
(4)適合開發人數不多的項目開發。

缺點
(1)服務器壓力太大,數據庫容量暴增。
(2)如果不能連接到服務器上,基本上不可以工作,看上面第二步,如果服務器不能連接上,就不能提交,還原,對比等等。
(3)不適合開源開發(開發人數非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明確的權限管理機制(例如分支訪問限制),可以實現分層管理,從而很好的解決開發人數眾多的問題。

2. Git

優點
(1)適合分布式開發,強調個體。
(2)公共服務器壓力和數據量都不會太大。
(3)速度快、靈活。
(4)任意兩個開發者之間可以很容易的解決沖突。
(5)離線工作。

缺點
(1)學習周期相對而言比較長。
(2)不符合常規思維。
(3)代碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有代碼和版本信息。

五、參考文章

    1. http://www.cnblogs.com/armyfai/p/3985660.html#!comments
    2. https://blog.csdn.net/weixin_40805079/article/details/81385094


免責聲明!

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



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