1. 程式人生 > >版本控制之svn和git簡述

版本控制之svn和git簡述

參考:

在一個團隊的工作中,掌握版本控制系統的使用是對每一個工程師最基本的要求,作為剛入職的菜鳥我來說,更是需要快速掌握的,下面就簡單記錄一下svn以及git版本控制的基礎知識。

1. 版本控制的概念                                                                                                                   

版本控制(Version Control)的含義就是通過某種方式來記錄版本庫中檔案的內容變化,以達到管理和維護版本的開發。其實,我們在學習程式設計的時候就一直在使用版本控制的理念。例如,在學習

C語言的時候,我們會自己進行各種語法,函式的測試,然後建立test1test2...等等對同一功能進行測試的不同檔案。目前版本控制系統(VCSVersion Control System)主要可以分為:本地版本控制系統集中化版本控制系統(CVCS分散式版本控制系統(DVCS)

本地版本控制系統大多都是採用某種簡單的資料庫來記錄檔案的歷次更新差異。其中比較流行的是(RCSRevision Control System),不過本人沒有使用過,這裡就不說了。如下圖是本地版本控制系統的工作示意圖。

集中化版本控制系統CVCSCentralized Version Control System)是目前應用最廣泛的。本地版本控制系統一個最大的問題就是無法在團隊開發中使用,因為它無法協同開發者。CVCS

是同過一臺集中的伺服器來進行開發者間的協作,伺服器上儲存了版本庫中檔案的所有修訂歷史,開發者可以通過伺服器來進行程式碼的拉取和更新。最具有代表性的當屬:SvnSubversion)和CVS。目前公司內部使用的是Svn來進行程式碼的管理。集中化版本控制的優點就是剛剛所說的在團隊開發中,方便協作,每個人都可以知道專案的開發進度,且對版本的管理更加方便。但和本地版本控制一樣,CVCS也存在單點問題,一旦宕機誰也無法再拉取和更新程式碼,如果伺服器磁碟壞了,又沒有備份,就有可能導致所有版本的歷史記錄全部丟失。如下圖是CVCS工作示意圖:

為了解決CVCS的單點問題,分散式版本控制系統DVCSDistributed Version Control System

)應運而生。對於DVCS,使用者從伺服器拉取的並不是最新版本庫檔案的快照,而是整個版本庫的映象。任何一臺協同工作的伺服器down掉後,都可以通過一個映象進行恢復。此外每個客戶端都可以看做是一臺DVCS的伺服器,可以作為協同工作的server。最具代表性的是:Git如下圖為DVCS的工作示意圖:

2. svn的基本使用                                                                                                                        

因為公司目前使用svn進行程式碼的管理,所以先講一些svn的基本概念和使用。

Svn在團隊開發中主要的工作流程如下:


開發者從svn伺服器上checkout下程式碼,下面就是每天工作前update,下班後commit。常用命令操作如下:

svn checkout/co svn_address //拉取一個版本庫到本地

svn update/up  file or directory //更新最新版本到本地

svn commit/ci  file or directory //提交更改到版本庫

版本控制系統的核心任務是實現協作編輯和資料共享。對於集中式版本控制系統,在開發過程中最常發生的就是衝突問題,這是集中式帶來的必然問題,該問題的描述如下:


jackrose兩個人從版本庫中拉下來同一份檔案,然後分別修改了這個檔案,接著jack先提交了自己修改的版本A’,提交結果是成功的,然後rose提交自己修改的版本A’’,結果就會提交失敗。

Svn採用拷貝-修改-合併Copy-Modify-Merge)版本控制模型來解決這種衝突問題。這是svn版本控制的核心。遇到上述問題,當rose提交自己的版本時,svn會提示檔案A已經過期,並要求進行update,此時rose更新A,就會生產衝突,並生成如下檔案:


此時rose可以根據上述檔案,進行版本庫和工作副本的合併,如果jack修改的部分和rose的並沒有衝突,此時rose就可以將所有的修改合併到一起,然後提交。如果他們的修改有重疊的地方,那麼rosejack就要一起協商解決衝突,然後rose將合併後的提交。

