-
1 # 北航秦曾昌
-
2 # EmacserVimer
歷史總是驚人的相似,Git版本控制系統其實是一個業餘專案,因為找不到好的已有的好的解決方案,林納斯為了Linux kernel專案也就是Linux的核心專案程式碼能夠管理起來方便,就開發了Git版本管理系統,只是沒有想到,會受到這麼多人的喜歡,以Git為基礎,甚至誕生了Github、Gitlab這樣的獨角獸級別的科技公司。
這樣的故事是不是好像似曾相識?當年高德納老爺子,寫TAOCP(計算機界的相對論,與相對論等並評為二十世紀最偉大的科學專著之一,老爺子就憑這本書拿了圖靈獎)的時候,發現市面上的排版系統亂糟糟的,完全影響了自己的這部藝術科學著作的創作,於是他立志要自己寫一個排版系統,也就是大名鼎鼎的Tex電子排版系統。
言歸正傳,為什麼Git能夠火?Git因為是分散式版本控制系統,這讓Git相對於SVN有了很多優勢,SVN中心伺服器掛掉,就麻煩了。
Git效率更高,可以節省很多時間。
Git可以很好的離線工作,SVN和CVS這些集中式版本管理系統,如果連線不上中央伺服器,那麼工作起來就很麻煩。隨時隨地工作Git不會給你做任何的限制,提交、檢視歷史、建立分支等工作你完全可以在本地完成。
可靠性高,撤銷起來方便。你幾乎不用擔心會出問題,而且理論上Git從不會真正刪除程式碼,每一個團隊成員在本地都有一個完整的專案備份,團隊成員都克隆了整個專案在他們的本地計算機。而且Git都是增量操作,也就是說幾乎所有的Git操作都是資料新增,而不會刪除,所以你不用擔心資料丟失或者倉庫損壞。而且幾乎所有情況下,你都能撤銷幾乎所有的操作。
更少的“倉庫汙染”,Git對於每個工程只會產生一個.git目錄,這個工程所有的版本控制資訊都在這個目錄中,不會像SVN在每個目錄下都會產生.svn目錄。這樣可以說極大的減少了程式碼倉庫的汙染。
經過這麼多年的發展,Git已經是最受歡迎的版本系統了,幾乎現在所有的知名開源專案都在向Git靠攏,Debian,Linux kernel,Ruby On Rails等知名開源專案都構建在Git上,而且以Git為基礎的程式碼倉庫GitHub、Gitlab都成了知名的開原始碼倉庫。
-
3 # 會點程式碼的大叔
我最早切身體會到Git的優點,是一次週末在家辦公的時候,我們當時專案組使用的是svn,當開發完一個功能準備提交的時候,發現svn伺服器down掉了。
這時候就有些尷尬了,因為我們一般在開發小的功能時,是不會為這個功能/需求單獨拉分支基線的,通常的做法是在開發基線上修改,一次提交也只能提交一個功能的開發,同時新增提交日誌標明是開發的那個功能或需求,這樣便於merge。
但是由於svn伺服器掛了,我第一個功能的程式碼沒有辦法提交,那麼如果我繼續開發第二個功能的時候,那麼commit會非常的麻煩,如果同時修改了相同的檔案,那麼commit會難上加難。
Git的出現,實際上也是因為傳統的集中式程式碼管理工具的痛點SVN屬於集中式程式碼管理工具,這類工具的一個最大的特點是有一個伺服器,所有的客戶端都需要連線這個伺服器,進行程式碼的相關操作;
顯而易見,這個伺服器可能會成為瓶頸,如果這臺伺服器掛了,或者網路不通,那麼是沒有辦法進行update、commit等操作的,甚至連檢視程式碼提交歷史都無法做到;
如果伺服器無法恢復,那麼將是災難性的。
那麼Git的優點有哪些呢?Git屬於分散式程式碼管理工具,雖然也會有中央程式碼庫,但更重要的是,會有本地化的版本庫,支援離線提交,可以在自己的程式碼庫上做提交程式碼、建立分支、回滾等操作,不會影響到其他的開發者;
因為本地也有版本庫,就算在斷網的情況下,也可以使用;當網路恢復的時候,再透過PULL和PUSH完成和伺服器同步以及提交;
中央程式碼庫的作用只是為了方便開發人員“交換”彼此的修改,但是沒有它的話,開發者也一樣可以幹活兒;就算是中央程式碼庫掛了,也沒有關係,因為每個開發者本地都有一套完整的版本;
Git還有速度快、靈活、衝突容易解決等優點。
不過,不管是集中式程式碼管理工具還是分散式程式碼管理工具,它們只是個【工具】,學習起來都不困難,建議程式設計師們都學習使用一下。
-
4 # 架構思維
我就說一點,git的分散式管理。
如果你是第一次用git,會發現git並沒有傳說中那麼好用。
你也需要從一個所謂的中心倉拉取程式碼。而且每次提交都要三步:
git add .git commit -m “提交註釋” git push所謂的分散式到底體現在哪裡?優勢在哪裡?
如果是公司內部使用,git可能體現不出來什麼優勢,甚至有些麻煩。因為git是為不在一起工作的軟體開發者服務的。
下面我模擬一個場景,來說一下git的分散式所體現的優勢。
突發靈感假設某天你突然有了個靈感,有個激動人心的應用,你急需要寫程式碼驗證一下。因為是驗證,程式碼改動頻繁,所以你需要版本管理。
如果是集中式管理工具,你需要去搭建一個伺服器。等你搭建完了,可能靈感早就沒了。
使用git呢?
git init magicProject搞定。你就可以進行程式碼管理了。不過你現在只有本地倉庫,就是說你只能
git add .git commit -m “牛逼的專案”資料備份雖然現在有版本管理了,但是程式碼只有一份,萬一手賤,刪了怎麼辦。
保險起見,我得備份一下,手動複製嗎?那還不累死。我可以clone一份。
git clone sourcepath targetpath然後我在targetpath裡進行程式碼的編寫,編寫完了之後再push到sourcepath。
git add . git commit -m “牛逼的專案”git push注意,sourcepath和targetpath都在本地,只是目錄不同。
多人開發你把專案展示給別人看,別人很感興趣,想加入一起開發。
他就可以直接clone機器上的程式碼,你的機器就既是開發機又是伺服器了。他開發完了程式碼推送到你的機器。就實現了多人開發。
分散式現在有兩個問題。
雖然現在你的程式碼有兩份,但是都在一臺電腦上,萬一電腦壞了怎麼辦?對方必須要等你機器開機後才能推送程式碼,太麻煩了。這時你就可以把sourcepath託管到網上。
兩人各自寫程式碼,然後推送到雲上即可。
後面再有人加入時,從雲上clone程式碼就可以了。
程式碼丟失怎麼辦?假設哪一天雲上的程式碼丟了,好死不死你機器也壞了,那可怎麼辦?
你只要隨便找一個開發人員,把程式碼複製過來就可以恢復了。
只要拉取了最新程式碼,那麼那個人就有版本庫的完整資訊
-
5 # 計算機軟體知識
Git有遠端倉庫和本地倉庫。Git可以只使用本地倉庫,而且絕大部分操作使用的都是本地倉庫,只有在拉取、推送等時才需要遠端倉庫,可以在脫離遠端倉庫工作;而SVN嚴重依賴遠端倉庫。
Git有強大的分支功能。SVN的分支,是把所有的檔案都進行復制,非常低效,分支切換也非常慢;Git的分支只是一個“指標”,分支的建立、切換非常高效。
-
6 # 小埋看世界
為什麼選擇 Git
雖然市場上有幾十種不同的版本控制系統,一些世界上最著名的專案(例如 Linux 核心, Ruby on Rails,或是jQuery)都選擇了使用 Git 作為它們的版本控制系統。為什麼它們都選擇 Git 呢?
離線工作當你不能聯機遠端中央倉庫時你該怎麼工作呢?對於一個像 Subversion 或者 CVS 的集中式版本控制系統來說,如果你沒有連線到中央倉庫,你就不能很好的工作。如果使用 Git ,幾乎所有的東西都可以簡單地在你的本地機器上完成。例如進行提交,檢視你的專案歷史,合併或者建立分支等等。至於在哪裡工作?什麼時候工作? Git 不會給你施加任何限制。
撤銷錯誤操作每個人都會犯錯,而使用 Git 的最大好處就在於,幾乎在所有的情況下你都能 “撤消” 你的錯誤操作。比如如果你忘記了把一個小小的改動包含進來,因此你要改正你的上個提交。又或者你想要撤銷一個完整的提交,因為這個功能有可能是不必要的。當發生了很嚴重的錯誤時,你甚至可以透過恢復引用日誌來讓一個提交不可見。你可以放心,Git 幾乎很少真正地刪除資料。
可靠性高不用擔憂,你不會在 Git 中搞砸任何東西,這種感覺是不是非常好?在你的 Git 專案中的每一個團隊成員都克隆了整個專案在他們的本地計算機,這個本地克隆也可以看作一個完整的專案備份。除此之外, Git 上的操作幾乎都是進行資料新增,幾乎從不刪除資料。這意味著丟失資料或是倉庫損壞的情況幾乎不可能發生。
讓提交更有意義只有包含了相關的改動的提交才有意義。想象一下,如果一個提交中包括一個新新增的功能 A ,還包括功能 B 的一部分改動,並且還存在一個對錯誤 C 的修復。這樣其他的團隊成員就很難理解這個提交的意圖,而且當其中的一個改動出現了錯誤,撤銷起來也非常麻煩。利用它獨一無二的 “暫存區(staging area)” 概念,Git 可以幫助你打造很細微和精準的提交。你可以準確地判斷哪些更改將被包含在你的下一個提交中,即使只是一行改動。Git 真正提高了對版本控制的實用性。
更高的自由度當使用 Git 工作時,你可以定義一個對專案和團隊有意義的工作流程。使用 Git 也不需要其它的要求。你可以連線多個遠端倉庫,使用 rebase 來替代合併,或者在需要時可以使用子模組。當然,你也可以簡單地像 Subversion 那樣僅僅使用一個遠端的集中式倉庫。無論你使用什麼樣的工作流程,它都有各種各樣的優點。
避免混亂關注點分離可以更明確地瞭解事情的程序。當你工作在功能 A 上時,不應該有任何人受到你未完成的程式碼的影響。如果那個功能是完全沒有必要的話呢?或是完成了對它的一些改動提交後,你注意到你完全錯了呢?分支功能就可以解決這些問題。當然其他版本控制系統也都有分支,但是 Git 真正的把它改進地更快速,更簡單了。
順應潮流聰明的開發人員應該順應潮流。Git 正在被越來越多的知名公司和開源專案所使用,如 Ruby On Rails,jQuery,Perl,Debian,Linux 核心等等。擁有一個大型的使用者群體是一個很大優勢,因為往往會存在很多系統去推動他的發展。大量的教程,工具和服務,這讓Git更加具有吸引力。
回覆列表
git是一種分散式的版本控制系統,被廣大程式愛好者推崇和使用。而git的使用方法對剛接觸git的朋友來說,往往一頭霧水,看上去很高階很厲害的樣子,所以會用git的程式設計師都自帶一種高階大佬的氣質!
接下來我舉個例子,解釋一下什麼是所謂的版本控制系統?
有過專案開發經驗的同學一定有這樣的經歷,你的第一版程式碼一般是比較粗糙的完成了專案的開發需求,後續要不斷地對程式碼進行增增減減,一般在刪掉就的程式碼之前,我們會做一個備份,怕後續還想用這部分程式碼找不到,導致一個專案開發的過程中,有好多的備份和版本,改來改去,都記不清之前儲存的程式碼都有什麼功能了。
更不方便的事,如果你和同學、朋友共同開發一個專案,當你們各自的程式碼進行合併的時候又是問題重重,因為可能你這邊僅僅修改了一個變數的名字,都會給對方的工作造成不便。
而git的誕生就是為了解決這個不便的,git的優勢真是多到數不勝數,在眾多分散式版本管理系統中可謂是一枝獨秀,首先,他免費,使用過程不聯網,同時還有強大的分支管理功能,系統執行穩定,相對來說使用簡單,傳輸快速,通吃各個平臺(Linux、Unix、Mac和Windows)。總而言之,如果你是一名程式設計愛好者,學會git以及它的常用命令,絕對如虎添翼,能讓你的開發過程方便很多。