Soll ich SVN oder Git verwenden? [geschlossen]

321

Ich starte ein neues verteiltes Projekt. Soll ich SVN oder Git verwenden und warum?

Rudigrobler
quelle
5
Ja, Git funktioniert auf Mac. Wenn Sie Macports verwenden, um es zu installieren, wird sogar ein Mac-Frontend für die Commit- und Browse-Schnittstellen installiert.
Seth Johnson
3
Mögliches Duplikat von stackoverflow.com/questions/871/…
3
@Andre - da Sie MonoDevelop verwenden können - wechsle ich von Vault zu SVN, damit ich .NET-Software auf meinem Mac oder PC entwickeln kann. Es gab keinen Client für Vault, aber für SVN :-)
schmoopy
4
Github / Bitbucket + Sourcetree = Himmel! - sourcetreeapp.com
thecodeassassin

Antworten:

253

SVN ist ein Repo und viele Kunden. Git ist ein Repo mit vielen Client-Repos, jedes mit einem Benutzer. Es ist so dezentralisiert, dass Benutzer ihre eigenen Änderungen lokal verfolgen können, ohne Dinge auf einen externen Server übertragen zu müssen.

SVN ist zentraler konzipiert, wobei Git darauf basiert, dass jeder Benutzer sein eigenes Git-Repo hat und diese Repos Änderungen wieder in ein zentrales übertragen. Aus diesem Grund bietet Git Einzelpersonen eine bessere lokale Versionskontrolle.

In der Zwischenzeit haben Sie die Wahl zwischen TortoiseGit , GitExtensions (und wenn Sie Ihr "zentrales" Git-Repository auf github hosten, ihrem eigenen Client - GitHub für Windows ).

Wenn Sie SVN verlassen möchten, sollten Sie Bazaar ein wenig bewerten . Es ist eines der Versionskontrollsysteme der nächsten Generation mit diesem verteilten Element. Es ist nicht wie git POSIX-abhängig, daher gibt es native Windows-Builds und einige leistungsstarke Open-Source-Marken unterstützen es.

Möglicherweise benötigen Sie diese Funktionen jedoch noch nicht einmal. Schauen Sie sich die Funktionen, Vor- und Nachteile der verteilten VCS an . Wenn Sie mehr als SVN-Angebote benötigen, ziehen Sie eines in Betracht. Wenn Sie dies nicht tun, möchten Sie möglicherweise bei der (derzeit) überlegenen Desktop-Integration von SVN bleiben.

Oli
quelle
24
Könnte auch einen Blick auf Hg (Merkur) werfen
Joel
24
Seit Oktober 2008 ist es viel besser geworden. Sie können TortoiseGit installieren, die neueste tragbare Version von MSysGit herunterladen und TortoiseGit mitteilen, wo sie zu finden ist. Ich habe gerade mein großes SVN-Repo auf Git umgestellt, weil die schlechte Umbenennungsunterstützung von SVN mich schließlich wütend genug gemacht hat.
Wir sind alle Monica
4
Nach 2 Jahren haben wir jetzt einige gute Windows-Tools. Derzeit verwende ich Netbeans mit MSysGit. Ich hatte auch viel Glück mit TortoiseGit. Ich denke, es ist gut genug, um in der Produktion verwendet zu werden. In Anbetracht dessen, wie schwierig es ist, einfache Konflikte in Subversion Git zu verwalten, ist dies eine enorme Verbesserung.
Keyo
24
Wir verwenden Git unter Windows stark und haben es schon lange. Git ist unter Windows absolut fantastisch.
Charlie Flowers
13
@Oli Es wäre gut, Ihre Antwort (insbesondere über den Windows Git-Client) basierend auf den Kommentaren hier und Ihrer Erfahrung zu aktualisieren. Die aktuelle Antwort scheint voreingenommen zu sein, nachdem 2-3 Jahre vergangen sind, seit sie geschrieben wurde.
Amit
111

Ich habe dieses Konzept von "Git ist unter Windows nicht gut" nie verstanden. Ich entwickle ausschließlich unter Windows und hatte noch nie Probleme mit Git.

Ich würde definitiv Git über Subversion empfehlen; Es ist einfach so viel vielseitiger und ermöglicht eine "Offline-Entwicklung" auf eine Weise, die Subversion niemals wirklich könnte. Es ist auf fast jeder erdenklichen Plattform verfügbar und bietet mehr Funktionen, als Sie wahrscheinlich jemals verwenden werden.

