Git简介以及与SVN的区别
? ? ? Git是由著名Linux內核(Kernel)開發者Linus Torvalds為了便利維護Linux而開發的。
? ? ? Git是一個分布式的版本控制系統。作為一個分布式的版本控制系統,在Git中并不存在主庫這樣的概念,每一份復制出的庫都可以獨立使用,任何兩個庫之間的不一致之處都可以進行合并。
? ? ? 在windows下使用git,如果對命令不熟悉,可以使用tortoisegit. tortoisegit依賴于msysgit.
? ? ? 在git中,每個本地的代碼庫都是一個完整的git系統。使用tortoisegit提交代碼(commit),其實只是提交到本地的git版本庫。更新本地版本庫后,就可以將其推送(push)到遠程版本庫,合并到master或者其它分支。
? ? ? Github是一個網站,同時也是一個項目倉庫,能讓多名開發人員很方便地進行協同軟件開發。
? ? ? 在Windows下安裝Git步驟:
? ? ? 1. 從 http://download.tortoisegit.org/tgit/1.8.12.0/下載最新的TortoiseGit-1.8.12.0-64bit.msi;
? ? ? 2. 從 http://msysgit.github.io/ 下載Git-1.9.4-preview20140929.exe;
? ? ? 3. 先安裝Git-1.9.4-preview20140929.exe,然后再安裝TortoiseGit-1.8.12.0-64bit.msi,按默認設置即可,重啟電腦;
? ? ? 4. 鼠標右鍵-->TortoiseGit-->Settings-->General-->Version,點擊Check now,如果顯示gitversion 1.9.4.msysgit.2說明配置成功;
? ? ? 5. 如果從網上下載相關代碼,選擇Git clone, 彈出Git clone對話框,在URL中輸入地址即可,如果需要用戶名和密碼,還會彈出輸入用戶名和密碼的對話框,然后點擊OK,即可將源碼下載到本地。
? ? ? tortoisegit的一些常見用法:
? ? ? 1. Git Clone… :克隆一個項目代碼庫到本地(對應于svn的checkout);
? ? ? 2. Git Create repository here… :git在這里創建新版本,建立git項目(Init);
? ? ? 3. Git Sync… : 用于同步兩個版本庫;
? ? ? 4. TortoiseGit-->Pull : 將遠程版本庫拉到本地版本庫;
? ? ? 5. TortoiseGit-->Push: 將本地版本庫推送到遠程版本庫;
? ? ? 6. Git Commit->”master”… :提交到本地版本庫,成功后彈出對話框可以推送到遠程版本庫。
? ? ? Git和SVN之間的區別:
? ? ? 1. Git是分布式的,SVN不是,SVN是集中式:分布式模式,就是每個開發人員從中心版本庫/服務器上check out代碼后會在自己的機器上克隆一個自己的版本庫。在一個不能連接網絡的地方時,仍然能夠提交文件,查看歷史版本記錄,創建項目分支等。集中式的版本控制系統都有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協同工作的人員都通過客戶端連到這臺服務器,取出最新的文件或者提交更新。
? ? ? SVN特點:(1).每個版本庫有唯一的URL,每個用戶都從這個地址獲取代碼和數據;(2).獲取代碼的更新,也只能連接到這個唯一的版本庫,同步以取得最新數據;(3).提交必須有網絡連接(非本地版本庫);(4).提交需要授權,如果沒有寫權限,提交會失敗;(5).提交并非每次都能成功。與SVN不同,Git記錄版本歷史只關心文件數據的整體是否發生變化。Git并不保存文件內容前后變化的差異數據。在分布式版本控制系統中,客戶端并不只是提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。因為Git在本地磁盤上就保存著所有有關當前項目的歷史更新,并且Git中的絕大多數操作都只需要訪問本地文件和資源,不用連網,所以處理起來速度飛快。
? ? ? Git特點:(1).Git中每個克隆(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來創建屬于你自己的版本庫,同時你的版本庫也可以作為源提供給他人;(2).Git的每一次提取操作,實際上都是一次對代碼倉庫的完整備份;(3).提交完全在本地完成,無須別人給你授權,你的版本庫你做主,并且提交總是會成功;(4).甚至基于舊版本的改動也可以成功提交,提交會基于舊的版本創建一個新的分支;(5).Git的提交不會被打斷,合并會發生在PULL和PUSH過程中,不能自動解決的沖突會提示你手工完成;(6).Git也可以模擬集中式的工作模式。
? ? ? 2. SVN的工作區和版本庫是截然分開的,而Git的工作區和版本庫是如影隨形的:SVN的版本庫和工作區是存儲在不同的路徑下,一般是在不同的主機中。SVN的企業級部署中,版本庫在服務器上,只能通過https,http,svn等協議訪問,而不能直接被用戶接觸到。SVN的工作區是一份版本庫在某個歷史狀態下的快照。Git的版本庫和工作區在同一個目錄下,工作區的根目錄有一個.git的子目錄。這個名為.git的目錄就是版本庫本身,它是Git用來保存元數據和對象數據庫的地方。該目錄非常重要,每次克隆鏡像倉庫的時候,實際拷貝的就是這個目錄里面的數據。Git版本庫可以脫離工作區而存在,但是工作區不能脫離版本庫而存在,即工作區的根目錄下必須有一個名為.git的版本庫克隆文件。
? ? ? 3. Git把內容按元數據方式存儲,而svn是按文件:.git目錄是處于你的機器上的一個克隆版的版本庫,它擁有中心版本庫上的所有的東西,例如標簽、分支、版本記錄等。
? ? ? 4. 版本號:Git沒有一個全局的版本號,而SVN有。SVN每一次提交都具有整個版本庫全局唯一的版本號。Git的版本號則更進一步,版本號是全球唯一的。SVN的版本號是連續的版本號,每一次新的提交都會版本號+1. Git對于每一次提交,通過對文件的內容或目錄的結構計算出一個SHA-1哈希值,得到一個40位的十六進制字符串,Git將此字符串作為版本號。所有保存在Git數據庫中數據都是用此哈希值作索引的,而不是靠文件名。使用哈希值作版本號的好處就是對于一個分布式的版本控制系統,每個人每次提交后形成的版本號都不會出現重復.另一好處是保證數據的完整性,因為哈希值是根據內容或目錄結構計算出來的,所以還可以據此來判斷數據內容是否被篡改.Git的版本號雖然不連續,但是是有線索的,即每一個版本都有對應的父版本(一個或者兩個),進而可以形成一個復雜的提交鏈。
? ? ? 5. Git的內容完整性要優于SVN:Git的內容存儲使用的是SHA-1哈希算法,這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
? ? ? 6. 版本庫(repository):SVN只能有一個指定中央版本庫,當這個中央版本庫有問題時,所有工作成員都一起癱瘓直到版本庫維修完畢或者新的版本庫設立完成。而Git可以有無限個版本庫,或者每一個Git都是一個版本庫,區別是它們是否擁有活動目錄。如果主要版本庫發生了什么事,工作成員仍然可以在自己的本地版本庫提交,等待主要版本庫恢復即可。工作成員也可以提交到其它的版本庫。
? ? ? 7. 重新設立起點(rebase):在Git,如果你想把別人的最新提交設立為現在這個分支的起點,只要執行git rebase branch_name即可。這個和合并(merge)不同的是,merge會依據修改的時間視為最新,而rebase會要求你去解決雙方都有修改過的地方的矛盾(confict).
? ? ? 8. 系統檔案:SVN會在每一個目錄放一個.svn,如果想移除這些.svn是很累的(最新版本的svn只有在根目錄有.svn,子目錄沒有了)。而Git會在目錄起點擁有一個.git目錄。
? ? ? 9. Git是壓縮后傳輸,svn是一個一個文件傳輸,所以git的網絡流量比svn少很多。
? ? ? 10.?部分檢出(checkout):SVN可以將整個庫檢出到工作區,也可以將某個目錄檢出到工作區。但是Git只能全部檢出,不支持按照目錄進行的部分檢出。在SVN中,從倉庫checkout的一個工作樹,每個子目錄下都維護著自己的.svn目錄,記錄著該目錄中文件的修改情況以及和服務器端倉庫的對應關系。Git沒有部分檢出,這并不是說只有將整個庫克隆下來才能查看文件。
? ? ? 11.?更新:在SVN中,因為只有一個中心倉庫,所以所謂的遠程更新,也就是svn update,通過此命令來使工作區和版本庫保持同步。Git使用git fetch和git pull來完成遠程更新任務。fetch操作只是將遠程數據庫的object拷貝到本地,然后更新remotes head的refs,git pull的操作則是在git fetch的基礎上對當前分支外加merge操作。
? ? ? 12.?提交(commit):在SVN,當你提交你的代碼時,它將直接記錄到中央版本庫。當你發現你的代碼存在嚴重問題時,你已經無法阻止事情的發生。如果網絡中斷,你根本沒辦法提交。對于SVN來說,所有的commit操作都可以認為是對遠程倉庫的更新動作。在工作區中對文件進行添加(add)、修改、刪除(delete)操作要同步到版本庫,必須使用commit命令。而Git的提交完全屬于本地版本庫的活動。而你只需”推”(git push)到主要版本庫即可。Git的”推”其實是在執行”同步”(Sync)。在Git中,要將一個文件納入版本管理的范疇,首先是要用git add將文件納入stage(暫存區域,介于workcopy和版本庫head版本的一種中間狀態)的監控范圍,只有更新到stage中的內容才會在commit的時候被提交。Git的stage讓你在提交的時候清楚的知道git將要提交哪些改動。
? ? ? 13.?分支(branch):在SVN,分支是一個完整的目錄,且這個目錄擁有完整的實際文件。而Git,每個工作成員可以任意在自己的本地版本庫開啟無線個分支。Git的分支相當簡單,你可以從同一個工作目錄下快速的在幾個分支間切換,很容易發現未被合并的分支,能簡單而快捷的合并這些文件。Git中的分支實際上僅是一個包含所指對象校驗和(40個字符長度SHA-1哈希值)的文件,新建一個分支就是向一個文件寫入41個字節(版本號加一個換行符),自然速度很快。Git的實現與項目負責度無關,它永遠可以在幾毫秒的時間內完成分支的創建和切換。Git的分支是完全隔離的,而SVN則沒有。Git的里程碑是只讀的,Git完全遵守歷史不可更改這一時空法則。用戶不能向git的里程碑中提交,否則里程碑就不是標記,而成了一個分支。SVN中提供了一個功能switch,使用switch可以在同一個工作樹上,在不同的分支中進行切換。Git在分支中進行切換使用的命令是checkout.
? ? ? 14.?優缺點:
? ? ? SVN優點:(1)、管理方便、邏輯明確,符號一般人思維習慣;(2)、易于管理,集中式服務器更能保證安全性;(3)、代碼一致性非常高;(4)、適合開發人數不多的項目開發。
? ? ? SVN缺點:(1)、服務器壓力太大,數據庫容量暴增;(2)、如果不能連接到服務器上,基本上不可以工作,就不能提交、還原、對比等等;(3)、不適合開源開發,但是一般集中式管理的有非常明確的權限管理機制,可以實現分層管理,從而很好的解決開發人數眾多的問題。
? ? ? Git優點:(1)、適合分布式開發,強調個體;(2)、公共服務器壓力和數據量都不會太大;(3)、速度快、靈活;(4)、任意兩個開發者之間可以很容易的解決沖突;(5)、離線工作。
? ? ? Git缺點:(1)、學習周期相對而言比較長;(2)、不符合常規思維;(3)、代碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有代碼和版本信息。
? ? ? 參考文獻:百度文庫
總結
以上是生活随笔為你收集整理的Git简介以及与SVN的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像相似度计算之哈希值方法OpenCV实
- 下一篇: 图像相似度计算之直方图方法OpenCV实