爲何Git比Subversion更好?

我已經使用Subversion幾年了,在使用SourceSafe以後 ,我只是喜歡Subversion。 結合TortoiseSVN ,我沒法想象它會如何變得更好。 html

然而,愈來愈多的開發人員聲稱Subversion存在問題,咱們應該轉向新一代的分佈式版本控制系統,例如Gitgit

Git如何改進Subversion? 程序員


#1樓

一些答案已經提到了這些,但我想明確指出2點: 服務器

1)進行選擇性提交的能力(例如, git add --patch )。 若是您的工做目錄包含多個不屬於同一邏輯更改的更改,Git能夠很是輕鬆地進行僅包含部分更改的提交。 使用Subversion很難。 分佈式

2)在不公開變動的狀況下提交的能力。 在Subversion中,任何提交都是當即公開的,所以是不可撤銷的。 這極大地限制了開發人員「提早提交,常常提交」的能力。 svn

Git不只僅是一個VCS; 它也是開發補丁的工具。 Subversion僅僅是一個VCS。 工具


#2樓

其餘答案在解釋Git的核心功能方面作得很好(很棒)。 但也有不少方法讓Git表現得更好,並有助於讓個人生活更加健全。 如下是一些小事: 學習

  1. Git有一個'乾淨'命令。 SVN迫切須要這個命令,考慮它會在磁盤上轉儲額外文件的頻率。
  2. Git有'bisect'命令。 這真好。
  3. SVN在每一個文件夾中建立.svn目錄(Git只建立一個 .git目錄)。 您編寫的每一個腳本以及您執行的每一個grep都須要編寫以忽略這些.svn目錄。 您還須要一個完整的命令(「svn export」)才能得到文件的合理副本。
  4. 在SVN中,每一個文件和文件夾能夠來自不一樣的修訂版或分支。 起初,擁有這種自由聽起來不錯。 但這實際上意味着有一百萬種不一樣的方式讓您的本地結帳徹底搞砸了。 (例如,若是「svn switch」中途失敗,或者輸入的命令錯誤)。 最糟糕的是:若是你遇到某些文件來自一個地方,而其中一些來自另外一個地方的狀況,「svn狀態」會告訴你一切正常。 您須要在每一個文件/目錄上執行「svn info」以發現奇怪的事情。 若是「git status」告訴你事情是正常的,那麼你能夠相信事情是正常的。
  5. 不管什麼時候移動或刪除某些內容,都必須告訴SVN。 Git會想出來的。
  6. 在Git中忽略語義更容易。 若是忽略模式(例如* .pyc),則將忽略全部子目錄。 (但若是你真的想忽略一個目錄的東西,你能夠)。 使用SVN,彷佛沒有簡單的方法能夠忽略全部子目錄中的模式。
  7. 涉及忽略文件的另外一項。 Git可使用「私有」忽略設置(使用文件.git / info / exclude),這不會影響其餘任何人。

#3樓

這裏的全部答案都是預期的,以程序員爲中心,可是若是您的公司在源代碼以外使用修訂控制會發生什麼? 有許多文檔不是源代碼,它們受益於版本控制,應該靠近代碼而不是另外一個CMS。 大多數程序員不是孤立地工做 - 咱們做爲團隊的一部分爲公司工做。 測試

考慮到這一點,比較Subversion和git之間在客戶端工具和培訓中的易用性。 我看不到任何分佈式版本控制系統將更容易使用或向非程序員解釋的場景。 我很想被證實是錯的,由於那樣我就可以評估git,而且實際上但願它可以被須要版本控制但不是程序員的人所接受。 spa

即使如此,若是管理層要求咱們爲何要從集中式轉發到分佈式版本控制系統,我很難給出一個誠實的答案,由於咱們不須要它。

免責聲明:我很早就開始對Subversion感興趣(大約在第29節),因此很明顯我有偏見,但我從那時起爲之工做的公司都受益於個人熱情,由於我鼓勵並支持它的使用。 我懷疑這是大多數軟件公司的狀況。 有這麼多程序員跳上git的潮流,我想知道有多少公司會錯過在源代碼以外使用版本控制的好處? 即便您擁有針對不一樣團隊的單獨系統,您也會錯過一些好處,例如(統一)問題跟蹤集成,同時增長維護,硬件和培訓要求。


#4樓

Subversion很容易使用。 我在過去幾年裏歷來沒有發現過一個問題或某些事情沒有按預期發揮做用。 還有許多優秀的GUI工具,對SVN集成的支持很大。

使用Git,您能夠得到更靈活的VCS。 您能夠像使用SVN同樣使用它,並使用遠程存儲庫提交全部更改。 可是您也能夠在離線時使用它,而且只是不時地將更改推送到遠程存儲庫。 但Git更復雜,學習曲線更陡峭。 我發現本身第一次犯錯誤的分支,間接建立分支或獲取錯誤消息,但沒有太多關於錯誤的信息以及我必須在Google搜索以得到更好的信息。 一些簡單的事情,如替換標記($ Id $)不起做用,但GIT有一個很是靈活的過濾和鉤子機制來合併本身的腳本,因此你獲得你須要的全部東西和更多,但它須要更多的時間和閱讀文檔;)

若是您主要使用本地存儲庫脫機工做,那麼若是本地計算機上丟失了某些內容,則沒法進行備份。 使用SVN,您主要使用遠程存儲庫,這也是您在另外一臺服務器上備份的同時... Git能夠以相同的方式工做,但這不是Linus擁有相似SVN2的主要目標。 它是爲Linux內核開發人員和分佈式版本控制系統的需求而設計的。

SVT比SVN更好嗎? 只須要一些版本歷史和備份機制的開發人員能夠經過SVN輕鬆生活。 常常與分支機構合做,同時測試更多版本或大部分離線工做的開發人員均可以從Git的功能中受益。 有一些很是有用的功能,如SVN沒有找到的存儲,可使生活更輕鬆。 但另外一方面並不是全部人都須要全部功能。 因此我看不到SVN的死者。

Git須要一些更好的文檔,錯誤報告必須更有幫助。 現有的有用GUI也不多。 此次我只找到了1個Linux的GUI,支持大多數Git功能(git-cola)。 Eclipse集成正在運行,但它沒有正式發佈,而且沒有官方更新站點(只有一些外部更新站點,其中包含來自主幹的週期性構建http://www.jgit.org/updates )因此今天最喜歡使用Git的方式是命令行。


#5樓

SourceGear的Eric Sink撰寫了一系列關於分佈式和非分佈式版本控制系統之間差別的文章。 他比較了最流行的版本控制系統的優缺點。 很是有趣的閱讀。
文章能夠在他的博客www.ericsink.com上找到:

相關文章
相關標籤/搜索