3. svn的分支模型                                                                                                                    

在軟體開發過程中,對於一個成熟的產品,程式碼的管理是很重要的,當然目前我還沒有接觸到。在通過svn進行版本管理過程中,分支是一個很基本的概念,它是版本控制一個重要組成部分。

這裡要介紹svn的分支和標記。分支可以分為普通開發分支和主幹分支。在svn版本庫中我們看到最多的三個目錄就是:trunkbranchestags,這也是標準的做法,下面是svn標準建議每個部分的功能:

  • trunk:主幹分支,用於儲存相對最新比較穩定的程式碼,
  • branches:開發分支,用於新功能的開發,bug修復。分支存在的目的就是為了讓各種修改從主線上分離出來。當新開發功能穩定之後可以合併到trunk中。
  • tags:標記,用於標記一個特殊的版本,通常用來標記release版本,一般不會再允許修改。

svn中沒有用於建立分支和標記的特殊命令,而是使用便宜拷貝(類似linux中的硬連結),通過內部連結指向特定的版本樹。建立分支/標記的命令如下:

svn copy svn://XXX/trunk svn://XXX/branches/branch_1

svn copy svn://XXX/branch_1 svn://XXX/tags/tags_release_1

4. git的基本使用                                                                                                                        

Git安裝後首先需要就是進行配置:

git config --global user.name "anonymalias" //使用者名稱

git config --global user.email [email protected] // 郵箱

git config --global core.editor vim //文字編輯器

git config --global merge.tool vimdiff //差異化分析工具

使用者名稱和郵箱是必須要配置的,因為每次提交時都會引用者兩條資訊。Git有時候需要呼叫文字編輯器來讓使用者輸入一些資訊。差異分析工具在解決衝突時使用。--global設定對當前使用者所有操作生效,如果需要對特定專案進行設定,省略該選項,設定儲存在當前專案目錄的.git/config目錄下。

4.1 Git版本庫的初始化

Git庫的初始化有兩種方式:

  •  從當前目錄初始化。

git init

改命令會在當前目錄生成.git目錄,當前目錄就可以進行版本管理了。可以使用如下命令進行版本管理:

git add file.c file.h

git add README

git commit -m 'initial project version

  • 從遠端倉庫克隆

git clone https://github.com/anonymalias/test.git

這裡git使用clone命令來完成專案的拉取,和svncheckout不同。git會將遠端倉庫中的專案的所有資料都克隆到本地,和svn拉取檔案快照有很大差別

所有版本庫目錄下面的檔案都可以分為兩類:tracked(已跟蹤)和untracked(未跟蹤),在git下,tracked的檔案可以分為:未修改、已修改、已暫存。svn版本管理不同的是,git對於修改的tracked檔案,要先暫存到暫存區(staged area),然後再提交到分支中。下圖是git版本中檔案狀態轉換圖:


4.2 git常用操作命令

1.向版本庫新增跟蹤檔案

git add file

git commit -m 'initial project version

2.提交修改的檔案

1的操作是一樣的,要先通過add命令將修改暫存到暫存區,然後提交到版本庫中。

3.移除檔案

git rm file

git commit -m 'initial project version

4.版本狀態檢視

git status

5.分支的建立,切換,合併

git branch //檢視當前版本庫的所有分支,帶*的是當前分支

git branch b1 //建立新分支b1,從當前分支而來,對於git只是建立一個分支指標

git checkout b1 //切換到分支b1

git checkout -b b1 //等同於上面兩條命令,建立分支並進行切換

git merge b1 //將分支b1合併到當前分支

6.分支的推送和拉取

這裡首先要知道遠端分支(remote branch)的概念。remote分支是對遠端倉庫狀態的索引。我們通過(遠端倉庫名)/(分支名)的形式表示遠端分支。遠端分支的產生過程如下:

