首頁  >  文章  >  開發工具  >  git和svn是什麼

git和svn是什麼

青灯夜游
青灯夜游原創
2021-11-30 14:09:445662瀏覽

Git是一款開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。 svn是一款開源的集中式版本控制系統,用於多個人共同開發同一個項目,實現共享資源,實現最終集中式的管理。

git和svn是什麼

本教學操作環境:Windows7系統、Git2.30.0版、Dell G3電腦。

git是什麼

Git是一款免費、開源的分散式版本控制系統,用於敏捷且有效率地處理任何或小或大的專案

Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。 Git 是 Linus Torvalds 為了協助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。

分散式相比於集中式的最大差異在於開發者可以提交到本地,每個開發者透過複製(git clone),在本地機器上拷貝一個完整的Git倉庫。

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

2 (1).png

#Git有下列特點:

  • #Git中每個克隆(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來創建屬於你自己的版本庫,同時你的版本庫也可以作為來源提供給他人,只要你願意。

  • Git的每一次提取操作,其實都是一次程式碼倉庫的完整備份。

  • 提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。

  • 甚至基於舊版的變更也可以成功提交,提交會基於舊的版本建立一個新的分支。

  • Git的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,無法自動解決的衝突會提示您手動完成。

  • 衝突解決不再像是SVN一樣的提交競賽,而是在需要的時候才進行合併和衝突解決。

  • Git 也可以模擬集中式的工作模式

  • #Git版本庫統一放在伺服器中

  • 可以授權Git 版本庫:誰能建立版本庫,誰能向版本庫PUSH,誰能讀取(複製)版本庫

  • 團隊的成員先將伺服器的版本庫克隆到本地;並經常的從伺服器的版本庫拉(PULL)最新的更新;

  • 團隊的成員將自己的改動推(PUSH)到伺服器的版本庫中,當其他人和版本庫同步(PULL)時,會自動取得改變

  • Git 的集中式工作模式非常靈活

  • 你完全可以在脫離Git伺服器所在網路的情況下,如行動辦公室/出差時,照常使用程式碼庫

  • 你只需要在能夠存取Git伺服器所在網路時,PULL和PUSH即可完成和伺服器同步以及提交

  • Git提供rebase 指令,可以讓你的改動看起來是基於最新的程式碼實現的變更

  • #Git 有更多的工作模式可以選擇,遠非Subversion可比

svn是什麼


1 (1).png

  • #SVN是subversion的縮寫,是一個開放原始碼的版本控制系統,透過採用分支管理系統的高效管理,簡而言之就是用於多個人共同開發同一個項目,實現共享資源,實現最終集中式的管理。
  • SVN管理著隨時間改變的資料。這些資料放置在一個中央資料檔案庫(repository)中。這個檔案庫很像一個普通的文件伺服器,不過它會記住每一次文件的變動。這樣你就可以把檔案恢復到舊的版本,或是瀏覽文件的變動歷史。 Subversion是一個通用的系統,可用於管理任何類型的文件,其中包括了程式原始碼。

  • SVN 屬於 集中式版本控制系統。

    ###集中式的版本控制系統都有一個單一的集中管理的伺服器,保存所有檔案的修訂版本,而協同工作的人們都透過客戶端連到這台伺服器,取出最新的文件或提交更新。 ###############svn的特點概括起來主要由以下幾條:############ 每個版本庫都有唯一的URL(官方地址) ,每個使用者都從這個位址取得程式碼和資料;############ 取得程式碼的更新,也只能連接到這個唯一的版本庫,同步以取得最新資料;### ######### 提交必須有網路連線(非本機版本庫);###
  •  提交需要授權,如果沒有寫入權限,提交會失敗;

  • # 提交並非每次都能夠成功。如果有其他人先於你提交,會提示「改動基於過時的版本,先更新再提交」… 諸如此類;

  •  衝突解決是一個提交速度的競賽:手快者,先提交,平安無事;手慢者,後提交,可能遇到麻煩的衝突解決。

好處:每個人都可以在某種程度上看到專案中的其他人正在做些什麼。而管理者也可以輕鬆掌控每個開發者的權限。

缺點:中央伺服器的單點故障。

若是宕機一小時,那麼在這一小時內,誰都無法提交更新、還原、對比等,也就無法協同工作。如果中央伺服器的磁碟發生故障,而且沒做過備份或備份得不夠及時的話,還會有遺失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,被客戶端提取出來的某些快照資料除外,但這樣的話依然是個問題,你不能保證所有的資料都已經有人提取出來。

svn原理上只關心文件內容的具體差異。每次記錄有哪些文件作了更新,以及都更新了哪些行的什麼內容。

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下做同樣的事情,不會遺失任何細節。

  • 局部更新,局部還原。

    SVN由於是在每個資料夾建立一個.svn資料夾來實現管理,所以可以很簡單實現局部更新或還原。假如你只希望更新某些部分,svn可以很好實現。同時程式碼寫錯了,同時可以很好實現局部還原,當然git也可以透過歷史版本還原,但是無法簡單地實現局部還原。

推薦學習:《Git教學

以上是git和svn是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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