Dunkler Shikari
quelle
9
Auf der anderen Seite hatte ich einige Probleme mit Git unter Windows, es hat wirklich seltsame Dinge mit meinem Repo gemacht. Und ich habe die neueste Version in Cygwin verwendet (es war ungefähr vor einem Monat).
Roman Plášil
7
@ Roman: Nun, der Cygwin-Port ist kaum dasselbe wie der native Win32-Port. Ich
gehe davon aus,
49
"mehr Funktionen als Sie wahrscheinlich jemals verwenden werden" ist eine rote Fahne in meinem Buch
BT
26
@ BT "rote Fahne" Ich bin anderer Meinung. Ich wünschte oft, es gäbe eine Möglichkeit, etwas zu tun, und nach einigem Suchen stelle ich fest, dass es einige Befehle gibt, von denen ich nichts wusste. Ich verwende GIT auch auf meinem Windows-Computer und habe noch keine größeren Probleme.
Testen123
@ testing123, aber dann handelt es sich nicht um Funktionen, die "Sie wahrscheinlich [n] jemals verwenden werden", weil Sie sie tatsächlich verwendet haben.
Mulllhausen
77

Hier ist eine Kopie einer Antwort, die ich auf eine doppelte Frage gegeben habe, die seitdem über Git vs. SVN (September 2009) gelöscht wurde .

Besser? Abgesehen von dem üblichen Link WhyGitIsBetterThanX unterscheiden sie sich:

Eines ist ein zentrales VCS, das auf einer billigen Kopie für Zweige und Tags basiert. Das andere (Git) ist ein verteiltes VCS, das auf einem Diagramm von Revisionen basiert. Siehe auch Kernkonzepte von VCS .


Dieser erste Teil erzeugte einige falsch informierte Kommentare, die vorgaben, dass der grundlegende Zweck der beiden Programme (SVN und Git) der gleiche ist, dass sie jedoch ganz unterschiedlich implementiert wurden.
Um den grundlegenden Unterschied zwischen SVN und Git zu verdeutlichen , möchte ich Folgendes umformulieren:

  • SVN ist die dritte Implementierung einer Revisionskontrolle : RCS, dann CVS und schließlich SVN Verzeichnisse von versionierten Daten verwalten. SVN bietet VCS-Funktionen (Beschriften und Zusammenführen), aber sein Tag ist nur eine Verzeichniskopie (wie ein Zweig, außer dass Sie nichts in einem Tag-Verzeichnis "berühren" sollen), und sein Zusammenführen ist immer noch kompliziert und basiert derzeit auf Meta -Daten hinzugefügt, um sich daran zu erinnern, was bereits zusammengeführt wurde.

  • Git ist eine Dateiinhaltsverwaltung (ein Tool zum Zusammenführen von Dateien), die zu einem echten Versionskontrollsystem entwickelt wurde , das auf einer DAG ( Directed Acyclic Graph ) von Commits basiert , bei der Verzweigungen Teil des Datenverlaufs sind (und keine Daten selbst) ) und wo Tags echte Metadaten sind.

Zu sagen, dass sie sich nicht "grundlegend" unterscheiden, weil man dasselbe erreichen, dasselbe Problem lösen kann, ist auf so vielen Ebenen ... einfach falsch.

  • Wenn Sie viele komplexe Zusammenführungen haben, ist die Ausführung mit SVN länger und fehleranfälliger. Wenn Sie viele Zweige erstellen müssen, müssen Sie diese verwalten und zusammenführen, was mit Git wiederum viel einfacher ist als mit SVN, insbesondere wenn eine große Anzahl von Dateien beteiligt ist (die Geschwindigkeit wird dann wichtig).
  • Wenn Sie teilweise Zusammenführungen für eine laufende Arbeit haben, nutzen Sie den Git-Staging-Bereich (Index), um nur das festzuschreiben, was Sie benötigen, den Rest zu verstauen und in einem anderen Zweig fortzufahren.
  • Wenn Sie eine Offline-Entwicklung benötigen ... mit Git sind Sie immer "online", mit Ihrem eigenen lokalen Repository, unabhängig vom Workflow, den Sie mit anderen Repositorys verfolgen möchten.

Trotzdem bestanden die Kommentare zu dieser alten (gelöschten) Antwort darauf:

VonC: Sie verwechseln grundlegende Unterschiede in der Implementierung (die Unterschiede sind sehr grundlegend, da sind wir uns beide einig) mit unterschiedlichen Zielen.
Beide Tools werden für den gleichen Zweck verwendet: Aus diesem Grund konnten viele Teams, die früher SVN verwendet haben, es recht erfolgreich zugunsten von Git ablegen.
Wenn sie nicht dasselbe Problem lösen würden , würde diese Substituierbarkeit nicht existieren.

, worauf ich antwortete:

"Substituierbarkeit" ... interessanter Begriff ( in der Computerprogrammierung verwendet ).
Natürlich ist Git kaum ein Subtyp von SVN.

Sie können mit beiden die gleichen technischen Funktionen (Tag, Verzweigung, Zusammenführen) erzielen, aber Git steht Ihnen nicht im Weg und ermöglicht es Ihnen, sich auf den Inhalt der Dateien zu konzentrieren , ohne über das Tool selbst nachzudenken.