我們從遠端伺服器clone一個版本庫,git 會自動為我們將遠端倉庫命名為origin,並下載其中所有的資料,建立一個指向它的 master 分支的指標,在本地命名為origin/master,但我們無法在本地更改其資料。接著,git會在origin/maste分支相同的位置,建立一個本地master 分支,我們的工作都是基於本地的master分支進行的。如下圖:


當我們需要拉取遠端倉庫最新的版本時如下進行如下操作:

git fetch origin

該命令首先找到 origin 對應遠端伺服器的地址,然後更新最新的資料到本地origin版本庫,然後把 origin/master 的指標移到它最新的位置。

git pull 

pull命令相對於fetch命令的區別就是:它拉取最新的分支後,會合併到本地的分支。

下面的命令是將某個分支推送到遠端操作上。

git push (遠端倉庫名) (分支名)

未完,帶修改新增...

Created Date: 2014-06-28

Last Modified Date: 2014-06-28

Finish

相關推薦

版本控制svngit簡述

參考: 在一個團隊的工作中,掌握版本控制系統的使用是對每一個工程師最基本的要求,作為剛入職的菜鳥我來說,更是需要快速掌握的,下面就簡單記錄一下svn以及git版本控制的基礎知識。 1. 版本控制的概念                                    

版本控制SVNGIT

**版本控制是指對軟體開發過程中各種程式程式碼、配置檔案及說明文件等檔案變更的管理,是軟體配置管理的核心思想之一。專案在開發過程中要用到相應的配置管理工具對配置項(包括各個階段的產物)進行變更控制,配置管理的使用取決於專案規模和複雜性及風險的水平。軟體的規模越大

版本控制SVNGIT的一些使用感受(續)

背景:         緊接上文,從本地獨立開發者角度出發,繼續對從SVN集中式版本管理轉向GIT分散式版本管理的細節進行介紹。此次以自己具體的開發例項為基礎,給出GIT管理從整體專案SVN伺服器檢出來的本地工作副本的詳細過程。 GIT與SVN的結合:         為了

版本控制工具SVNGIT

一、為什麼會出現原始碼管理工具 為了解決在軟體開發過程中,由原始碼引發的各種不爽、繁瑣的問題, 二、不採用原始碼管理工具會出現什麼問題 1、無法後悔:做錯了一個操作後,沒有後悔藥可以吃 2、版本備份:費空間、費時間 3、版本混亂:因版本備份過多造成混亂,難以找回正確的想要的版本 4、程式碼衝突:多

版本控制SVNGIT的一些使用感受

背景:          原本在學校跟隨導師做專案的時候,就一直在使用版本管理,主要是用來記錄專案的修改,專案成員之間的溝通和交流。使用的服務端是Visual SVN,客戶端是TortoiseSVN,常用的TortoiseSVN指令也僅限於SVN Update和SVN Co

版本控制工具SvnGit

例如 ech source -s lan https git add 更改 date 首先介紹svn,屬於老牌的工具 svn ci 提交代碼 alias commit svn up 更新代碼 alias update svn st 修改的文件 alias st svn di

Git版本控制ubuntu搭建Git服務器

open sudoer nload git倉庫 詳細 測試 lan inf 解決   Git是一個開源的分布式版本控制系統,可以有效、高效的處理從很小到非常大的項目版本管理。使得開發者可以通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫,也可以將代碼提交

Android 版本控制工具SVNGIT 區別, Git使用詳情

為什麼要用版本控制工具? 多人協作開發 方便程式碼統一管理 常用的版本控制工具有哪些? CVS, SVN, GIT GIT 和 SVN 的區別 Git 是目前世界上最先進的分散式版本控制系統 SVN 是集中式的管理工具 1.版本庫是集中放在中央伺服器的,而幹活的時

版本控制svn建立版本

3.2 配置版本庫 ①為什麼要配置版本庫? Subversion是將檔案資料資訊儲存到版本庫中進行管理的,為了滿足使用者的不同需求,Subversion允許使用者對版本庫目錄進行定製。 ②在一個非

