1. 程式人生 > >版本控制的基本原理

版本控制的基本原理

什麼是版本控制?我真的需要嗎?版本控制是一種記錄若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。在本書所展示的例子中,我們僅對儲存著軟體原始碼的文字檔案作版本控制管理,但實際上,你可以對任何型別的檔案進行版本控制。

如果你是點陣圖形或網頁設計師,可能會需要儲存某一幅圖片或頁面佈局檔案的所有修訂版本(這或許是你非常渴望擁有的功能)。採用版本控制系統 (VCS)是個明智的選擇。有了它你就可以將某個檔案回溯到之前的狀態,甚至將整個專案都回退到過去某個時間點的狀態。你可以比較檔案的變化細節,查出最 後是誰修改了哪個地方,從而導致出現怪異問題,又是誰在何時報告了某個功能缺陷等等。使用版本控制系統通常還意味著,就算你亂來一氣把整個專案中的檔案改 的改刪的刪,你也照樣可以輕鬆恢復到原先的樣子。但額外增加的工作量卻微乎其微。

本地版本控制系統

許多人習慣用複製整個專案目錄的方式來儲存不同的版本,或許還會改名加上備份時間以示區別。這麼做唯一的好處就是簡單。不過壞處也不少:有時候會混淆所在的工作目錄,一旦弄錯檔案丟了資料就沒法撤銷恢復。

為了解決這個問題,人們很久以前就開發了許多種本地版本控制系統,大多都是採用某種簡單的資料庫來記錄檔案的歷次更新差異(見圖 1-1)。

Git詳解之一 Git起步

圖 1-1. 本地版本控制系統

其中最流行的一種叫做 rcs,現今許多計算機系統上都還看得到它的蹤影。甚至在流行的 Mac OS X 系統上安裝了開發者工具包之後,也可以使用 rcs 命令。它的工作原理基本上就是儲存並管理檔案補丁(patch)。檔案補丁是一種特定格式的文字檔案,記錄著對應檔案修訂前後的內容變化。所以,根據每次 修訂後的補丁,rcs 可以通過不斷打補丁,計算出各個版本的檔案內容。

集中化的版本控制系統

接下來人們又遇到一個問題,如何讓在不同系統上的開發者協同工作?於是,集中化的版本控制系統( Centralized Version Control Systems,簡稱 CVCS )應運而生。這類系統,諸如 CVS,Subversion 以及 Perforce 等,都有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這臺伺服器,取出最新的檔案或者提交更新。多年以來,這 已成為版本控制系統的標準做法(見圖 1-2)。

Git詳解之一 Git起步

圖 1-2. 集中化的版本控制系統

這種做法帶來了許多好處,特別是相較於老式的本地 VCS 來說。現在,每個人都可以在一定程度上看到專案中的其他人正在做些什麼。而管理員也可以輕鬆掌控每個開發者的許可權,並且管理一個 CVCS 要遠比在各個客戶端上維護本地資料庫來得輕鬆容易。

事分兩面,有好有壞。這麼做最顯而易見的缺點是中央伺服器的單點故障。如果宕機一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作。要 是中央伺服器的磁碟發生故障,碰巧沒做備份,或者備份不夠及時,就還是會有丟失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,而被客戶端 提取出來的某些快照資料除外,但這樣的話依然是個問題,你不能保證所有的資料都已經有人事先完整提取出來過。本地版本控制系統也存在類似問題,只要整個項 目的歷史記錄被儲存在單一位置,就有丟失所有歷史更新記錄的風險。

分散式版本控制系統

於是分散式版本控制系統( Distributed Version Control System,簡稱 DVCS )面世了。在這類系統中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客戶端並不只提取最新版本的檔案快照,而是把原始的程式碼倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個鏡 像出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對程式碼倉庫的完整備份(見圖 1-3)。

Git詳解之一 Git起步

圖 1-3. 分散式版本控制系統

更進一步,許多這類系統都可以指定和若干不同的遠端程式碼倉庫進行互動。籍此,你就可以在同一個專案中,分別和不同工作小組的人相互協作。你可以根據需要設定不同的協作流程,比如層次模型式的工作流,而這在以前的集中式系統中是無法實現的。

相關推薦

版本控制基本原理

什麼是版本控制?我真的需要嗎?版本控制是一種記錄若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。在本書所展示的例子中,我們僅對儲存著軟體原始碼的文字檔案作版本控制管理,但實際上,你可以對任何型別的檔案進行版本控制。 如果你是點陣圖形或網頁設計師,可能會需要儲存某一

示波器基本原理之六:示波器的基本控制

定時 style tle image height ron 選擇 尺度 基本原理 [整理自Keysight官網資料]當今市場上的許多示波器都具有各自控制方法,包括使用前面板、觸摸屏或軟鍵。在大部分示波器上所發現的基本控制包括:水平控制:示波器的水平控制通常聚集在標有水平的前

docker基本原理與docker 網路 記憶體 cpu資源控制 與 目錄掛載

說 docker之前,有必要知道 LUX的基本概念 說LUX之前,首先要知道兩個概念,一個是cgroups,一個是namespace。          cgroups 是用於資源的限制與資源的使用監控,cgroups能夠為程序分配資源,使l

SVN版本控制工具詳解,基本操作,使用

一、什麼是SVN SVN是Subversion的簡稱,是一個開放原始碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。 二、SVN的下載安裝 下載地址:https://tortoisesvn.net/downloads.zh.html 安裝完不

版本控制工具Git的基本使用