Sie können SVN sicherlich nicht (immer) einfach durch Git ersetzen, "ohne die wünschenswerten Eigenschaften dieses Programms zu ändern (Korrektheit, ausgeführte Aufgabe, ...)" (was auf die oben genannte Substituierbarkeitsdefinition verweist ):

  • Eines ist ein erweitertes Revisionstool, das andere ein echtes Versionskontrollsystem.
  • Eines eignet sich für kleine bis mittlere monolithische Projekte mit einfachem Zusammenführungsworkflow und (nicht zu vielen) parallelen Versionen. SVN reicht für diesen Zweck aus, und Sie benötigen möglicherweise nicht alle Git-Funktionen.
  • Das andere ermöglicht mittlere bis große Projekte, die auf mehreren Komponenten basieren ( ein Repo pro Komponente ), mit einer großen Anzahl von Dateien, die zwischen mehreren Zweigen in einem komplexen Zusammenführungsworkflow zusammengeführt werden sollen, parallelen Versionen in Zweigen, Nachrüstzusammenführungen usw. Sie könnten es mit SVN tun, aber mit Git sind Sie viel besser dran.
    SVN kann einfach kein Projekt jeder Größe mit einem Zusammenführungsworkflow verwalten. Git kann.

Auch hier ist ihre Natur grundlegend anders (was dann zu einer unterschiedlichen Implementierung führt, aber das ist nicht der Punkt).
Einer sieht die Revisionskontrolle als Verzeichnisse und Dateien, der andere sieht nur den Inhalt der Datei (so sehr, dass leere Verzeichnisse nicht einmal in Git registriert werden!).

Das allgemeine Endziel mag dasselbe sein, aber Sie können sie nicht auf die gleiche Weise verwenden oder dieselbe Problemklasse (in Umfang oder Komplexität) lösen.

VonC
quelle
10
Ich bin nicht anderer Meinung als Sie, dass git und svn sich grundlegend unterscheiden, aber ich bin in vielen Ihrer Punkte nicht einverstanden. svn wurde möglicherweise geschrieben, um Lebensläufe zu ersetzen, aber sie stehen in keiner anderen Beziehung zueinander, während Lebensläufe als Skripte über RCS gestartet wurden, sodass eine direkte Beziehung besteht. Die Person, die Sie zitieren, hat jedoch vollkommen recht. Beide verwalten im Wesentlichen die Überarbeitung von Dateien. Die Implementierung und der Prozess, in dem dies geschieht (oder wie es geschieht), sind Implementierungsdetails. Es ist wie der Unterschied zwischen CRC und SHA1, grundsätzlich sehr unterschiedlich, aber sie machen dasselbe.
Erik Funkenbusch
37

2 Hauptvorteile von SVN, die selten genannt werden:

  1. Unterstützung für große Dateien. Zusätzlich zum Code verwende ich SVN, um mein Home-Verzeichnis zu verwalten. SVN ist das einzige VCS (verteilt oder nicht), das meine TrueCrypt-Dateien nicht verschluckt (bitte korrigieren Sie mich, wenn es ein anderes VCS gibt, das Dateien mit mehr als 500 MB effektiv verarbeitet). Dies liegt daran, dass Diff-Vergleiche gestreamt werden (dies ist ein sehr wesentlicher Punkt). Rsync ist nicht akzeptabel, da es nicht in beide Richtungen funktioniert.

  2. Auschecken / Einchecken des Teilrepositorys (Unterverzeichnisses). Mercurial und bzr unterstützen dies nicht und die Unterstützung von git ist begrenzt. Dies ist in einer Teamumgebung schlecht, aber von unschätzbarem Wert, wenn ich etwas von meinem Heimverzeichnis aus auf einem anderen Computer auschecken möchte.

Nur meine Erfahrungen.

user154489
quelle
6
"Bitte korrigieren Sie mich, wenn es ein anderes VCS gibt, das Dateien mit mehr als 500 MB effektiv verarbeitet" - Perforce natürlich!
James Creasy
8
Perforce = nicht frei. Außerdem ist Perforce nicht für alle Plattformen verfügbar.
WhyNotHugo
4
Warum nicht das SVN-Repo IN die TrueCrypt-Container legen? Sie können dies auch über ssh tunneln und den Server so konfigurieren, dass dieses bestimmte Repo in einer anderen TrueCrypt-Datei gespeichert wird. Dies hat den zusätzlichen Vorteil, dass Sie dieses Repo teilweise auschecken können.
WhyNotHugo
1
@Hugo Soweit ich weiß, ist der Perforce-Client für Windows-, Unix-, Linux-Varianten, Mac, Amiga, BeOS, Cygwin, HPUX, IBM AS / 400, OS / 2, DEC VMS und Novell File Server verfügbar. Fehlt eine relevante Plattform in der Liste?
Eis
1
Ja, OpenBSD (und ich wusste das aus Erfahrung, musste dies nicht googeln). Ich denke, es wird auch bei Maemo nicht funktionieren, obwohl ich mich vielleicht irre (und ja, ich benutze Git bei Maemo).
WhyNotHugo
25

