SCM-Auswahl für einen neuen Benutzer? [geschlossen]

7

Echt einfach hier Jungs. Beste Begründung bekommt den Sieg.

Ich bin Informatikstudent an einer Schule, von der Sie schon gehört haben, und programmieren seit einigen Jahren (etwa 8), also habe ich ein paar Zeilen Code geschrieben. Aber da ich nie wirklich verteilt habe - Quelle oder Binärdateien - noch Teamentwicklung betreibe (obwohl ich mir sicher bin!), Musste ich nie Quellcodeverwaltungssysteme lernen. Ich habe eine enorm langweilige Hierarchie von Ordnern in der Art von src/project_name oder src/class_code/hw_or_project_name , und wenn ich den Code an einen Freund oder eine Bewertung senden muss, ist es nur ein Tarball entfernt.

Einige Dinge haben sich in den letzten Jahren verändert, da meine Projekte größer geworden sind. Mein Mac mit Time Machine macht jetzt stündliche Backups - das hat mich ein paar Mal gerettet, zuletzt, als ich größere Änderungen an SSH vorgenommen habe ... und dann die veraltete Kopie einige Stunden später in meinem Editor gespeichert und geschlossen.

Aber aus einem beruflichen Interesse heraus - zusammen mit dem überwältigenden Gefühl, dass es nützlich sein könnte - habe ich beschlossen, SCMS zu lernen. Jetzt habe ich viel Erfahrung als Quellcode 'Consumer' - git clone , svn checkout , cvs co , diese Art von Sache - aber keine als Betreuer, Committer oder Updater.

Meine Frage an Sie lautet: Was soll ich lernen? Nun, ein paar von euch schreien "Warum? Du wirst viele benutzen!" aber ich würde gerne die Grundlagen von SCM lernen und die Gewohnheiten der tatsächlichen Verwendung auf dem einfachsten System anwenden. Es gibt eine Reihe von Konzepten, die ich gut verinnerlichen könnte - Zweige, Tags, Zusammenführung, Zusammenarbeit usw. - bevor ich sie wirklich brauche.

Um klar zu sein, ich bin kein Linus Torvalds. Ich werde einen oder vielleicht ein paar Zweige halten. Auf meinen dutzenden Dateien macht es mir nichts aus, wenn einige Operationen auf einem System einige hundert ms mehr benötigen als auf anderen.

Was habe ich jetzt? Ich habe einen Webhost. Sie bieten Subversion Hosting einen Klick entfernt, oder ich könnte andere Repositories dort kein Problem speichern. Aus Gründen, die ich nicht erklären kann, bin ich eher subversiv gegenüber Subversion. Aber genau deshalb zögere ich, einfach reinzuspringen. Ich weiß, Mercurial, Git und so weiter sind die heißen neuen Dinge, die verteilt werden, aber ich bin nicht sicher, warum das ein Vorteil ist. In der Tat bin ich nicht ganz sicher, wie es funktionieren könnte.

Also, womit soll ich anfangen? Subversion oder Git? Mercurial oder CVS? Visual Source Safe oder Perforce? (Das letzte Paar war ein Witz) Und warum einer über den anderen?

Vielen Dank für Ihre Zeit, und wenn dies in der falschen Sektion ist, entschuldige ich mich.

BEARBEITEN Vielen Dank! Ich freue mich über Ihre Kommentare. Angesichts der Wahl zwischen Git und Hg, würde ich wahrscheinlich mit Git gehen - jede Meinungsverschiedenheit? Zweitens, warum nicht Subversion? Es scheint der Konsens (nicht nur hier) zu sein, dass er alt oder anderweitig obsolet ist. Warum ist das?

