搜尋
首頁開發工具Gitgit和svn有哪些差別
git和svn有哪些差別Nov 26, 2021 pm 03:27 PM
gitsvn

區別: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有以下功能:

  1. 從伺服器上複製完整的Git倉庫(包括程式碼和版本資訊)到單機上。
  2. 在自己的機器上根據不同的開發目的,建立分支,修改程式碼。
  3. 在單機上自己建立的分支上提交程式碼。
  4. 在單機上合併分支。
  5. 把伺服器上最新版的程式碼fetch下來,然後跟自己的主分支合併。
  6. 產生補丁(patch),把補丁傳送給主開發者。
  7. 看主開發者的回饋,如果主開發者發現兩個一般開發者之間有衝突(他們之間可以合作解決的衝突),就會要求他們先解決衝突,然後再由其中一個人提交。如果主開發者可以自己解決,或沒有衝突,就通過。
  8. 一般開發者之間解決衝突的方法,開發者之間可以使用pull 指令解決衝突,解決完衝突後再向主開發者提交補丁。

主開發者的角度(假設主開發者不用開發程式碼)看,git有以下功能:

  1. 查看郵件或透過其它方式查看一般開發者的提交狀態。

  2. 打上補丁,解決衝突(可以自己解決,也可以要求開發者之間解決以後再重新提交,如果是開源項目,還要決定哪些補丁有用,哪些不用) 。

  3. 向公用伺服器提交結果,然後通知所有開發人員。

Git屬於分散式的版本控制系統

自2005年誕生以來,Git日臻成熟完善,在高度易用的同時,仍保留著初期設定的目標。它的速度飛快,極為適合管理大項目,它還有著令人難以置信的非線性分支管理系統,可以應付各種複雜的專案開發需求。

與SVN不同,Git記錄版本歷史只關心檔案資料的整體是否有改變。 Git並未保存文件內容前後變化的差異資料。實際上,Git更像是把變化的檔案作快照後,記錄在一個微型的檔案系統中。每次提交更新時,它會縱覽一遍所有文件的指紋資訊並對文件作一快照,然後保存一個指向這次快照的索引。為提高效能,若檔案沒有變化,Git不會再儲存,而只對上次儲存的快照作一連接。

Git特點

  1. Git中每個複製(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來創建屬於你自己的版本庫,同時你的版本庫也可以作為來源提供給他人,只要你願意。
  2. Git的每一次提取操作,其實都是一次程式碼倉庫的完整備份。提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。
  3. 甚至基於舊版的改動也可以成功提交,提交會基於舊的版本建立一個新的分支。
  4. Git的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,不能自動解決的衝突會提示您手工完成。
  5. 衝突解決不再像是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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
github是什么github是什么Mar 24, 2023 pm 05:46 PM

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

git中push -u是什么意思git中push -u是什么意思Jul 01, 2022 am 10:36 AM

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

git的pack文件有什么用git的pack文件有什么用Jun 30, 2022 pm 05:41 PM

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

如何在GitLab上进行第一次登录并更改密码如何在GitLab上进行第一次登录并更改密码Mar 24, 2023 pm 05:46 PM

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

git中pull失败了怎么办git中pull失败了怎么办Jun 30, 2022 pm 04:47 PM

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

git分支能改名字吗git分支能改名字吗Jun 16, 2022 pm 05:55 PM

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

用三行代码使你的git提交记录变干净用三行代码使你的git提交记录变干净Feb 28, 2023 pm 04:19 PM

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

git怎么删除某个分支git怎么删除某个分支Jun 24, 2022 am 11:11 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

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

MantisBT

MantisBT

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

mPDF

mPDF

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

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版