Nachdem Sie weitere Nachforschungen angestellt und diesen Link überprüft haben: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

(Einige Auszüge unten):

  • Es ist unglaublich schnell. Kein anderes SCM, das ich verwendet habe, konnte damit Schritt halten, und ich habe viel verwendet, einschließlich Subversion, Perforce, Darcs, BitKeeper, ClearCase und CVS.
  • Es ist vollständig verteilt. Der Repository-Besitzer kann nicht vorschreiben, wie ich arbeite. Ich kann Zweige erstellen und Änderungen festschreiben, während die Verbindung zu meinem Laptop getrennt ist, und diese später mit einer beliebigen Anzahl anderer Repositorys synchronisieren.
  • Die Synchronisierung kann über viele Medien erfolgen. Ein SSH-Kanal über HTTP über WebDAV, über FTP oder durch Senden von E-Mails mit Patches, die vom Empfänger der Nachricht angewendet werden sollen. Ein zentrales Repository ist nicht erforderlich, kann aber verwendet werden.
  • Zweige sind sogar billiger als in Subversion. Das Erstellen eines Zweigs ist so einfach wie das Schreiben einer 41-Byte-Datei auf die Festplatte. Das Löschen eines Zweigs ist so einfach wie das Löschen dieser Datei.
  • Im Gegensatz zu Subversion tragen Zweige ihre gesamte Geschichte mit sich. ohne eine seltsame Kopie durchführen zu müssen und durch die Kopie zu gehen. Bei der Verwendung von Subversion war es immer umständlich, den Verlauf einer Datei in einem Zweig zu betrachten, der vor dem Erstellen des Zweigs aufgetreten ist. von #git: spearce: Ich verstehe nichts über SVN auf der Seite. Ich habe eine Verzweigung in SVN erstellt und beim Durchsuchen des Verlaufs wurde dem gesamten Verlauf eine Datei in der Verzweigung angezeigt
  • Das Zusammenführen von Zweigen ist in Git einfacher und automatischer. In Subversion müssen Sie sich merken, aus welcher Version Sie zuletzt zusammengeführt haben, damit Sie den richtigen Zusammenführungsbefehl generieren können. Git macht das automatisch und macht es immer richtig. Dies bedeutet, dass beim Zusammenführen von zwei Zweigen weniger Fehler auftreten können.
  • Zweigstellenzusammenführungen werden als Teil des ordnungsgemäßen Verlaufs des Repositorys aufgezeichnet. Wenn ich zwei Zweige zusammenführe oder wenn ich einen Zweig wieder in den Stamm zusammenführe, aus dem er stammt, wird dieser Zusammenführungsvorgang als Teil des Repostory-Verlaufs als von mir ausgeführt aufgezeichnet und wann. Es ist schwer zu bestreiten, wer die Zusammenführung durchgeführt hat, wenn sie genau dort im Protokoll steht.
  • Das Erstellen eines Repositorys ist eine triviale Operation: mkdir foo; cd foo; git init Das war's. Das heißt, ich erstelle heutzutage ein Git-Repository für alles. Ich benutze normalerweise ein Repository pro Klasse. Die meisten dieser Repositorys befinden sich unter 1 MB auf der Festplatte, da sie nur Vorlesungsnotizen, Hausaufgaben und meine LaTeX-Antworten speichern.
  • Die internen Dateiformate des Repositorys sind unglaublich einfach. Dies bedeutet, dass Reparaturen sehr einfach durchzuführen sind, aber noch besser, weil es so einfach ist, dass es sehr schwer ist, beschädigt zu werden. Ich glaube nicht, dass jemals jemand ein Git-Repository beschädigt hat. Ich habe gesehen, dass Subversion mit fsfs sich selbst beschädigt. Und ich habe gesehen, dass Berkley DB sich zu oft selbst beschädigt hat, um meinen Code dem BDB-Backend von Subversion anzuvertrauen.
  • Das Dateiformat von Git kann Daten sehr gut komprimieren, obwohl es ein sehr einfaches Format ist. Das CVS-Repository des Mozilla-Projekts umfasst ca. 3 GB. Es sind ungefähr 12 GB im fsfs-Format von Subversion. In Git sind es ungefähr 300 MB.

Nachdem ich das alles gelesen habe, bin ich überzeugt, dass Git der richtige Weg ist (obwohl es ein bisschen Lernkurve gibt). Ich habe Git und SVN auch auf Windows-Plattformen verwendet.

Ich würde gerne hören, was andere zu sagen haben, nachdem sie das Obige gelesen haben.