EDIT 2 Nachdem ich alle Antworten gelesen und ein wenig mehr gelesen habe, habe ich beschlossen, mit Git zu gehen. "Antwort" geht auf die beste Begründung, wie oben erwähnt. Git scheint beliebter zu sein als Mercurial, auch wenn es ein bisschen weniger sauber ist. Ich dränge Änderungen auf meinen Webserver, wo ich viewgit installiert habe, und es funktioniert großartig. Der Anstoß zum Speichern einer Kopie auf meinem Webserver ist, dass ich gerne von mehreren meiner Maschinen aus arbeiten würde und ich erwarte, dass sie nicht mehr synchron sind. Ich erwarte auch, dass die verschiedenen Arbeitskopien nicht mehr miteinander und mit meinem Server synchronisiert sind, und ich verstehe jetzt, dass Subversion ziemlich schwach darin ist. Es gibt eine Menge, die ich noch auszuarbeiten versuche, aber ich habe es jetzt eingerichtet, damit ich von http ziehen / klonen kann und über ssh drehe (nächster Schritt ist Gitosis einzurichten). Für einen Neuling, der versucht, das zu tun, was ich gerade tue - Sie werden feststellen, dass Ihre "Push" -Befehle beim ersten Mal funktionieren, aber alle "geklonten" Kopien werden die von Ihnen vorgenommenen Änderungen nicht verfolgen. Git hält dies für ein Sicherheitsmerkmal ... Ich verstehe nur ein wenig warum, aber es hat mit der Verschmelzung zu tun. Der Trick besteht darin, diesen Post-Update-Hook auf dem Server zu verwenden, um die neu gepushte Kopie in den Server zu integrieren kopieren.

    
Robert 12.12.2010, 06:31
quelle

8 Antworten

12
  

Angesichts der Wahl zwischen Git und Hg würde ich wahrscheinlich mit Git gehen - keine Meinungsverschiedenheit?

Warnung, ich bin ein merkwürdiger Fanboy.

