Ich starte ein neues verteiltes Projekt. Soll ich SVN oder Git verwenden und warum?
SVN ist ein Repo und viele Kunden. Git ist ein Repo mit vielen Kunden-Repos, jedes mit einem Benutzer. Es ist bis zu einem Punkt dezentralisiert, an dem Benutzer ihre eigenen Bearbeitungen lokal verfolgen können, ohne Dinge auf einen externen Server übertragen zu müssen.
SVN ist zentraler konzipiert, wenn Git darauf basiert, dass jeder Benutzer sein eigenes Git-Repo hat und diese Repos Änderungen wieder in ein zentrales Repo ü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, haben Sie ihr eigenes client - GitHub für Windows ).
Wenn Sie aus dem SVN aussteigen möchten, sollten Sie Bazaar ein wenig auswerten. Es ist eines der nächsten Versionskontrollsysteme mit diesem verteilten Element. Es ist nicht POSIX-abhängig wie git, daher gibt es native Windows-Builds und es werden einige leistungsstarke Open-Source-Marken unterstützt.
Möglicherweise benötigen Sie diese Funktionen jedoch noch nicht. Schauen Sie sich die Merkmale, 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, sollten Sie sich an die (derzeit) überlegene Desktop-Integration von SVN halten.
Ich habe dieses Konzept von "git is not good on Windows" 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 erlaubt "Offline-Entwicklung" in einer Weise, wie es Subversion niemals wirklich könnte. Es ist auf fast jeder erdenklichen Plattform verfügbar und verfügt über mehr Funktionen, als Sie wahrscheinlich jemals nutzen werden.
Hier ist eine Kopie einer Antwort, die ich aus einer doppelten Frage gemacht 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 billigen Kopien für Zweige und Tags basiert, das andere (Git) ist ein verteiltes VCS, das auf einem Revisionsdiagramm basiert. Siehe auch Kernkonzepte von VCS .
Dieser erste Teil erzeugte einige falsch informierte Kommentare, in denen behauptet wurde, dass der grundlegende Zweck der beiden Programme (SVN und Git) der gleiche ist, dass sie jedoch sehr unterschiedlich implementiert wurden.
Um den grundlegenden Unterschied zwischen SVN und Git zu verdeutlichen, möchte ich Folgendes umformulieren:
SVN ist die dritte Implementierung eines Revision Steuerelements : RCS, dann CVS und schließlich SVN Verzeichnisse verwalten versionierter Daten. SVN bietet VCS-Funktionen (Beschriften und Zusammenführen), aber sein Tag ist nur eine Verzeichniskopie (wie eine Verzweigung, außer dass Sie nichts in einem Tag-Verzeichnis "anfassen" sollen), und sein Zusammenführen ist immer noch kompliziert, derzeit basiert es auf Meta -data hinzugefügt, um sich daran zu erinnern, was bereits zusammengeführt wurde.
Git ist ein File Content Management (ein Tool zum Zusammenführen von Dateien), entwickelt zu einem echten Versionskontrollsystem, basierend auf einer DAG ( Directed Azyklisches Diagramm von Commits, wobei Verzweigungen Teil des Datenverlaufs sind (und keine Daten selbst) und Tags echte Metadaten sind.
Zu sagen, dass sie sich nicht "grundlegend" voneinander unterscheiden, weil Sie dasselbe erreichen, dasselbe Problem lösen können, ist ... auf so vielen Ebenen einfach falsch.
Dennoch 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 ist es vielen Teams, die zuvor SVN verwendet haben, recht erfolgreich gelungen, dieses Tool zugunsten von Git zu verwenden.
Wenn sie nicht dasselbe Problem lösen würden, gäbe es diese Substituierbarkeit nicht.
, auf die ich antwortete:
"Substituierbarkeit" ... interessanter Begriff ( , der in der Computerprogrammierung verwendet wird ).
Natürlich ist Git kaum ein Subtyp von SVN.
Sie können mit beiden die gleichen technischen Funktionen (Tag, Branch, Merge) 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 mit Sicherheit nicht (immer) einfach durch Git ersetzen, "ohne die gewünschten Eigenschaften dieses Programms (Korrektheit, durchgeführte Aufgabe, ...) zu ändern" (dies ist ein Verweis auf die oben genannte Substituierbarkeitsdefinition ):
Wieder ihre Natur ist grundlegend anders (was dann zu einer unterschiedlichen Implementierung führt, aber das ist nicht der Punkt).
Einer sieht die Versionskontrolle als Verzeichnisse und Dateien, der andere sieht nur den Inhalt der Datei (so sehr, dass sich leere Verzeichnisse nicht einmal in Git registrieren!).
Das allgemeine Endziel mag dasselbe sein, aber Sie können sie nicht auf die gleiche Weise verwenden, noch können Sie dieselbe Klasse von Problemen (in Umfang oder Komplexität) lösen.
2 Hauptvorteile von SVN, die selten genannt werden:
Unterstützung für große Dateien. Zusätzlich zum Code verwalte ich mein Home-Verzeichnis mit SVN. SVN ist das einzige VCS (verteilt oder nicht), das meine TrueCrypt-Dateien nicht beeinträchtigt (bitte korrigieren Sie mich, wenn es ein anderes VCS gibt, das 500 MB + Dateien effektiv verarbeitet). Dies liegt daran, dass Diff-Vergleiche gestreamt werden (dies ist ein sehr wichtiger Punkt). Rsync ist nicht akzeptabel, da es nicht in beide Richtungen funktioniert.
Partial Repository (Subdir) Check-Out/Check-In. 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 auf einem anderen Computer von meinem Heimatverzeichnis aus überprüfen möchte.
Nur meine Erfahrungen.
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):
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 ich das oben Gesagte gelesen habe.
Ich würde ein Subversion-Repository einrichten. Auf diese Weise können einzelne Entwickler auswählen, ob sie Subversion-Clients oder Git-Clients verwenden möchten (mit git-svn
). Mit git-svn
bietet Ihnen nicht alle Vorteile einer vollständigen Git-Lösung, aber es gibt einzelnen Entwicklern viel Kontrolle über ihren eigenen Workflow.
Ich glaube, es wird eine 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, wie z. B. TortoiseSVN für die Explorer-Integration und AnkhSVN für die Visual Studio-Integration.
Das Lustige ist: Ich hoste Projekte in Subversion Repos, greife aber über den Git Clone-Befehl darauf zu.
Lesen Sie bitte Entwickeln mit Git in einem Google Code-Projekt
Obwohl Google Code von Haus aus Subversion spricht, können Sie Git während der Entwicklung problemlos verwenden. Die Suche nach "git svn" deutet darauf hin, dass diese Praxis weit verbreitet ist, und auch wir empfehlen Ihnen, damit zu experimentieren.
Die Verwendung von Git in einem Svn-Repository bietet mir folgende Vorteile:
backup/public
SVN-Repository für andere zum AuscheckenAuf jeden Fall svn
, da Windows im besten Fall ein Bürger zweiter Klasse in der Welt von git
ist (siehe http://en.wikipedia.org/wiki/Git_ ( Software) #Portability für weitere Details).
UPDATE: Entschuldigung für den defekten Link, aber ich habe aufgehört, zu versuchen, SO) mit URIs zu arbeiten, die Klammern enthalten. [Link jetzt behoben. -Ed]
Wenn Ihr Team bereits mit Versions- und Versionsverwaltungssoftware wie cvs oder svn vertraut ist, würde ich Ihnen empfehlen, sich für ein einfaches und kleines Projekt (wie Sie behaupten) an SVN zu halten. Ich bin sehr zufrieden mit SVN, aber für das aktuelle E-Commerce-Projekt, das ich auf Django durchführe, habe ich mich entschieden, an Git zu arbeiten (ich verwende Git im SVN-Modus, dh mit einem zentralisierten Repo, zu dem ich Push-to- und Pull-Funktionen ausführe) aus, um mit mindestens einem anderen Entwickler zusammenzuarbeiten). Der andere Entwickler ist mit SVN einverstanden, und obwohl die Erfahrungen anderer unterschiedlich sind, fällt es uns beiden sehr schwer, uns auf dieses kleine Projekt einzulassen. (Wir sind beide Hardcore-Linux-Benutzer, wenn es überhaupt darauf ankommt.)
Ihr Kilometerstand kann natürlich variieren.
Beantworte deine Frage nicht wirklich, aber wenn du die Vorteile von Distributed Revision Control nutzen willst, klingt es so, wie du es tust - und du verwendest Windows, denke ich. ' Verwenden Sie besser Mercurial , als dass Git als Mercurial eine viel bessere Windows-Unterstützung bietet. Mercurial hat auch einen Mac-Port.
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 momentan 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. Momentan würde ich Subversion für die Entwicklung unter Windows vorziehen. In einigen Jahren kann dies irrelevant sein.
Jetzt hat sich die Welt ein bisschen verändert. Git hat jetzt eine gute Implementierung für Windows. Obwohl ich nicht gründlich auf Windows getestet habe (da ich dieses System nicht mehr benutze), 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 (Centralized vs. Distributed und die Überprüfung auf Tool-Unterstützung) bleiben gültig.
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.
Es kommt darauf an:
Wird Ihre Entwicklung linear sein? Wenn ja, sollten Sie bei Subversion bleiben.
Wenn andererseits Ihre Entwicklung nicht linear ist, müssen Sie für verschiedene Änderungen eine Verzweigung erstellen und diese Änderungen dann wieder in der Hauptentwicklungslinie (Git als Master-Verzweigung bekannt) zusammenführen VIEL mehr für dich.
Ich habe SVN für eine lange Zeit verwendet, aber wann immer ich Git verwendete, hatte ich das Gefühl, dass Git viel leistungsfähiger und leichter ist und obwohl ein wenig Lernaufwand erforderlich ist, ist es besser als SVN.
Was ich bemerkt habe, ist, dass jedes SVN-Projekt, wenn es wächst, ein sehr großes Projekt wird, es sei denn, es wird exportiert. Wobei das GIT-Projekt (zusammen mit Git-Daten) sehr leicht ist.
In SVN habe ich mich mit Entwicklern befasst, von Anfängern bis zu Experten, 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 kopieren Sie einfach den Ordner und es funktioniert, weil Git nicht in allen Unterordnern .git-Ordner einführt (wie in SVN).
Nachdem ich mich seit langer Zeit viel mit SVN befasst habe, überlege ich mir nun endlich, 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 wie möglich übernommen werden können gewünscht, und schließlich auf einmal in den Zweig auf dem Server verschoben, im Gegensatz zu SVN (wo wir die Änderungen von Zeit zu Zeit im Repository auf dem Server festschreiben müssen).
Wer kann mir bei der Entscheidung helfen, ob ich mich wirklich für Git entscheiden soll?
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 man die Schwelle überschreitet, wenn man aus CVS, SVN-Land kommt.
Ich würde mich wahrscheinlich für Git entscheiden, da es meiner Meinung nach viel leistungsfähiger ist als SVN. Es gibt günstige Code-Hosting-Dienste, die für mich einfach großartig sind - Sie müssen keine Backups oder Wartungsarbeiten durchführen - GitHub ist der naheliegendste Kandidat.
Allerdings weiß ich nichts über die Integration von Visual Studio und den verschiedenen SCM-Systemen. Ich stelle mir die Integration mit SVN um einiges besser vor.
Auf YouTube gibt es dazu ein interessantes Video. Es ist von Linus Torvalds selbst: Google Tech Talk: Linus Torvalds auf git
Darf ich die Frage erweitern und fragen, ob Git unter MacOS gut funktioniert?
Antwort auf Kommentare: Vielen Dank für die Nachricht, ich hatte mich darauf gefreut, es auszuprobieren. Ich werde es zu Hause auf meinem Mac installieren.
hast du es versucht Bzr ?
Es ist ziemlich gut, konnonisch (die Leute, die Ubuntu machen), weil sie nichts anderes auf dem Markt mochten ...
SVN scheint unter Windows eine gute Wahl zu sein, wie von anderen Leuten betont.
Wenn einige Entwickler GIT ausprobieren möchten, wird möglicherweise immer GIT-SVN verwendet, wobei das SVN-Repository in einem GIT-Repository neu erstellt wird. Dann sollte er in der Lage sein, lokal mit GIT zu arbeiten und die Änderungen mithilfe von SVN im Hauptrepository zu veröffentlichen.
Man muss sich für ein DVCS entscheiden, 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 nächtliche Builds des Projekts auf jeder der Plattformen durchführt.
DVCS bedeutet in der Regel, dass Sie während der Verteilung einen zentralen Server erstellen, auf den Benutzer Änderungen übertragen können.