Waqar
quelle
14
Git ist bei einigen Vorgängen unglaublich schnell, hauptsächlich weil der Vorgang nur Ihr lokales Repository betrifft. Ein Git-Check-in sollte beispielsweise nicht zu Recht mit einem SVN-Check-in verglichen werden, da ein SVN-Check-in auch ein Push für die Änderung eines Staging-Repositorys für den Rest Ihres Teams ist. Dies erfordert einen Netzwerktreffer, und der Vergleich von Git's No Network Commit mit einer Netzwerkübertragung ist ein unangemessener Vergleich. Wenn Sie ein Commit durchführen und dann die Festplatte verlieren, haben Sie mit Git Ihre Änderung verloren. Das ist in Ordnung, wenn Sie dies erwarten, aber bei nicht verteilten SCMs nicht.
Edwin Buck
1
@ EdwinBuck Nicht berücksichtigt, was Waqar getan hat, in Tests selbst unter Berücksichtigung der Netzwerkzeit ist Git tendenziell schneller: git-scm.com/about/small-and-fast
Sqeaky
Ihr Punkt "Das Erstellen eines Repositorys ist eine triviale Operation" ist äußerst wichtig, insbesondere unter Windows: Im Vergleich zu SVN ist es viel einfacher, schnell eine Reihe miteinander verbundener verteilter Repos zu simulieren, die alle mit Git zu einem zentralen (--baren) Repo verbunden sind Dies geschieht analog zu SVN (Installation der Windows SVN-Serveranwendung usw.). Außerdem finde ich (bizarrerweise), dass Git unter allen Betriebssystemen konsistenter ist: Die Befehlszeile ist sehr gut gestaltet und daher die meiste Zeit (und zwischen den Betriebssystemen praktisch identisch) im Vergleich zu verschiedenen nativen SVN-Client / Server-Apps ...
Shivan Dragon
1
Der Wiki-Artikel, auf den Sie verweisen, ist voller Fehler. Daher ist Ihre Antwort falsch. Abgestimmt. Im Wiki gibt es eine Diskussionsseite, die auf svnvsgit.com verweist und erklärt , warum der Vergleich falsch ist.
Bahrep
Unglaublich schnell? Ich habe das ciforth-Projekt von einem lokalen Lebenslauf auf github verschoben. Dies ist ein einfaches Projekt, hat aber eine große Hauptquelldatei mit 10.000 Zeilen. Wenn ich versuche, diese Datei zu beschuldigen, fällt Github in eine Auszeit. Meistens ist es keine ausgewogene Meinung, wenn man sich nicht damit zufrieden gibt, schnell zu sagen, und darauf besteht, ein solches Qualifikationsmerkmal zu verwenden, was mich gegenüber allem, was Sie sagen, misstrauisch macht. Groetjes Albert
Albert van der Horst
12

Ich würde ein Subversion-Repository einrichten. Auf diese Weise können einzelne Entwickler wählen, ob sie Subversion-Clients oder Git-Clients (mit git-svn) verwenden möchten . Die Verwendung git-svnbietet Ihnen nicht alle Vorteile einer vollständigen Git-Lösung, bietet jedoch einzelnen Entwicklern ein hohes Maß an Kontrolle über ihren eigenen Workflow.

Ich glaube, es wird relativ kurze Zeit dauern, bis Git unter Windows genauso gut funktioniert wie unter Unix und Mac OS X (seit Sie gefragt haben).

Subversion verfügt über hervorragende Tools für Windows, z. B. TortoiseSVN für die Explorer-Integration und AnkhSVN für die Visual Studio-Integration.

Greg Hewgill
quelle
11

Das Lustige ist: Ich hoste Projekte in Subversion Repos, greife aber über den Befehl Git Clone darauf zu.

Bitte lesen Sie Entwickeln mit Git in einem Google Code-Projekt

Obwohl Google Code nativ Subversion spricht, können Sie Git während der Entwicklung problemlos verwenden. Die Suche nach "git svn" legt nahe, dass diese Praxis weit verbreitet ist, und wir empfehlen Ihnen auch, damit zu experimentieren.

Die Verwendung von Git in einem Svn-Repository bietet mir folgende Vorteile:

  1. Ich kann verteilt auf mehreren Maschinen arbeiten, Commits ausführen und von und zu ihnen ziehen
  2. Ich habe ein zentrales backup/public SVN-Repository, das andere auschecken können
  3. Und sie können Git für sich selbst verwenden
Andre Bossard
quelle
3
Nur ein Hinweis: Ab Juli 2011 unterstützt Google Code Git nativ.
Jeremy Salwen
9

Nicht wirklich Ihre Frage beantworten, aber wenn Sie die Vorteile von wollen verteilten Revisionssteuerung nutzen - es hört sich so an - und Windows verwenden, sollten Sie Mercurial besser verwenden, als Git als Mercurial eine viel bessere Windows-Unterstützung bietet. Mercurial hat auch einen Mac-Port.

Dave Webb
quelle
9