Git ist nicht schlecht, aber es hat einige Macken, die du wissen musst, wenn du es benutzt:

  • Sie können in ein nicht leeres Git-Repo pushen, aber das wird die Arbeitskopie dort vermasseln (Es bewegt den Zweig HEAD zu der verschobenen Revision, aber aktualisiert die Arbeitskopie nicht. Wenn Sie diesen Push nicht kennen Das nächste Commit wird die Änderungen rückgängig machen, die in den Repo gepusht wurden, gemischt mit den Änderungen, die Sie gerade eingeführt haben. In hg einen Push zu einem nicht-bloßen Repo fügen Sie einfach den neuen Verlauf zum Repo hinzu, und Sie erhalten einen neuen Kopf für Ihren nächsten Commit, den Sie dann mit dem Push-Kopf verschmelzen können.
  • Sie können nicht einfach zwischen einem blanken und einem nicht blanken Repo wechseln (Sie können ein hg-Repository mit hg up -r null freilegen und eine Arbeitskopie mit hg up [some-revision] von einem bare bekommen).
  • Wenn Sie eine ältere Revision mit einem Tag, einem entfernten Zweignamen oder einem Commit-Hash auschecken, erhalten Sie ein distanzierter Kopf (Ich mag den Titel dieser Frage wirklich) . Dies bedeutet, dass Commits auf keinem Zweig existieren und vom Garbage Collector entfernt werden können. In hg erstellt ein Commit für einen alten Zustand einen permanent gespeicherten anonymen Kopf (Sie erhalten eine Warnung zum Commit).
  • Wenn Sie von SVN kommen, müssen Sie wissen, dass git revert und svn revert vollständig verschiedene Dinge tun.
  • Git hat alle Funktionen aktiviert, auch diejenigen, die Datenverlust verursachen können (Rebase, Reset). In hg sind diese Funktionen vorhanden, müssen jedoch vor der Verwendung aktiviert werden.
  • git tag erstellt standardmäßig lokale Tags. Wenn Sie ein global sichtbares Tag möchten, benötigen Sie git tag -a oder git tag -s . Umgekehrt erstellt hg tag ein global visible Tag, lokale Tags werden mit hg tag -l erstellt.

Einige Dinge, die viele an mercurial nicht mögen:

  • Zweige werden permanent in der Projekthistorie gespeichert, für gitähnliche lokale Zweige Lesezeichen kann verwendet werden
  • Es gibt keine gitähnlichen Remote-Tracking-Zweige (obwohl Lesezeichen gemeinsam genutzt werden können, und in letzter Zeit wurde daran gearbeitet, dass sie mehr wie Git-Zweig-Labels funktionieren)
  • Das Erstellen eines Tags erzeugt ein neues Commit in der Projekthistorie (technisch gesehen macht es das genauso, ist aber viel besser, um dieses Commit zu verbergen)
  • Sie müssen Features aktivieren, die den Verlauf ändern oder experimentell sind (hg kommt bereits mit vielen, ... vor, aber sie sind standardmäßig deaktiviert). Deshalb denken viele, dass Mercurial weniger Features als Git hat.
  • Es gibt kein git rebase -i equivalent, das mit mercurial verpackt ist. Sie müssen die Drittanbieter-histedit-Erweiterung herunterladen dich selbst.
  

Zweitens, warum nicht Subversion? Es scheint der Konsens (nicht nur hier) zu sein, dass er alt oder anderweitig obsolet ist. Warum ist das?

Svn hat keine Ahnung, was eine Verzweigung oder ein Tag ist, es kennt nur Kopien. Verzweigungen und Tags werden simuliert, indem man die Konvention hat, dass ein Svn Repo einen Stamm /, Zweige / und Tags / Ordner enthält, aber für Svn sind es nur Ordner.

Das Zusammenführen war ein Problem in svn, weil ältere Versionen (vor svn 1.5) den Zusammenführungsverlauf nicht verfolgen konnten. Seit svn1.5 subversion kann merge history verfolgen, aber ich weiß nicht, ob der merging Teil jetzt besser ist.

Eine andere Sache ist, dass in SVN jede Datei und jeder Ordner seine eigene Versionsnummer hat. In git und hg gibt es eine Version für die gesamte Verzeichnisstruktur. Das bedeutet, dass Sie in svn eine alte Revision in einer Datei auschecken können und svn sagt, dass Ihre Arbeitskopie keine lokalen Änderungen enthält. Wenn Sie eine alte Revision einer Datei in git oder hg auschecken, sagen beide Werkzeuge, dass Ihre Arbeitskopie schmutzig ist, weil die Struktur nicht mit ihrer gespeicherten Struktur übereinstimmt. Mit Subversion kannst du eine Frankenstein-Version deiner Quellen bekommen, ohne es zu wissen.

Ein kleiner Fehler in SVN ist, dass es einen .svn-Ordner in jeden ausgecheckten Ordner legt (ich habe Gerüchte gehört, dass sie dieses Verhalten in 1.7 ändern wollen), wo die sauberen Referenzdateien für die ausgecheckten Dateien existieren. Dies macht Tools wie grep -r foo nicht nur die echten Quelldateien, sondern auch Dateien aus diesen .svn Ordnern auflisten.

Svn hat einen Vorteil, wenn Sie große oder nicht verwandte Projekte haben, da Sie nur Teilbäume eines Repositorys auschecken können, während Sie in git und hg nur den gesamten Baum auf einmal erhalten können. Außerdem unterstützt svn das Sperren, was ein interessantes Feature ist, wenn Sie Dateien haben, die nicht einfach zusammengeführt werden können.

Die Schlüsselwortersetzung wird auch von svn unterstützt, aber ich würde dies nicht als Feature bezeichnen.

    
Rudi 13.12.2010, 09:19
quelle
10

Ich würde mercurial wählen.

  1. Die Anzahl der Befehle ist begrenzt, daher gibt es nicht viel zu merken.
  2. Ссылка
  3. Mercurials Befehl hg serve ermöglicht es Ihnen, in 5 Sekunden einen Repo-Server für kleine Operationen einzurichten.
  4. Plattformübergreifend
  5. Sie können es lokal verwenden, ohne Verzweigungen und sind ziemlich erfolgreich, bis Sie tiefer in die fortgeschrittenen Sachen eintauchen wollen.
dhable 12.12.2010 06:41
quelle
9

Der Fall Mercurial over subversion ist ziemlich überzeugend im ersten Abschnitt von Ссылка

gemacht

Git und Mercurial können jetzt gegenseitig die Repos über den Draht lesen und schreiben, also kommt es wirklich auf die von Ihnen bevorzugte Schnittstelle an.

    
Ry4an Brase 12.12.2010 06:38
quelle
5

Eins ist sicher, fang nicht mit CVS an.

    
rlovtang 12.12.2010 06:43
quelle
3

Ich habe Mercurial benutzt und es sehr genossen. Sie können ein kostenloses Bitbucket-Konto erhalten und Ihre Repos in der Cloud speichern. Es wird auch bei einigen Codeplex-Projekten verwendet, wenn Sie jemals die Möglichkeit haben, an einem OSS-Projekt zu arbeiten, das auf Codeplex basiert.

Der Grundgedanke, den ich gefunden / gehört habe, ist, dass Mercurial etwas einfacher zu bearbeiten ist, aber nicht so mächtig wie Git. Beide sind jedoch eine ausgezeichnete Wahl.

Es gibt ein wirklich gutes kostenloses Video auf tekpub für Mercurial und Codeplex . Es führt Sie durch alle Grundlagen.

Wie bereits erwähnt, ist der Link Ссылка eine weitere gute Ressource. Es wird auch von dem gleichen Team gemacht, das FogBugz & amp; Ofen. Kiln ist eine integrierte Umgebung für Mercurial und FogBugz mit Extras wie Code-Review.

Ich habe SVN auf meiner lokalen Box verwendet, um meine persönliche Arbeit zu speichern, aber nicht mehr. Mit Bitbucket & amp; Mercurial Ich muss mir keine Sorgen machen, dass meine lokale Kiste stirbt und dass ich alles gesichert habe ....

Unter dem Strich kannst du weder mit Hg noch mit Git schief gehen, aber ich würde mit Hg gehen, wenn du nicht einige der fortgeschrittenen Funktionen brauchst, die sich so anhört wie du nicht.

Das Lernen von SVN ist nicht unbedingt schlecht, da viele Organisationen es verwenden, aber ich würde mich stattdessen wirklich auf Distributed VCS konzentrieren. Sie sind wirklich die Zukunft. : -)

    
klabranche 12.12.2010 22:27
quelle
1

