區別:1、SVN是集中化的版本控制系統,而Git是分散式版本控制系統;2、SVN是按照原始檔案儲存的,體積較大,而Git是按照元資料方式存儲的,體積很小;3、Git的分支操作不會影響其他開發人員,而SVN會影響。
本教學操作環境:Windows7系統、Git2.30.0版、Dell G3電腦。
svn與git簡介
SVN(集中式版本控制系統)
SVN是Subversion的簡稱,是一個開放原始碼的版本控制系統,支援大多數常見的作業系統。作為一個開源的版本控制系統,Subversion管理著隨時間改變的資料。這些資料放置在一個中央資料檔案庫(repository)中。這個檔案庫很像一個普通的文件伺服器,不過它會記住每一次文件的變動。這樣你就可以把檔案恢復到舊的版本,或是瀏覽文件的變動歷史。 Subversion是一個通用的系統,可用於管理任何類型的文件,其中包括了程式原始碼。
工作流程
集中式管理的工作流程如下圖:
集中式程式碼管理的核心是伺服器,所有開發者在開始新一天的工作之前必須從伺服器取得程式碼,然後開發,最後解決衝突,提交。所有的版本資訊都放在伺服器上。如果脫離了伺服器,開發者基本上可以說是無法工作的。以下舉例說明:
開始新一天的工作:
從伺服器下載專案組最新程式碼。
進入自己的分支,進行工作,每隔一個小時向伺服器自己的分支提交一次程式碼(很多人都有這個習慣。因為有時候自己對程式碼改來改去,最後又想還原到前一個小時的版本,或是看看前一個小時自己修改了哪些程式碼,就需要這樣做了)。
下班時間快到了,把自己的分支合併到伺服器主分支上,一天的工作完成,並反映給伺服器。
SVN屬於集中化的版本控制系統
這種做法帶來了許多好處,特別是相較於老式的本地VCS來說。現在,每個人都可以在某種程度上看到專案中的其他人正在做些什麼。而管理者也可以輕鬆掌控每個開發者的權限。
事分兩面,有好有壞。這麼做最顯而易見的缺點就是中央伺服器的單點故障。若是宕機一小時,那麼在這一小時內,誰都無法提交更新、還原、對比等,也就無法協同工作。如果中央伺服器的磁碟發生故障,而且沒做過備份或備份得不夠及時的話,還會有遺失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,被客戶端提取出來的某些快照資料除外,但這樣的話依然是個問題,你不能保證所有的資料都已經有人提取出來。
Subversion原理上只關心文件內容的具體差異。每次記錄有哪些文件作了更新,以及都更新了哪些行的什麼內容。
Subversion的特點
每個版本庫有唯一的URL(官方地址),每個使用者都從這個地址取得程式碼和資料;
取得程式碼的更新,也只能連接到這個唯一的版本庫,同步以獲得最新資料;
提交必須有網路連線(非本地版本庫);
提交需要授權,如果沒有寫權限,提交會失敗;
提交並非每次都能夠成功。如果有其他人先於你提交,會提示「改動基於過時的版本,先更新再提交」… 諸如此類;
衝突解決是一個提交速度的競賽:手快者,先提交,平安無事;手慢者,後提交,可能遇到麻煩的衝突解決。
GIT(分散式版本控制系統)
Git是一款免費、開源的分散式版本控制系統,用於敏捷且有效率地處理任何或小型或大的專案
Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。 Git 是 Linus Torvalds 為了協助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。
分佈式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫.
工作流程
下圖是經典的git開發過程。
Git的功能特性
從一般開發者的角度來看,git有以下功能:
- 從伺服器上複製完整的Git倉庫(包括程式碼和版本資訊)到單機上。
- 在自己的機器上根據不同的開發目的,建立分支,修改程式碼。
- 在單機上自己建立的分支上提交程式碼。
- 在單機上合併分支。
- 把伺服器上最新版的程式碼fetch下來,然後跟自己的主分支合併。
- 產生補丁(patch),把補丁傳送給主開發者。
- 看主開發者的回饋,如果主開發者發現兩個一般開發者之間有衝突(他們之間可以合作解決的衝突),就會要求他們先解決衝突,然後再由其中一個人提交。如果主開發者可以自己解決,或沒有衝突,就通過。
- 一般開發者之間解決衝突的方法,開發者之間可以使用pull 指令解決衝突,解決完衝突後再向主開發者提交補丁。
從主開發者的角度(假設主開發者不用開發程式碼)看,git有以下功能:
查看郵件或透過其它方式查看一般開發者的提交狀態。
打上補丁,解決衝突(可以自己解決,也可以要求開發者之間解決以後再重新提交,如果是開源項目,還要決定哪些補丁有用,哪些不用) 。
向公用伺服器提交結果,然後通知所有開發人員。
Git屬於分散式的版本控制系統
自2005年誕生以來,Git日臻成熟完善,在高度易用的同時,仍保留著初期設定的目標。它的速度飛快,極為適合管理大項目,它還有著令人難以置信的非線性分支管理系統,可以應付各種複雜的專案開發需求。
與SVN不同,Git記錄版本歷史只關心檔案資料的整體是否有改變。 Git並未保存文件內容前後變化的差異資料。實際上,Git更像是把變化的檔案作快照後,記錄在一個微型的檔案系統中。每次提交更新時,它會縱覽一遍所有文件的指紋資訊並對文件作一快照,然後保存一個指向這次快照的索引。為提高效能,若檔案沒有變化,Git不會再儲存,而只對上次儲存的快照作一連接。
Git特點
- Git中每個複製(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來創建屬於你自己的版本庫,同時你的版本庫也可以作為來源提供給他人,只要你願意。
- Git的每一次提取操作,其實都是一次程式碼倉庫的完整備份。提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。
- 甚至基於舊版的改動也可以成功提交,提交會基於舊的版本建立一個新的分支。
- Git的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,不能自動解決的衝突會提示您手工完成。
- 衝突解決不再像是SVN一樣的提交競賽,而是在需要的時候才進行合併和衝突解決。
svn和git的區別
-
SVN屬於集中化的版本控制系統,有一個不太精確的比喻:SVN = 版本控制備份伺服器SVN使用起來有點像是檔案倉庫的感覺,支援平行讀寫文件,支援程式碼的版本化管理,功能包括取出、匯入、更新、分支、改名、還原、合併等。
Git是一個分散式版本控制系統,操作指令包括:clone,pull,push,branch ,merge ,push,rebase,Git擅長的是程式碼的版本化管理。
-
GIT跟SVN一樣有自己的集中式版本庫或伺服器。但,GIT更傾向於被使用於分散式模式,也就是每個開發人員從中心版本庫/伺服器上chect out程式碼後會在自己的機器上複製一個自己的版本庫。
可以這樣說,如果你被困在一個不能連接網路的地方時,就像在飛機上,地下室,電梯裡等,你仍然能夠提交文件,查看歷史版本記錄,創建專案分支,等。對某些人來說,這好像沒多大用處,但當你突然遇到沒有網路的環境時,這個將解決你的大麻煩。
-
而Git按照元資料方式存儲,體積很小;SVN依照原始檔案存儲,體積較大。
GIT把內容按元資料方式存儲,而SVN是按文件所有的資源控制系統都是把文件的元資訊隱藏在一個類似.svn,.cvs等的資料夾裡。
如果你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。因為,.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標籤,分支,版本記錄等。
-
分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。如果你想知道是否合併了一個分支,你需要手動執行像這樣的指令svn propget svn:mergeinfo,來確認程式碼是否被合併。
然而,處理GIT的分支卻是相當的簡單有趣。你可以從同一個工作目錄下快速的在幾個分支間切換。你很容易發現未合併的分支,你能簡單而快速的合併這些文件。
GIT沒有一個全域的版本號,而SVN有目前為止這是跟SVN相比GIT缺少的最大的一個特徵。你也知道,SVN的版本號碼實際上是任何一個對應時間的原始碼快照。我認為它是從CVS進化到SVN的最大的突破。因為GIT和SVN從概念上就不同,我不知道GIT裡是什麼特徵與之對應。如果你有任何的線索,請在留言裡奉獻出來與大家分享。
GIT的內容完整性要優於SVN:GIT的內容儲存所使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。
-
分支操作的影響
Git的分支操作不會影響其他開發人員;而SVN會影響,創建新的分支則所有的人都會擁有和你一樣的分支。
svn和git的優缺點
SVN 的優缺點
SVN對中文支援好,操作簡單,使用沒有難度,美工人員,產品人員,測試人員,實施人員都可輕鬆上手。使用介面統一,功能完善,操作方便。
Git的優缺點
對程式原始碼進行差異化的版本管理,程式碼庫佔極少的空間。易於程式碼的分支化管理。不支援中文,圖形介面支援差,使用難度高。不易推廣。
svn和git適用範圍的不同
適用物件不同。 Git適用於參與開源專案的開發者。他們由於水平高,更在乎的是效率而不是易用性。 SVN則不同,它適合普通的公司開發團隊。使用起來更加容易。
使用的場合不同。 Git適用於透過Internet,有多個開發角色的單一專案開發,SVN適合企業內部由專案經理統一協調的多個平行專案的開發。
權限管理策略不同。 Git沒有嚴格的權限管理控制,只要有帳號,就可以匯出、匯入程式碼,甚至執行回退操作。 SVN則有嚴格的權限管理,可以依群組、按個人進行針對某個子目錄的權限控制。區分讀取、寫入權限。更嚴格的,不支援回退操作。保證代碼永遠可以追蹤。
分支(branch)的使用範圍不一樣。在Git中,你只能針對整個倉庫作branch,而且一旦刪除,便無法恢復。而SVN中,branch可以針對任何子目錄,它本質上就是一個拷貝操作。所以,可以建立非常多、層次性的branch,並且,在不需要時將其刪除,而以後需要時只要checkout老的SVN版本就可以了。
基於第三點,Git適用於單純的軟體項目,典型的就是一些開源項目,例如Linux核心、busybox等。相反,SVN擅長多專案管理。例如,你可以在一個SVN倉庫中存放一個手機專案的bsp/設計文件/檔案系統/應用程式/自動化編譯腳本,或是在一個SVN中存放5款手機項目的檔案系統。 git中必須建立n(項目數)*m(元件數)個倉庫。 SVN中只需要最多n或m個就可以了。
Git使用128位元ID作為版本號碼,而且checkout時要註明是哪個branch,而SVN使用一個遞增的序號作為全域唯一的版本號,更加簡明易懂。雖然可以使用gittag來建立一些文字化的別名,但畢竟那隻是針對特殊版本。
可追蹤性,git的典型開發過程為:建立分支,進行開發,提交到本機master,刪除分支。這樣做的後果是以前的修改細節會遺失。而在SVN下做同樣的事情,不會失去任何細節。這裡是一個有趣的鏈接,表明了git下典型的工作方式:(以master為核心,不斷創建新branch,刪除舊branch)
局部更新,局部還原。 SVN由於是在每個資料夾建立一個.svn資料夾來實現管理,所以可以很簡單實現局部更新或還原。假如你只希望更新某些部分,svn可以很好實現。同時程式碼寫錯了,同時可以很好實現局部還原,當然git也可以透過歷史版本還原,但是無法簡單地實現局部還原。
SVN 和 Git 哪個比較適用於專案管理?
首先說一下,我是一個研發團隊的專案經理,SVN和Git我都用過,SVN比較適用於專案管理, Git只適用於程式碼管理。
一個研發隊伍的成員正常包括:需求分析、設計、美工、程式設計師、測試、實作、維,每個成員在工作中都有產出物, 包括了文件、設計程式碼、程式碼,這些都需要按專案集中進行管理的。 SVN能清楚的依目錄進行分類管理, 使專案組的管理處於有序且有效率的狀態。
推薦學習:《Git教學》
以上是git和svn有哪些差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

GitHub是一个面向开源及私有软件项目的托管平台,可以让开发者们在这里托管自己的代码,并进行版本控制。GitHub主打的是开源项目与协作,通过这个平台上的开源项目,开发者们可以查看其他开发者的项目源代码,并进行交流和学习。

在git中,“push -u”的意思是将本地的分支版本上传到远程合并,并且记录push到远程分支的默认值;当添加“-u”参数时,表示下次继续push的这个远端分支的时候推送命令就可以简写成“git push”。

在git中,pack文件可以有效的使用磁盘缓存,并且为常用命令读取最近引用的对象提供访问模式;git会将多个指定的对象打包成一个成为包文件(packfile)的二进制文件,用于节省空间和提高效率。

GitLab是一种基于Web的Git版本控制库管理软件,旨在帮助开发团队更好地协同工作,提高工作效率。当您第一次登录GitLab时,系统会提示您要更改初始密码以确保账户安全。本文将为大家介绍如何在GitLab上进行第一次登录并更改密码。

git中pull失败的解决方法:1、利用“git reset --hard”强制覆盖掉自己的本地修改;2、利用“git stash”推送一个新的储藏,拉取之后利用“git stash pop”将修改保存到暂存区;3、若依然出现问题,则将文件保存到暂存区并提交注释即可。

git分支能改名字。改名方法:1、利用git中的branch命令修改本地分支的名称,语法为“git branch -m 旧名字 新名字”;2、利用“git push origin 新名字”命令,在删除远程分支之后将改名后的本地分支推送到远程;3、利用IDEA直接操作修改分支名称即可。

本篇文章给大家带来了关于git的相关知识,其中主要跟大家聊一聊怎么让你的git记录保持整洁,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

git删除某个分支的方法:1、利用“git branch --delete dev”命令删除本地分支;2、利用“git push origin --delete branch”命令删除远程分支;3、利用“git branch --delete --remotes”命令删除追踪分支。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版