Wenn Ihr Team bereits mit Versions- und Quellcodeverwaltungssoftware wie cvs oder svn vertraut ist, würde ich Ihnen für ein einfaches und kleines Projekt (wie Sie es behaupten) empfehlen, sich an SVN zu halten. Ich bin sehr zufrieden mit svn, aber für das aktuelle E-Commerce-Projekt, das ich auf django mache, habe ich beschlossen, an git zu arbeiten (ich verwende git im svn-Modus, dh mit einem zentralisierten Repo, zu dem ich drücke und ziehe von, um mit mindestens einem anderen Entwickler zusammenzuarbeiten). Der andere Entwickler ist mit SVN vertraut, und obwohl die Erfahrungen anderer unterschiedlich sein mögen, haben wir beide eine wirklich schlechte Zeit, Git für dieses kleine Projekt anzunehmen. (Wir sind beide Hardcore-Linux-Benutzer, wenn es überhaupt darauf ankommt.)

Ihr Kilometerstand kann natürlich variieren.

Ayaz
quelle
8

Auf jeden Fall svn, da Windows bestenfalls ein Bürger zweiter Klasse in der Welt von ist git(siehe http://en.wikipedia.org/wiki/Git_(software)#Portability für weitere Details).

UPDATE: Entschuldigung für den defekten Link, aber ich habe es aufgegeben, SO dazu zu bringen, mit URIs zu arbeiten, die Klammern enthalten. [Link jetzt behoben. -ed]

Hank Gay
quelle
1
Zu Ihrer Information: Fügen Sie die URL in spitze Klammern ein oder ersetzen Sie Klammern durch% 28 und% 29.
PhiLho
1
Funktioniert die URL-Codierung für die Syntax [] ()?
Hank Gay
16
Dies ist eine falsche FUD. Git ist fantastisch unter Windows. Und SVN ist überall ziemlich schlecht.
Charlie Flowers
6
Für all diejenigen, die mich ablehnen, gehen Sie bitte zurück und sehen Sie sich die Entwicklerkommentare von circa 2008 an: Es ist ziemlich klar, dass Linus und die Bande sich nicht dafür interessierten, Windows zu unterstützen. Das ist in Ordnung: Ich möchte es auch nicht wirklich tun, und meine Software ist bei weitem nicht so komplex wie VCS, das vom Dateisystem POSIXish-Verhalten erwartet. Es erscheint jedoch unfair, meine Aussage als FUD zu charakterisieren, wenn man den Kontext betrachtet.
Hank Gay
2
Vielleicht war Git 2008 unter Windows schlecht, aber ich benutze msysgit seit 2009 und es funktioniert einwandfrei. Dazu gehört gitk, das Offline-Desktop-Äquivalent von GitHub.
Dan Dascalescu
8

Der Hauptpunkt ist, dass Git ein verteiltes VCS und Subversion ein zentrales ist. Verteilte VCSs sind etwas schwieriger zu verstehen, haben aber viele Vorteile. Wenn Sie diese Vorteile nicht benötigen, ist Subversion möglicherweise die bessere Wahl.

Eine andere Frage ist die Werkzeugunterstützung. Welches VCS wird von den Tools, die Sie verwenden möchten, besser unterstützt?

EDIT: Vor drei Jahren habe ich so geantwortet:

Und Git funktioniert derzeit unter Windows nur über Cygwin oder MSYS . Subversion unterstützte Windows von Anfang an. Da die Git-Lösungen für Windows möglicherweise für Sie funktionieren, kann es zu Problemen kommen, da die meisten Entwickler von Git mit Linux arbeiten und von Anfang an keine Portabilität im Kopf hatten. Im Moment würde ich Subversion für die Entwicklung unter Windows bevorzugen. In einigen Jahren kann dies irrelevant sein.

Jetzt hat sich die Welt ein wenig verändert. Git hat jetzt eine gute Implementierung unter Windows. Obwohl ich unter Windows nicht gründlich getestet habe (da ich dieses System nicht mehr verwende), bin ich ziemlich zuversichtlich, dass alle wichtigen VCS (SVN, Git, Mercurial, Bazaar) jetzt eine ordnungsgemäße Windows-Implementierung haben. Dieser Vorteil für SVN ist weg. Die anderen Punkte (Zentralisiert vs. Verteilt und Überprüfung auf Werkzeugunterstützung) bleiben gültig.

Mnementh
quelle
Ich bin optimistisch, dass der Horizont der Irrelevanz viel kürzer als einige Jahre sein wird.
Greg Hewgill
Ja, möglicherweise wird es nur ein Jahr. Git hat eine dynamische Entwicklungsgemeinschaft. Aber Subversion hat auch. In ein oder zwei Jahren müssen Sie sich beide noch einmal ansehen, um diese Frage zu beantworten.
Mnementh
1
Es ist jetzt ein oder zwei Jahre später. Wie sieht es aus? :)
Merlyn Morgan-Graham
3
Git fehlt eine Erweiterung des verteilten SCM-Modells auf die anderen Phasen der Softwareentwicklungspipeline. Wir haben kein gutes Modell für verteilte Release-Build-Systeme, verteilte automatisierte Tests, Qualitätskontrolle, Release-Kontrolle usw. Wir erhalten nur experimentelle Unterstützung für verteiltes Backup, und das nach Jahrzehnten der Forschung. Als solches bietet Git dem Entwickler mehr und weniger dem Softwareentwicklungsprozess. Alle Git-Implementierungen segnen schließlich ein Repo als das zentrale, was die interessantesten Git-Fähigkeiten in Faksimiles von SVN-Fähigkeiten vereinfacht.
Edwin Buck
1
@hibbelig Git hat kein zentrales Repository, jedes Repository ist (aufgrund seines verteilten Designs) gleich. Dies bedeutet, dass Sie entweder Ihre Produktionspipeline überarbeiten, um möglicherweise alle Repositorys gleich zu behandeln, oder ein Repository künstlich segnen, um den Status "künstlich erhöht" zu haben (auch bekannt als zentrales Repository ). Wenn Sie das erstere tun, weiß niemand viel über das Erstellen paralleler Pipelines, bei denen eine Freigabe von einem Entwickler-Desk kommen könnte. Wenn Sie das letztere tun, wird das Versprechen einer verteilten Verarbeitung durch eine zentralisierte Konvention betrogen.
Edwin Buck
6