學無止境,精益求精! 十年河東,十年河西,莫欺少年窮! 學歷代表你的過去,能力代表你的現在,學習代表你的將來! 本篇部落格是轉發的別人的,原文地址:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

docker基本原理與docker 網路 記憶體 cpu資源控制

說 docker之前,有必要知道 LUX的基本概念 說LUX之前,首先要知道兩個概念,一個是cgroups,一個是namespace。          cgroups 是用於資源的限制與資源的使用監控,cgroups能夠為程序分配資源,使linux的資源不再是全域性性的

控制反轉容器之(容器和bean的基本原理

前言:控制反轉和依賴注入 控制反轉是什麼?是一種設計思想。 控制:IOC容器控制物件,控制外部資源。 反轉:是相對於正轉而言的,正轉就是我們主動去建立物件,而反轉則是我們通過IOC容器被動的建立物件,物件的建立和銷燬都是有IOC容器來控制。相當於控制權不同,之前控制權在

Linux許可權控制基本原理

本文主要介紹 Linux 系統中,許可權控制的基本原理。 安全模型 在 Linux 系統中,我們所有的操作實質都是在進行程序訪問檔案的操作。我們訪問檔案需要先取得相應的訪問許可權,而訪問許可權是通過 Linux 系統中的安全模型獲得的。 對於 Linux 系統中的安全模型,我們需要知道下面兩點:

動態範圍控制演算法基本原理

動態範圍控制可以自動調整訊號的動態範圍;(訊號的動態範圍是訊號的最大幅值與最小幅值比值的對數,使用dB作為單位) 動態範圍控制可以做的事情 根據環境匹配音訊訊號電平;也就是杜比volume leveler的作用; 保護ADC使其不會過載;在廣播訊號傳送時,傳送器有峰值限制,超過這

【web前端自動化工作環境配置】6. 版本控制工具git與githup的區別與聯絡以及git的基本用法

  最近專案裡面在用Git提交程式碼,剛開始的時候對這個工具也不是很瞭解,業餘時間抽空就學習了一下。Git是一個原始碼管理工具,便於大家協同開發,在一個專案中,凡是由開發人員編寫的程式碼都是原始碼,都需要被管理起來,讓原始碼容易被追溯,主要記錄每次變更了什麼,誰主導了這次的變

Git版本控制系統之基本使用

     最早是通過接觸著名的開源社群Github瞭解到Git的,但一直沒有系統學習過。這次下定決心從頭到尾系統的學一學,也將學習過程記錄於此,供大家批駁。本篇文章先從以下幾個方面簡單瞭解一下Git: Git的簡介以及Git與GitHub的關係 Git的下載

貝葉斯算法的基本原理和算法實現

utf shape less 流程 我們 def .sh 詞向量 貝葉斯算法 一. 貝葉斯公式推導   樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素是因為其思想基礎的簡單性:就文本分類而言,它認為詞袋中的兩兩詞之間的關系是相互獨立的,即一個對象 的特征向量

基於GitLab與Git Extensions搭建版本控制工具

基本 cmd img html nat 需求 無法 spa hang 1.背景   大家知道GitHub是現在非常流行的代碼托管工具,但是如果有些項目不想開源的話,則需要付費,因此萌生了自己搭建一個Git的版本控制工具,供內網使用。GitLab則是個好的選擇,但是GitL

git 對 Microsoft Word 進行版本控制

dcl code 版本控制系統 documents custom ec2 adobe pen you   昨天中國高校發生了一件駭人聽聞的事情,聽說不少高校的校園網用戶連接校園網被勒索病毒給黑了,重要文件全部被加密,必須要支付贖金才能解密,具體新聞可以參見:http://w

如何選擇版本控制系統之二---Git的研發應用場

nal fix idt max-width 設計理念 ted 過程 style ria 之前寫了一篇《如何選擇版本控制系統 ---為什麽選擇Git版本控制系統》,地址是:http://www.cnblogs.com/goldenfish/p/6876864.html,有興趣

如何選擇版本控制系統之二---Git的研發應用場景

版本控制系統 git 華為軟件開發雲 之前寫了一篇《如何選擇版本控制系統 ---為什麽選擇Git版本控制系統》,地址是:http://laoyudage.blog.51cto.com/12854334/1927409,有興趣的可以去看看,本篇文章算是這個系列的第二篇文章。Git誕生於2002年,由

SVN版本控制系統搭建(結合http服務)

start class read 上傳 net 腳本 tab hooks 文件內容 .zise { background: #CCCCFF; color: white; text-align: center } .fense { color: #FFCCCC; text-a

VSS+SourceAnywhere for VSS搭建版本控制系統教程

anywhere 新的 實現 -1 不同 soft 建立 小寫 連接數據庫 VSS:Microsoft Visual Source Safe,本教程使用VSS2005(好像2005就是官方更新的最後一版了)。 SourceAnywhere for VSS:分為服務端和客戶端

JAVA語言開發基本原理

源文件 cli lips font 實現 環境 java字節碼 類庫 java開發工具 1.java編譯運行過程   java源文件(.java)經過編譯,編譯為java字節碼文件(.class),JVM來加載.class文件並運行.class文件。 2.JVM   不同系

Git版本控制

官網 新建 not one push commit git clone hub 添加 1.Git基礎命令的使用 git status:檢查當前文件的狀態。 如果當前沒有任何跟蹤文件,也沒有任何文件在上次提交後更新過,總的 來說就是沒有可提交的文件的時候,