Git到底算不算程序員必備技能?

因爲各種原因,國內社交平臺有關Git和其他版本管理工具的口水戰一直沒停,因爲版本控制是必備需求,所以程序員熱衷就此表達自己的看法:

無論是自己寫代碼還是在企業工作,版本控制都是程序員的必備技能。經過多年發展,現在使用比較廣泛的版本控制工具有Git、SVN、Perforce、Hg、TFS等。可能是由於Github和Linus的原因,Git成爲主流分佈式版本控制系統,但國內不乏還在使用SVN的大型互聯網企業。在這種情況下,程序員有必要花時間學習Git嗎?

在公司使用SVN(或其他工具)的前提下,程序員有必要自學Git嗎?

雖然有很多版本控制工具,但SVN和Git是使用範圍最廣泛的集中式和分佈式工具代表。就個人開發者而言,不會使用Git意味着無法充分利用Github這個全球最大的開源網站,當然,個人通常不會選擇商業化版本控制工具。在這種背景下,如果所在公司使用SVN,個人程序員是否有必要花時間自學Git呢?

當然,可能會有人質疑:2019年都到了,還有公司在使用SVN嗎?答案是不僅有,而且不少,比如騰訊。說到底,Git和SVN不過是一個版本控制管理工具,並沒有哪個一定更好的說法,甚至個別程序員不過是把Git當做SVN在用。

SVN是集中式版本控制系統的代表,其版本庫集中存放在中央服務器,程序員使用個人電腦從中央服務器獲取最新版本,並將更新後版本推送到中央服務器。集中式版本控制系統的通病是必須聯網纔可以工作,如果是局域網還好,帶寬夠大,速度夠快;如果是互聯網且網速較慢的話,提交一個10M文件可能就需要5分鐘。當然,出於安全等多方面因素考慮,企業內部有自己的局域網很正常。

Git是分佈式版本控制的代表,沒有明確的中央服務器概念,每個程序員的電腦上都有完整的版本庫,只需要將更改互相推送給對方即可。一旦其中某個版本丟失,只需要從其他電腦上覆制一份即可,相當於互相備份的概念。

相比SVN,Git的最大優勢可能是分支管理,這非常契合開源項目的需求,但不少使用Git的程序員沒有最大限度利用這一優勢,國內程序員對開源社區的貢獻也相對較低。SVN的主要優勢是目錄級別權限控制,可以Checkout子目錄,方便公司或團隊管理,不少雲供應商也提供雲端的SVN相關工具。

SVN與Git的使用場景本身不盡相同,因此並不存在高低之分。但就現狀而言,程序員與開源項目的接觸越來越多,企業也越來越喜歡使用開源項目,即便公司內部使用SVN,但Git也會成爲程序員的一項必備技能,畢竟在Github上互相交流是需要的,但Git在實際使用中還是存在很多問題。

Git存在的問題

Git本身的複雜性就不在此贅述,基礎入門可能只需要簡單培訓,但要想熟練使用並挖掘最大優勢着實需要費一番功夫,即便是Git專家也不會輕易推薦程序員使用Git作爲入門工具,很多經驗豐富的程序員使用Git時也需要查看幫助。OOPSLA16有一篇論文專門分析了Git的問題,MIT 計算機科學和人工智能實驗室的研究團隊設計了一款叫做Gitless的新工具,感興趣的可以自行搜索。

在存放巨型項目、大型二進制文件以及嵌套方面,Git一直存在問題。GVFS、Git LFS倒是可以解決現階段的部分問題,但性能和生態支持還不足夠。此外,Git的概念是比較清楚的,但指令非常混亂,Git沒有中央控制服務器,GitHub和本地Git庫平等,沒有針對目錄和文件夾的權限控制。由於兩邊對等,所以push、pull、remote branch這些概念其實很麻煩,用起來也不方便。

只能說,Git目前確實存在一些問題,但這些問題不影響程序員的常規使用。反之,如果只是把Git當做SVN用,並沒有發揮Git的優勢。

總結

通過社交平臺的言論對比,大部分程序員認爲即便公司使用其他版本控制工具,個人還是很有必要學習Git,畢竟使用開源項目難免需要在社區交流探討問題。但是,無論選擇哪款工具都沒有高低貴賤之分,使用SVN也不代表落後;其次,Git目前的支持越來越完善,周邊生態也逐漸強大,已經成爲主流選擇,出於日後的職業發展考慮,程序員起碼應該先行入門Git。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章