2008-10-02 97 views
320

我開始一個新的分佈式項目。我應該使用SVN還是Git?爲什麼?我應該使用SVN還是Git?

+5

是的,git適用於Mac。如果您使用macports進行安裝,它甚至會將mac前端安裝到提交和瀏覽界面。 – 2010-03-30 22:36:05

+3

http://stackoverflow.com/questions/871/why-is-git-better-than-subversion – 2010-03-30 22:37:35

回答

6

我會選擇SVN,因爲它更廣泛和更廣爲人知。

我猜,Git對Linux用戶會更好。

4

Git在Windows下本來不支持。它針對Posix系統進行了優化。然而運行Cygwin或MinGW可以讓你運行Git成功。

現在我更喜歡過的Git SVN,但需要一段時間才能得到超過閾值,如果你來自CVS,SVN土地。

+8

定義'本地'。 msysgit工作正常 – 2008-10-06 07:26:57

9

絕對svn,自Windows是,在最好的一個在git世界二等公民(見http://en.wikipedia.org/wiki/Git_(software)#Portability有詳細介紹)。

UPDATE:對不起,斷開的鏈接,但我已經放棄試圖讓SO與包含括號中的URI工作。 [現在鏈接已修復。 -ed]

+1

僅供參考:將URL包含在尖括號中,或用%28和%29替換括號。 – PhiLho 2008-10-02 10:35:44

+1

[]()語法的URL編碼工作嗎? – 2008-10-02 11:44:44

4

我可能會選擇Git的,因爲我覺得它比SVN更加強大。有便宜的代碼託管服務可用,這對我來說很好 - 你不必做備份或任何維護工作 - GitHub是最明顯的候選人。

這麼說,我不知道有關的Visual Studio的集成和不同的SCM系統什麼。我想象與SVN的整合顯着更好。

7

重點是,Git是一個分佈式VCS和Subversion集中式的。分佈式VCS有點難以理解,但有很多優點。如果你不需要這個優點,Subversion可能會是更好的選擇。

另一個問題是工具支持。您計劃使用哪些工具更好地支持哪種VCS?

編輯:三年前,我回答是這樣的:

And Git works on Windows at the moment only via Cygwin or MSYS . Subversion supported Windows from the beginning. As the git-solutions for windows may work for you, there may be problems, as the most developers of Git work with Linux and didn't have portability in the mind from the beginning. At the moment I would prefer Subversion for development under Windows. In a few years this may be irrelevant.

現在的世界已經改變了一點點。現在,Git在Windows上有很好的實現。儘管我沒有在Windows上進行過測試(因爲我不再使用這個系統),但我相當確信,所有主要的VCS(SVN,Git,Mercurial,Bazaar)都有適當的Windows實現。 SVN的這一優勢消失了。其他點(集中式與分佈式以及工具支持檢查)保持有效。

+0

我非常樂觀地認爲,不相信的視野會比幾年短得多。 – 2008-10-02 09:57:05

+0

是的,可能只有一年。 Git擁有一個充滿活力的開發社區。但顛覆也是如此。在一兩年內,你將不得不再次回顧這個問題。 – Mnementh 2008-10-02 11:28:15

3

我可以擴展問題並詢問Git在MacOS上是否工作良好?

回覆評論:謝謝你的消息,我一直期待着嘗試一下。我會在我的Mac上安裝它。

+1

是的,它的作品非常漂亮。我通過MacPorts安裝並每天使用它。 – 2008-10-02 09:57:46

+0

它的確如此。在任何基於POSIX的系統(Unix,Linux,Solaris,BSD等)上都很棒。這真的只是Windows問題所在。 – Oli 2008-10-02 09:58:30

+0

和git-gui和gitk可能在OS-X下的工作方式與Linux和Windows下的相同。與烏龜SVN相反,AFAIK是僅限Windows? – 2008-10-02 10:28:22

251

SVN是一個回購和許多客戶。 Git是一個擁有大量客戶端回購的回購商,每個回購商都有一位用戶。它被分散到人們可以在本地跟蹤他們自己的編輯而無需將事情推送到外部服務器的地步。

SVN被設計其中GIT中是基於每個用戶具有自己的GIT中回購和那些回購推變回成一箇中央的一個更中央。出於這個原因,Git給個人更好的本地版本控制。

同時你可以選擇​​,GitExtensions(如果你在github上託管你的「中央」git-repository,他們自己的client – GitHub for Windows)。

如果你正在尋找擺脫SVN,你可能想要評估一下Bazaar。它是具有這種分佈式元素的下一代版本控制系統之一。它不像POSIX那樣依賴git,所以有本地Windows版本,它有一些支持它的強大的開源品牌。

但是,你甚至可能不需要這些功能。看看the features, advantages and disadvantages of the distributed VCSes。如果您需要超過SVN優惠,請考慮一個。如果你不這樣做,你可能想要堅持SVN(當前)優秀的桌面集成。

+23

可能還會看一下Hg(Mercury) – Joel 2010-03-30 22:24:00

11

我會建立一個Subversion版本庫。通過這樣做,單個開發人員可以選擇是否使用Subversion客戶端或Git客戶端(使用git-svn)。使用git-svn並不會爲您提供完整的Git解決方案的所有優勢,但它確實爲各個開發人員提供了對其工作流程的大量控制。

我相信這將是Git的工作同樣出色的Windows之前因爲它在Unix和Mac OS X(既然你問)一個相對短的時間。

Subversion具有優秀的Windows工具,如用於Explorer集成的TortoiseSVN和用於Visual Studio集成的AnkhSVN。

2

正如其他人所指出的,SVN在Windows下似乎是一個不錯的選擇。

如果您的某個開發人員想要嘗試GIT,那麼它可能會始終使用GIT-SVN,其中SVN存儲庫將在GIT存儲庫中重新創建。然後,他應該能夠在GIT本地工作,然後使用SVN將其更改發佈到主存儲庫。

3

你試過Bzr

這是相當不錯的,connonical(誰做Ubuntu的人)做,因爲他們並沒有像市場上的其他任何東西......

107

我從來沒有明白的「混帳Windows上不是好這個概念「;我完全在Windows下開發,我從來沒有任何問題與Git。

我肯定會推薦git over subversion;它只是非常多才多藝,並且允許「顛覆式開發」以顛覆方式永遠不可能實現的方式。它幾乎可以在任何可以想象的平臺上使用,並且具有比您可能使用的更多功能。

+9

另一方面,我在Windows上使用git存在一些問題,它對我的​​回購確實有些奇怪的事情。我使用的是cygwin中的最新版本(這是一個月前的情況)。 – 2009-06-13 08:32:24

+7

@Roman:好吧,Cygwin端口與原生win32端口幾乎沒有什麼兩樣。我預計Cygwin端口的測試要少得多...... – SamB 2010-03-30 22:32:28

1

你必須去DVCS,它就像源代碼管理中的一個飛躍。我個人使用Monotone,加快了開發時間。我們將它用於Windows,Linux和Mac,並且它非常穩定。我甚至有buildbot在每個平臺上每晚構建項目。

DVCS同時分佈通常意味着你將創建一箇中央服務器只是爲了人民,推動改變,並從。

9

不是真的回答你的問題,但如果你想要Distributed Revision Control的好處 - 聽起來像你一樣 - 而且你使用Windows,我認爲你最好使用Mercurial而不是Git作爲Mercurial有更好的Windows支持。 Mercurial也有一個Mac端口。

9

如果你的團隊已經熟悉的版本和源代碼控制軟件如CVS或SVN,那麼,對於一個簡單的小項目(如你要求它),我會建議你堅持到SVN。我對svn非常滿意,但對於我在django上進行的當前電子商務項目,我決定在git上工作(我在svn模式下使用git,也就是說,通過一個集中的repo,從而與至少一個其他開發者合作)。另一位開發人員對SVN感到滿意,而其他人的經驗可能會有所不同,但我們兩人對於這個小型項目都非常不滿。 (我們都是鐵桿的Linux用戶,如果它在所有。)

您的里程可能會有所不同,當然。

11

有趣的是:在顛覆回購 我的主機項目,但通過Git的克隆命令訪問它們。

請仔細閱讀Develop with Git on a Google Code Project

Although Google Code natively speaks Subversion, you can easily use Git during development. Searching for "git svn" suggests this practice is widespread, and we too encourage you to experiment with it.

在SVN倉庫使用Git給了我好處:

  1. 我可以工作幾個 機,commiting和 拉動和他們
  2. 分佈
  3. 我有一個中央backup/public SVN倉庫給別人看看
  4. 他們可以自由使用的Git爲SVN的是很少自己
36

2個關鍵優勢引:

  1. 大文件支持。除了代碼之外,我使用SVN來管理我的主目錄。 SVN是唯一不會在我的TrueCrypt文件中窒息的VCS(請分辨我是否有另一個可有效處理500MB +文件的VCS)。這是因爲差異比較是流式傳輸的(這是非常重要的一點)。 Rsync是不可接受的,因爲它不是雙向的。

  2. 部分存儲庫(子目錄)檢出/檢入。 Mercurial和bzr不支持這一點,而git的支持是有限的。這在團隊環境中很糟糕,但如果我想從我的家庭目錄中檢查另一臺計算機上的某些內容,這是非常寶貴的。

只是我的經驗。

77

這裏是一個答案,我做的some duplicate question since then deleted大約GIT中與SVN(2009年9月)的副本。

更好?除了通常的鏈接WhyGitIsBetterThanX,它們是不同的:

一個是基於便宜的副本的分支和標籤的中央VCS 另一個(Git)是基於修訂圖的分佈式VCS。 另請參閱Core concepts of VCS


這第一部分產生一些錯誤通知評論假裝這兩個程序(SVN和Git)的根本目的是相同的,但他們已經實現完全不同。
爲了澄清fundamental difference between SVN and Git,讓我改一下:

  • SVN是第三實施revision control的:RCS, then CVS and finally SVN管理版本化數據的目錄。 SVN提供了VCS特性(標籤和合並),但它的標籤只是一個目錄副本(就像一個分支,除非你不能「接觸」標籤目錄中的任何東西),它的合併仍然很複雜,目前基於元添加數據以記住已經合併的內容。

  • Git是一個文件內容管理(由合併文件的工具),演變成一個真正的版本控制系統的基礎上,提交,其中分支的歷史的一部分的DAG(Directed Acyclic Graph)數據(而不是數據本身)以及標籤是真正的元數據。

要說他們不是「根本上」不同,因爲你可以達到同樣的目的,解決同樣的問題,是......在許多層面上普通的錯誤。

  • 如果你有很多複雜的合併,用SVN做它們會更長更容易出錯。 如果你必須創建很多分支,你需要管理它們併合並它們,再次使用Git比使用SVN更容易,尤其是當涉及大量文件時(速度變得很重要)
  • 如果你對正在進行的工作進行部分合並,您將利用Git暫存區(索引)僅提交您需要的內容,隱藏其餘部分,並在另一個分支上繼續。
  • 如果您需要離線開發......以及Git,您總是會「在線」,使用您自己的本地存儲庫,無論您想要使用其他存儲庫的工作流程如何。

還是關於老(刪除)回答的意見堅持:

VonC: You are confusing fundamental difference in implementation (the differences are very fundamental, we both clearly agree on this) with difference in purpose.
They are both tools used for the same purpose: this is why many teams who've formerly used SVN have quite successfully been able to dump it in favor of Git.
If they didn't solve the same problem, this substitutability wouldn't exist.

,而我的回答是:

「可替代性」 ......有趣的詞條(used in computer programming)。
當然,Git幾乎不是SVN的子類型。

您可以在兩者都達到相同的技術特性(標籤,分支和合並),但Git不會妨礙您的工作,並且允許您專注於文件的內容,而不必考慮工具本身。

你當然不能(總是)只需更換SVN由混帳「而不會改變任何程序的理想特性(正確性,執行任務,...)的」(這是一個參照上述substitutability definition):

  • 一個是擴展版本工具,另一個是真正的版本控制系統。
  • 一個適合於具有簡單合併工作流程和(不太多)並行版本的中小型單一項目。 SVN就足夠了,你可能不需要所有的Git特性。
  • 其他允許介質基於多個組件(one repo per component)中,用大量的文件到多個分支之間合併在一個複雜的工作流合併,並行版本在分支,改型合流,等大項目。你可以用SVN來完成,但你用Git更好。
    SVN根本無法用任何合併工作流管理任何規模的項目。 Git可以。

再次,其性質是根本不同的(然後導致不同的實現,但不是點)。
一見的版本控制的目錄和文件,其他的只能看到文件的內容(以至於空目錄不會在Git中甚至註冊!)。

一般的最終目標可能是相同的,但你不能以同樣的方式使用它們,也可以解決同一類問題(在範圍和複雜性)。

4

我已經使用SVN很長一段時間,但每當我使用Git的,我覺得Git是多強大,重量輕,儘管學習曲線的一點點參與,但比SVN更好。

我注意到的是,每個SVN的項目,因爲它的增長,成爲一個非常大的規模的項目,除非它被出口。 GIT項目(與Git數據一起)的體積非常輕。

在SVN中,我從新手開發人員到專家,新手和中間人似乎介紹瞭如果從另一個SVN項目複製一個文件夾以便重新使用它的文件衝突。然而,我認爲在Git中,您只需複製文件夾並且它可以工作,因爲Git不會在其所有子文件夾中引入.git文件夾(就像SVN一樣)。

因爲長時間用SVN了很多處理,我終於想我的開發人員和我移動到Git的,因爲它很容易合作和合並工作,還有一個很大的優勢之後是一個本地副本的變化可以儘可能地承諾,然後最終推送到服務器上的分支,不像SVN(我們必須不時地在服務器上的存儲庫中提交更改)。

任何人誰可以幫助我決定,如果我真的應該使用Git去? https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

(下面的一些摘錄):

24

做更多的研究,並審閱了鏈接後

  • 這是令人難以置信的快速。 我用過的其他單片機已經能夠跟上它,並且我用了很多,包括Subversion,Perforce,darcs,BitKeeper,ClearCase和CVS。
  • 它完全分佈。 存儲庫所有者不能規定我的工作方式。我可以在我的筆記本電腦上斷開連接時創建分支並提交更改,然後與其他任何數量的存儲庫進行同步。
  • 可以在許多介質上進行同步。 SSH通道,通過HTTP通過WebDAV,通過FTP或通過發送電子郵件持有由郵件的收件人應用的補丁。中央存儲庫不是必需的,但可以使用。
  • 分支甚至比在Subversion中更便宜。 創建分支與將41字節文件寫入磁盤一樣簡單。刪除分支與刪除該文件一樣簡單。
  • 與Subversion分支不同,它帶有完整的歷史記錄。 而不必執行一個奇怪的副本,並通過副本。在使用Subversion時,我總是覺得很難看到分支創建之前分支上的文件的歷史記錄。 from #git:spearce:我不明白頁面中有關SVN的一件事。我做了一個分支我SVN和瀏覽歷史顯示整個歷史文件在分支
  • 分支合併更簡單,更自動的Git。 在Subversion中你需要記住你最後一次修訂版本是什麼,所以你可以生成正確的合併命令。 Git自動執行此操作,並始終做對。這意味着將兩個分支合併在一起時犯錯的可能性較小。
  • 分支合併記錄爲 存儲庫的正確歷史記錄的一部分。如果我將兩個分支合併在一起,或者如果我將一個分支合併到它來自的後備箱中,那麼合併操作會被記錄爲轉倉歷史記錄的一部分,因爲這是由我執行的以及何時執行的。在日誌中正確執行合併的人很難爭辯。
  • 創建存儲庫是一件簡單的操作: mkdir foo; cd foo; git init 就是這樣。這意味着我爲這些日子的一切創建了一個Git倉庫。我傾向於每個類使用一個存儲庫。這些存儲庫中的大多數在磁盤上低於1 MB,因爲它們只存儲講義,作業分配和我的LaTeX答案。
  • 存儲庫的內部文件格式非常簡單。 這意味着修復非常容易,但更好,因爲它非常簡單,很難修復。我不認爲有人曾經有一個Git倉庫被損壞。我已經看到了使用fsfs自身損壞的Subversion。我已經看到Berkley DB損壞了很多次,以至於我將代碼信任到Subversion的bdb後端。
  • 雖然 這是一個非常簡單的格式,但Git的文件格式在壓縮數據方面非常出色。 Mozilla項目的CVS存儲庫約爲3 GB;它在Subversion的fsfs格式中大約爲12 GB。在Git中大約有300 MB。

看完所有這些,我確信Git是要走的路(儘管存在一點學習曲線)。我也在Windows平臺上使用過Git和SVN。

在閱讀完上述內容後,我很想聽聽其他人的評論嗎?

4

歸結爲此:

你的發展是線性的嗎?如果是這樣,你應該堅持使用Subversion。

另一方面,如果您的開發不是線性的,這意味着您需要爲不同的更改創建分支,然後將這些更改合併回主開發線(Git已知爲主分支)那麼Git會爲你做更多的事情。

相關問題