Leichte Versionskontrolle für kleine Projekte (Prototypen, Demos und Unikate) [geschlossen]

7

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:

  1. Lassen Sie mich eine Datei in einer älteren Version meines Projekts sofort anschauen . Bitte zwinge mich nicht durch (1) das Einchecken 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.
  2. In der Tat, wenn ich der einzige in dem 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."
  3. 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.
  4. Lassen Sie mich meine allgemeinen Bibliothekscode-Dateien an einem einzigen Ort auf meiner Festplatte speichern, damit alle meine aktuellen Projekte von Fehlerbehebungen oder Verbesserungen profitieren können, die ich an meiner Bibliothek vorgenommen habe. Ich möchte nicht jedes Mal, wenn ich etwas ändere, meine Bibliothek in andere Projekte kopieren.
  5. Aber, do lassen Sie mich zu jeder Version eines Projekts zurückgehen und sehen, wie der Quellcode ( einschließlich der Bibliothekscode) damals aussah Version wurde veröffentlicht.
  6. 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.

Gibt es das?

Wenn nicht, wie nahe kann ich kommen?

Bearbeiten Sie 1: TortoiseSVN-Impressionen

Ich habe mit Subversion experimentiert. Ein paar Beobachtungen:

  1. 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.)

  2. 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.

    
devuxer 21.10.2009, 22:38
quelle

9 Antworten

5

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.

    
Sam Hartsfield 22.10.2009, 16:46
quelle
7

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.

    
jkchong 22.10.2009 15:58
quelle
5

Ich denke, Fog Creeks neues Produkt, Ofen , wird euch ziemlich nah bringen. Als Antwort auf Ihre spezifischen Punkte:

  1. Dies ist einfach über die Weboberfläche möglich - Sie brauchen Ihre lokale Kopie oder Aktualisierung nicht zu berühren. Suchen Sie einfach die gewünschte Datei, klicken Sie auf die Version, die Sie sehen möchten, und Ihr Code befindet sich vor Ihnen.
  2. Ich bin mir nicht sicher, ob Sie Dinge genau wie "Bitte speichern Sie diese Version 2.5" tun können, aber Sie können Changesets eindeutige Tags hinzufügen, mit denen Sie eine spezielle Revision identifizieren können ("special") "kann bedeuten, was immer es dir will."
  3. Mercurial macht schon einen tollen Job (welcher Kiln im Backend verwendet), also da sollte in dieser Hinsicht keine Probleme sein.
  4. Indem Sie verschiedene Repositories erstellen, können Sie leicht einen zentralen "Kern" -Abschnitt haben, der für verschiedene Projekte konsistent ist (obwohl ich mir nicht ganz sicher bin, ob Sie darüber sprechen).
  5. Ich denke, dass die meisten Versionskontrollsysteme dies ermöglichen ...
  6. Der Brennofen wird gehostet, so dass die Leistung Ihres lokalen Rechners nicht beeinträchtigt wird. Der Code, den Sie dem System übergeben, wird beibehalten sicher und sicher .

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)

    
Andrew Song 21.10.2009 22:50
quelle
4

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.

    
tangens 21.10.2009 23:01
quelle
3

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.

    
Sopoforic 21.10.2009 23:11
quelle
2

Mercurial:

  1. hg cat --rev 2.5 filename (oder "Dateien annotieren" in TortoiseHg)
  2. hg commit ; hg tag 2.5
  3. Mercurial speichert (komprimierte) Diffs (und "Keyframes", um zu vermeiden, dass man zehntausend Diffs hintereinander anwenden muss, um eine Version einer Datei zu finden). Es ist sehr effizient, wenn Sie nicht mit großen Binärdateien arbeiten.
  4. Verknüpfen Sie die Bibliothek in alle Projekte?
  5. OK, jetzt, da ich diesen Punkt gelesen habe, denke ich, dass Mercurials Subrepos näher an dem sind, was Sie wollen. Machen Sie Ihre Bibliothek zu einem Repository und fügen Sie sie als Unterverzeichnis in jedem Ihrer Projekte hinzu. Wenn deine Bibliothek aktualisiert wird, musst du leider 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.
  6. Mercurial macht das nicht, es speichert Daten in Dateien.
Steve Losh 22.10.2009 19:01
quelle
2

Sieh dir Fossil an, seine einzelne exe-Datei. Ссылка

    
Ahavoo 27.11.2009 22:58
quelle
0

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:

  1. 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.

Jack Lloyd 22.10.2009 18:40
quelle
-2

Versuchen Sie GIT. Viele positive Kommentare dazu im Web.

    
Vijay Patel 22.10.2009 16:53
quelle