Hintergrund
Ich arbeite an vielen kleinen Projekten (Prototypen, Demos, Unikate usw.). Sie werden meist in Visual Studio (WPF oder ASP.NET mit in C # geschriebenem Code) codiert. Normalerweise bin ich der einzige Programmierer. Gelegentlich arbeite ich mit einer anderen Person zusammen. Die Projekte kommen und gehen, normalerweise innerhalb weniger Monate, aber ich habe ständig neue gemeinsame Code-Bibliotheken entwickelt, die ich wiederverwende.
Das Problem
Ich habe versucht, Quellcodeverwaltungssoftware vorher zu verwenden (SourceGear Vault), aber es schien viel Aufwand bei der Arbeit an einem kleinen Projekt zu sein, besonders als ich der einzige Programmierer war. Dennoch möchte ich einige Funktionen, die Versionskontrolle bietet.
Hier ist eine Liste der Funktionen, die ich gerne hätte:
Gibt es das?
Wenn nicht, wie nahe kann ich kommen?
Bearbeiten Sie 1: TortoiseSVN-Impressionen
Ich habe mit Subversion experimentiert. Ein paar Beobachtungen:
Sobald Sie etwas in ein Repository eingecheckt haben, wird es mit Ihren Dateien gefüllt. Es fügt diese versteckten .svn-Ordner in Ihre Projektordner ein. Es verwirrt mit Ordnersymbolen. Ich muss mein Projekt noch immer auf "normal" bringen. Die Unversion einer Arbeitskopie hat mir einen Teil des Weges dorthin gebracht, aber ich habe immer noch Ordner mit blauen Fragezeichen-Icons. Das macht mich mürrisch: - / Update: endlich die Ordner-Icons los, indem Sie manuell neue Ordner erstellen und die Ordner kopieren. (Nicht gut.)
Ich habe das Open-Source-Plugin für Visual Studio (AnkhSVN) installiert. Nachdem ich ein neues Repository auf meiner Festplatte erstellt habe, habe ich versucht, eine Lösung von Visual Studio einzuchecken. Es hat genau das gemacht, wovor ich Angst hatte. Es hat nur die Ordner und Dateien eingecheckt, die sich physisch (aus dem POV des Dateisystems) in meinem Lösungsordner befinden. Um den obigen Punkt 5 zu erreichen, brauche ich den gesamten von der Lösung verwendeten Quellcode, um eingecheckt zu werden. Ich habe versucht, dies von Hand zu tun, aber es war kein benutzerfreundlicher Prozess (zum einen, wenn ich mehrere Bibliotheksprojekte ausgewählt habe sofort und versuchte, sie einzuchecken, schien es nur in der ersten zu überprüfen). Dann habe ich Fehlerdialoge erhalten, als ich versuchte, nachfolgende Projekte einzuchecken.
Also, ich bin ein wenig frustriert mit SVN (und seiner unterstützenden Software) an diesem Punkt.
Bearbeiten Sie 2: TortoiseHG Impressionen
Ich probiere Mercurial jetzt aus (TortoiseHG). Es war ein bisschen schwierig, es zuerst herauszufinden, nicht besser oder schlechter als TortoiseSVN, würde ich sagen. Ich habe beim Start einen RPC-Server bemerkt (bezieht sich auf den Eintrag 6 ). Ich denke, dass es möglich sein sollte, das auszuschalten, wenn ich nichts mit jemandem teile, aber es war etwas, was ich nicht herausfinden konnte, wenn ich mir die Optionen anschaute (wird die Hilfe später überprüfen).
Ich schätze es sehr, wenn mein lokales Repository nur ein einzelner .hg-Ordner ist. Und einfach, den Ordner in den Papierkorb zu werfen, schien alles zu sein, was ich tun musste, um alles wieder normal zu machen (d. H., Mein Projekt zu verdrehen). Wenn ich einchecke (commit), scheint es nur ein einfaches Kommentarfenster zu bieten. Ich dachte, dass es vielleicht einen Platz geben würde, um Versionsnummern zu setzen.
Mein (wahrscheinlich nicht sehr schlauer) Versuch, eine Windows-Verknüpfung (einen Ordner, der meine Bibliotheksprojekte aliasiert) hinzuzufügen, scheiterte, nicht, dass ich wirklich dachte, es würde funktionieren :) Ich dachte, das wäre vielleicht eine hinterhältige Art, meine Bibliotheksprojekte zu bekommen (derzeit an anderer Stelle) im Repository enthalten. Aber nein. Vielleicht werde ich "Subrepos" ausprobieren, aber dieses Feature ist im Aufbau.Also, ich bin in der Lage, die Elemente 4 und 5 ohne manuelle Synchronisierung durchzuführen.
Verteilte Versionskontrollsysteme (Mercurial, Bazaar, Git) sind insofern nett, als sie sich in einem einzigen Verzeichnis (.hg, .bzr, .git) ganz oben in der Arbeitskopie befinden können, wo Subversion sie benutzt ein separates Repository-Verzeichnis, zusätzlich zu den .svn-Verzeichnissen in jedem Verzeichnis Ihrer Arbeitskopie.
Mercurial und Subversion sind unter Windows mit TortoiseHG und TortoiseSVN am einfachsten zu benutzen; Die Bazaar GUIs haben sich ebenfalls verbessert. Anscheinend gibt es auch TortoiseGit, obwohl ich es nicht versucht habe. Wenn Ihnen die Befehlszeile gefällt, scheint Easy Git etwas netter zu sein als die Standard-Git-Befehle.
Ich möchte Punkt 4, allgemeine Bibliotheken, genauer behandeln. Leider glaube ich nicht, dass einer von ihnen zu einfach zu bedienen sein wird, da ich nicht glaube, dass sie direkt von GUIs unterstützt werden (ich könnte falsch liegen). Die einzige, die ich in der Praxis verwendet habe, ist Subversion Externals.
Subversion ist in diesem Job ziemlich gut; Sie können Externals verwenden (siehe das Kapitel im SVN - Buch), aber um Versionen eines Projekts mit Versionen einer Bibliothek zu verknüpfen, müssen Sie die Bibliotheksrevision in der externen Definition (die selbst versioniert ist) als eine Eigenschaft der Verzeichnis).
Mercurial unterstützt etwas ähnliches, aber beide Lösungen scheinen ein wenig unreif zu sein: Unterstützung für Sub-Repositories, integriert in die neueste Version und die "Forest Extension".
Git hat "Submodul" Unterstützung.
Ich habe leider noch nie Sub-Repositories oder Sub-Module für Bazaar gesehen.
Jede der verteilten Versionskontrolllösungen scheint Ihren Anforderungen zu entsprechen. Schau dir Basar , git oder mercurial an (bereits oben erwähnt). Persönlich benutze ich Basar seit v0.92 und habe keine Beschwerden.
Bearbeiten: Verdammt, nachdem ich es noch einmal angeschaut habe, bin ich mir ziemlich sicher, dass jede dieser 3 Lösungen alle 6 Ihrer angeforderten Features behandelt.
Ich denke, Fog Creeks neues Produkt, Ofen , wird euch ziemlich nah bringen. Als Antwort auf Ihre spezifischen Punkte:
Das Beste von allem, Kiln ist frei für bis zu zwei Lizenzen über ihre Student and Startup Edition (die auch eine kostenlose Kopie von FogBugz erhält).
Kiln ist zur Zeit in der öffentlichen Betaversion - Sie können Ihr Konto bei meinem ersten Link anfordern - und Benutzer werden vermietet, da immer mehr Probleme gelöst werden. (Eine Vorstellung davon, was die aktuellen Beta-Benutzer sagen, sehen Sie auf der Website zum Thema Kiln-Wissensaustausch nach, die für das Feedback bestimmt ist.)
(Full Disclosure: Ich arbeite zurzeit als Praktikant in Fog Creek)
Für Ihre Anforderungen würde ich subversion empfehlen.
Lassen Sie mich sofort eine Datei in einer älteren Version meines Projekts ansehen. Bitte zwinge mich nicht durch das Versehen (1) meiner aktuellen Arbeit, (2) das Zurücksetzen meiner lokalen Kopie auf die alte Version und (3) das Überprüfen der aktuellen Version, damit ich wieder daran arbeiten kann.
Sie können den Repository-Browser von Tortoise Svn verwenden, um einfach zu jeder vorhandenen Version zu navigieren.
Tatsächlich, wenn ich der Einzige im Projekt bin, möchte ich nie auschecken. Das Einzige, was ich tun kann, ist zu sagen: "Bitte speichern Sie, was ich jetzt als Version 2.5 habe."
Dies geschieht durch svn copy . svn://localhost/tags/2.5
.
Speichern Sie meine Daten effizient. Wenn ich 100 MB Medium in meinem Projekt habe, möchte ich nicht, dass es mit jeder neuen Version, die ich veröffentliche, kopiert wird. Nur kopieren, was sich ändert.
Gegeben durch Subversion.
Lassen Sie mich meine allgemeinen Bibliothekscode-Dateien an einem einzigen Ort auf meiner Festplatte aufbewahren, damit alle meine aktuellen Projekte von Fehlerbehebungen oder Verbesserungen meiner Bibliothek profitieren können. Ich möchte nicht jedes Mal, wenn ich etwas ändere, meine Bibliothek in andere Projekte kopieren.
Lassen Sie mich jedoch zu jeder Version eines Projekts zurückkehren und sehen, wie der Quellcode (einschließlich des Bibliothekscodes) zum Zeitpunkt der Veröffentlichung der Version aussah.
Stellen Sie Ihre Bibliotheken in dasselbe svn-Repository wie Ihr verbleibender Code und Sie haben globale Revisionsnummern, um alle in einen gemeinsamen Status zurückzuschalten.
Bitte lassen Sie mich nicht einen speziellen Datenbankserver auf meinem Computer speichern, der meinen Computer länger zum Starten benötigt und / oder Ressourcen verwendet, wenn ich nicht einmal programmieren kann.
Sie müssen nur svnserve
starten, um einen lokalen Server zu starten. Wenn Sie nur auf einem Rechner arbeiten, können Sie sogar darauf verzichten und Ihr Repository direkt nutzen.
Ich würde sagen, dass Mercurial zusammen mit TortoiseHg tun wird, was Sie wollen. Natürlich, da du nicht viel zu verlangen scheinst, sollte Subversion mit TortoiseSvn genauso gut funktionieren, wenn du immer nur alleine arbeitest, obwohl ich denke, dass mercurial besser für Kollaboration ist.
Mercurial:
hg cat --rev 2.5 filename
(oder "Dateien annotieren" in TortoiseHg) hg commit ; hg tag 2.5
hg pull
in den Subrepos speichern, um sie zu aktualisieren. Aber dann, wenn Sie in einem Projekt festschreiben, wird Mercurial den Status des Bibliotheksrepo aufzeichnen, so dass Sie, wenn Sie diese Version später auschecken, um zu sehen, wie es aussah, die richtige Version des Bibliothekscodes erhalten. Wie die Leute darauf hingewiesen haben, wird dir wahrscheinlich fast jeder DVCS dafür gut dienen. Ich dachte, ich würde Monotone erwähnen, da es nicht bereits im Thread erwähnt wurde. Es verwendet eine einzelne Binärdatei (mtn.exe) und speichert alles als SQLite-Datenbankdatei, überhaupt nichts in Ihrem tatsächlichen Arbeitsbereich außer einem _MTN-Verzeichnis auf der obersten Ebene (und .mtn-ignore, wenn Sie Dateien ignorieren möchten). Um dir einen schnellen Vorgeschmack zu geben, habe ich die mtn-Befehle dazu verwendet zu zeigen, wie man deine Wunschliste ausführt:
Lassen Sie mich sofort eine Datei in einer älteren Version meines Projekts ansehen.
mtn cat -r t:1.8.0 readme.txt
Bitte speichern Sie, was ich jetzt als Version 2.5 habe
mtn tag $(mtn automate heads) 2.5
Speichern Sie meine Daten effizient. Monotone verwendet xdelta , um nur die Diffs zu speichern, und zlib, um die Deltas zu komprimieren (und die erste Version jeder Datei, für die es natürlich keine gibt Delta).
Lassen Sie mich meine allgemeinen Bibliothekscode-Dateien an einem einzigen Ort auf meiner Festplatte aufbewahren, damit alle meine aktuellen Projekte von Fehlerbehebungen oder Verbesserungen meiner Bibliothek profitieren können.
Montone unterstützt dies ausdrücklich; zitieren des Handbuchs "Der Zweck von merge_into_dir
ist es, einem Projekt zu erlauben, ein anderes Projekt so zu speichern, dass propagate
verwendet werden kann, um das enthaltene Projekt auf dem neuesten Stand zu halten. Es soll die Verwendung von verschachtelt ersetzen Auschecken in vielen Fällen. "
Lassen Sie mich jedoch zu jeder Version eines Projekts zurückgehen und sehen, wie der Quellcode (einschließlich des Bibliothekscodes) zum Zeitpunkt der Veröffentlichung der Version aussah.
mtn up -r t:1.8.0
Bitte lassen Sie mich keinen speziellen Datenbankserver auf meinem Rechner speichern SQLite kann, soweit es dich betrifft, eine einzige Datei auf deiner Festplatte sein, in der Monotone Dinge speichert. Es gibt keinen zusätzlichen Prozess oder Startup-Verrücktheit (SQLite ist eingebettet und läuft direkt im selben Prozess wie der Rest von Monotone) und Sie können die Tatsache ignorieren, dass Sie Ihr Monotone-Repository mit Standardwerkzeugen wie dem sqlite-Befehlszeilenprogramm oder über Python- oder Ruby-Skripte abfragen und bearbeiten können.
Tags und Links visual-studio visual-studio-2008 version-control