Ich würde mich für SVN entscheiden, da es weiter verbreitet und bekannter ist.

Ich denke, Git wäre besser für Linux-Benutzer.

Burkhard
quelle
1
Dies ändert sich jedoch schnell. SVN verliert Marktanteile, während GIT gewinnt: Zum Beispiel: wikivs.com/wiki/Git_vs_Subversion#Popularity oder programmers.stackexchange.com/questions/136079/…
Zelphir Kaltstahl
@Zelphir: Ich würde 7 Jahre nicht schnell anrufen, aber ja, GIT gewinnt Marktanteile und ist besonders viel besser zum Zusammenführen von Dateien.
Burkhard
4

Git wird unter Windows noch nicht nativ unterstützt. Es ist für Posix-Systeme optimiert. Wenn Sie jedoch Cygwin oder MinGW ausführen, können Sie Git erfolgreich ausführen.

Heutzutage bevorzuge ich Git gegenüber SVN, aber es dauert eine Weile, bis die Schwelle überschritten ist, wenn Sie aus CVS, SVN-Land kommen.


quelle
8
Definieren Sie 'nativ'. msysgit funktioniert gut
Milan Babuškov
4

Ich würde wahrscheinlich Git wählen, weil ich denke, dass es viel leistungsfähiger als SVN ist. Es gibt günstige Code-Hosting-Dienste, die für mich einfach großartig funktionieren - Sie müssen keine Backups oder Wartungsarbeiten durchführen - GitHub ist der offensichtlichste Kandidat.

Trotzdem weiß ich nichts über die Integration von Visual Studio und den verschiedenen SCM-Systemen. Ich stelle mir die Integration mit SVN deutlich besser vor.

Christoph Schiessl
quelle
4

Ich habe SVN schon lange verwendet, aber wann immer ich Git verwendet habe, hatte ich das Gefühl, dass Git sehr leistungsfähig und leicht ist und zwar ein wenig Lernaufwand erfordert, aber besser als SVN ist.

Was ich bemerkt habe ist, dass jedes SVN-Projekt, wenn es wächst, zu einem sehr großen Projekt wird, wenn es nicht exportiert wird. Wobei das GIT-Projekt (zusammen mit Git-Daten) sehr leicht ist.

In SVN habe ich mich mit Entwicklern vom Anfänger bis zum Experten befasst, und die Anfänger und Fortgeschrittenen scheinen Dateikonflikte einzuführen, wenn sie einen Ordner aus einem anderen SVN-Projekt kopieren, um ihn wiederzuverwenden. Ich denke, in Git kopiert man einfach den Ordner und es funktioniert, weil Git nicht in allen Unterordnern .git-Ordner einführt (wie SVN).

Nachdem ich mich seit langer Zeit viel mit SVN beschäftigt habe, denke ich endlich darüber nach, meine Entwickler und mich auf Git zu verlagern, da es einfach ist, zusammenzuarbeiten und die Arbeit zusammenzuführen. Ein großer Vorteil ist, dass die Änderungen einer lokalen Kopie so viel übernommen werden können gewünscht und dann im Gegensatz zu SVN (wo wir die Änderungen von Zeit zu Zeit im Repository auf dem Server festschreiben müssen) auf einmal in den Zweig auf dem Server verschoben.

Wer kann mir bei der Entscheidung helfen, ob ich wirklich mit Git gehen soll?