版本控制svn啟動服務

***啟動伺服器端程式*** ①SVN伺服器必須處於執行狀態才能響應客戶端請求,幫助我們管理專案檔案。所以我們必須將SVN伺服器啟動起來。啟動SVN 伺服器有兩種方法,一個是命令列方式,一個是註冊Windows服務。 ②命令列方式 [1]命令格式 主命

版本控制分散式集中式

Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分散式版本控制系統,集中式和分散式版本控制系統有什麼區別呢? 先說集中式版本控制系統,版本庫是集中存放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從中央伺服器取得最新的版本,然後開始幹活

版本控制svn命令列下檢出、提交、更新

4 使用命令列模式訪問SVN伺服器 4.1 檢出 ①首先進入自己的工作目錄,例如:D:\DevWorkSpace\SVNSpace ②執行svn checkout命令,命令格式如下 格式 svn checkout svn://SVN伺服器主機地址/

版本控制Coding.net Git

一、Git 忽略一些檔案不加入版本控制      在git中如果想忽略掉某個檔案,不讓這個檔案提交到版本庫中,可以使用修改 .gitignore 檔案的方法。這個檔案每一行儲存了一個匹配的規則例如:    (注:#此為註釋,將被 Git 忽略)*.a # 忽略所有

(3)版本控制工具SVNMyEclipse整合

1.引言       在本篇部落格主要介紹如何在Myeclipse中使用我們的SVN,首先我們需要安裝我們的SVN外掛,讓我們的軟體支援SVN,我用到的MyEclipse的版本是10,SVN的外掛下載地址為:SVN_MyEclipse下載連結

一小時精通SVN版本控制 準備工作

java svn 代碼管理 版本控制 團隊協作 為什麽使用svn:軟件系統通常由團隊協作完成,各開發人員如何協作並行開發?我們希望團隊成員可以並行開發,彼此的修改不會沖突,保留工作過程中產生的所有內容的所有版本. 什麽是svn:Subversion(SVN) 是一個開源的版本控制系統, 它

版本控制git學習

  最近學習了一下版本控制中比較符合開發者氣質的Git,這裡做一個總結。一來梳理所學的內容;二來也作為起點後續繼續豐富。學習的方式主要為網路學習和個人實踐。推薦兩個學習網頁,互相參考必有所成。   部落格園:http://www.cnblogs.com/best/archive/2017/09/07/747

Git分散式版本控制(安裝配置)

版本控制 簡介 你可以把一個版本控制系統(VCS)理解為一個“資料庫”,在需要的時候,它可以幫你完整地儲存一個專案的快照。當你需要檢視一個之前的快照(稱之為“版本”)時,版本控制系統可以顯示出當前版本與上一個版本之間的所有改動的細節。版本控制系統主要分為兩種,集中式版本控制和分散式版本控制。CVS和SVN

DRF版本控制、認證許可權元件

一、版本控制組件 1、為什麼要使用版本控制 首先我們開發專案是有多個版本的當我們專案越來越更新,版本就越來越多,我們不可能新的版本出了,以前舊的版本就不進行維護了像bootstrap有2、3、4版本的,每個版本都有它對應的url,https://v2.bootcss.com/ 、 https://v3.b

DRF版本控制、認證權限組件

object amp sed uuid int exception acc 獲取版本 版本信息 一、版本控制組件 1、為什麽要使用版本控制 首先我們開發項目是有多個版本的當我們項目越來越更新,版本就越來越多,我們不可能新的版本出了,以前舊的版本就不進行維護了像boots

svngit版本管理優缺點

1.SVN優缺點優點: 1、 管理方便,邏輯明確,符合一般人思維習慣。 2、 易於管理,集中式伺服器更能保證安全性。 3、 程式碼一致性非常高。 4、 適合開發人數不多的專案開發。 缺點: 1、 伺服器壓力太大,資料庫容量暴增。 2、 如果不能連線到伺服器上,基本上不可以工作