Da ich selbst ein Neuling bin, habe ich Git benutzt und finde es bemerkenswert einfach zu bedienen und intuitiv, während die anderen ein bisschen zu überwältigend waren. Zusammen mit GitHub macht es ein wundervolles kleines Werkzeug für die Quellcodeverwaltung, das Teilen und die Unterstützung up-Code.

    
abc def foo bar 12.12.2010 06:44
quelle
0

Die beste Open-Source-Wahl ist GIT. Überprüfen Sie die Git-Dokumentation . Sie würden auch viele Tutos über das Internet (youtube, und einige Entwickler Blogs) finden. Ein Muss ist nicht (starten Sie CVS oder Subversion). Zumindest ist meine persönliche Meinung.

    
crsuarezf 12.12.2010 06:53
quelle
0

Verwenden Sie git und github

Es war einmal cvs fast vollständig ersetzt seine Konkurrenz und regierte die Welt der Versionskontrolle.

Dann wurde es selbst durch svn ersetzt.

Und jetzt wird svn durch git ersetzt.

Git ist komplexer als svn , so dass noch Gründe sein könnten, svn für ein neues auszuwählen Projekt.

Aber seine Tage sind gezählt. Git , Mercurial und einige proprietäre Systeme sind eindeutig die Zukunft der VCS-Welt.

Sowohl git als auch svn können in einem cvs-ähnlichen Checkout- / Pull- / Commit-Modus verwendet werden, also ist die bodenlose Grube der Komplexität (es ist ein Lebensstil), die git Sie nicht beeinflussen wird, wenn Sie in das tiefe Ende springen / p>     

DigitalRoss 05.04.2011 00:03
quelle