Waqar
quelle
Ich würde keinen Entwickler anrufen, der einen SVN-gesteuerten Ordner in ein anderes Projekt kopiert hat, um ihn wiederzuverwenden, und keine offensichtlichen Probleme als "mittelschwer" erwartet. Ich würde sie Anfänger nennen. Ja, Sie haben Recht, es liegt am Unterordner .svn, der SVN mitteilt, zu welchem ​​Repository die Dateien gehören. Wenn der Benutzer diesen .svn-Unterordner gelöscht hat, kann er den Ordner in das neue SVN-Projekt importieren. Ich bin selbst immer noch bei SVN, aber meine Bedürfnisse sind gering. GIT eignet sich hervorragend für größere Projekte.
Dyasta
3
Die neuesten SVN-Clients benötigen nicht .svnin jedem Unterverzeichnis einen Ordner. Das "behebt" den Kopierfehler, bevor er auftritt.
Edwin Buck
4

Es kommt darauf an:

Wird Ihre Entwicklung linear sein? Wenn ja, sollten Sie bei Subversion bleiben.

Wenn andererseits Ihre Entwicklung nicht linear ist, was bedeutet, dass Sie eine Verzweigung für verschiedene Änderungen erstellen und diese Änderungen dann wieder mit der Hauptentwicklungszeile (Git als Master-Verzweigung bekannt) zusammenführen müssen, dann tut Git dies VIEL mehr für dich.

seedg
quelle
3

Hast du es mit Bzr versucht ? ?

Es ist ziemlich gut, Connonical (die Leute, die Ubuntu machen) haben es geschafft, weil sie nichts anderes auf dem Markt mochten ...

Omar Kooheji
quelle
Die Windows-Unterstützung braucht hier allerdings wirklich ein bisschen Arbeit. Nicht so sehr, dass ich es nicht ganz glücklich für all meine letzten Programme unter Windows verwendet habe (von denen ich ein
gutes
Es war fast 100% der Zeit mit Betriebssystem, dass die Leute "es [jede Software] gemacht haben, weil sie nichts anderes auf dem Markt mochten".
WhyNotHugo
@Hugo Mit Open Source würden sie, wenn sie etwas anderes auf dem Markt mögen, dazu beitragen, anstatt etwas Neues zu machen.
Yingted
Dies ist überhaupt keine Antwort auf die Frage
Albert van der Horst
@ AlbertvanderHorst Nein, ist es nicht, die Frage wurde in den Tagen des Wilden Westens von SO beantwortet, als niemand es besser wusste, und bot eine Alternative an. In meiner Eile sieht es so aus, als hätte ich auch den Namen von Canonical falsch geschrieben. Schande über mich!
Omar Kooheji
3

Darf ich die Frage erweitern und fragen, ob Git unter MacOS gut funktioniert?

Antwort auf Kommentare: Danke für die Neuigkeiten, ich hatte mich darauf gefreut, es auszuprobieren. Ich werde es zu Hause auf meinem Mac installieren.

Robert Gould
quelle
1
Ja, es funktioniert wunderbar. Ich habe es über MacPorts installiert und benutze es täglich.
Greg Hewgill
Es tut. Es ist großartig auf jedem POSIX-basierten System (Unix, Linux, Solaris, BSD usw.). Es ist wirklich nur Windows, wo das Problem liegt.
Oli
und git-gui und gitk funktionieren unter OS-X wahrscheinlich genauso wie unter Linux und Windows. Welche AFAIK ist im Gegensatz zu tortoiseSVN nur für Fenster?
David Schmitt
@ David Schmitt: Nun, tortoisesvn.tigris.org nennt es eine "Windows Shell-Erweiterung für Subversion", also würde ich das annehmen, ja ;-).
SamB
@ Robert: Wie war deine Erfahrung mit Git unter OS X?
David Schmitt
2

SVN scheint unter Windows eine gute Wahl zu sein, wie andere Leute zeigen.

Wenn einige Ihrer Entwickler GIT ausprobieren möchten, verwendet er möglicherweise immer GIT-SVN, wobei das SVN-Repository in einem GIT-Repository neu erstellt wird. Dann sollte er in der Lage sein, lokal mit GIT zu arbeiten und dann SVN zu verwenden, um seine Änderungen im Hauptrepository zu veröffentlichen.

Pierre
quelle
1

Sie müssen mit einem DVCS gehen, es ist wie ein Quantensprung in der Quellcodeverwaltung. Persönlich benutze ich Monotone und seine beschleunigte Entwicklungszeit hat kein Ende. Wir verwenden es für Windows, Linux und Mac und es war sehr stabil. Ich habe sogar einen Buildbot, der jeden Abend das Projekt auf jeder der Plattformen erstellt.

Während der Verteilung von DVCS bedeutet dies normalerweise, dass Sie einen zentralen Server erstellen, auf dem die Benutzer Änderungen vornehmen können.

Phil Hannent
quelle