Von Projekten und Source Control
-
Guten Tag werte Mitprogrammierer!
Zur Situation: Hauptsächlich zur Versionierung und zum Abgleich meiner Projekte zwischen verschiedenen PCs bin ich dazu übergegangen, einen VisualSVN-Server für meine Projekte auf einem meiner Rechner laufen zu lassen. Anschließend kam der Wunsch auf, Unterprojekte (Bibliotheken, Header) zwischen den Projekten zu teilen. Ich arbeite mit Visual Studio und habe mir dafür eine allgemeine Projektstruktur für die Lösungen überlegt, sodass Bibliotheksprojekte immer in die richtigen Verzeichnisse ausgeben. Diese Lib-Projekte binde ich über svn:external ein, was irgendwie nicht ganz so toll funktioniert, wie ich mir das erhofft hatte.
In den letzten Tagen habe ich ein bisschen mit git und github rumgespielt, bin bei weitem in der Materie noch nicht so drin, aber für das Einzelprojekt hat das intuitiv ganz gut geklappt, mit den Git Extension im Visual Studio. Was ich dort noch nicht herausgefunden habe ist, ob man da auch Git-Repos als "Sub-Repos" zwischen mehreren Repos teilen kann, oder ob das da so gar nicht nötig ist, weil die Funktionalität auf Grund der Funktionsweise schon eingebaut ist.
Dann gibt es noch die Möglichkeit, dass ich einfach alle Projekte inklusive der Libs in einem großen Repo vorhalte, von dem ich immer nur den Teil pulle, den ich für das spezielle gerade brauche (oder einfach alles). Aber dann müsste ich ja immer manuell anpassen, was ich gerade ziehen will (statt dass das Master-Projekt selber seine Abhängigkeiten einbindet).
Jetzt bin ich am überlegen, zu Git zu wechseln. Github wäre zwar ziemlich komfortabel, aber der Kreditkartenzwang und das Abspeichern meiner Sourcen im Netz halten mich davon etwas ab. Von daher würde ich mir wohl wieder einen lokalen Server konfigurieren (gibt es da für Windows etwas ähnliches wie den VisualSVN-Server?).Wie würdet ihr vorgehen? Git, nicht Git? Welcher Server? Projektabhängigkeiten? Würde mich über Ratschläge sehr freuen!
Viele Grüße,
Deci
-
Es gibt submodules in git: http://git-scm.com/book/en/Git-Tools-Submodules
Wenn du alleine arbeitest und kein opensource entwickelst, dann bietet GitHub dir ja auch eigentlich nichts interessantes. Da würde ich dann eher einen eigenen Server betreiben. Beachte halt nur, dass du von dem immer gut Backups machst. (Bringt ja nichts wenn der Server neben deinem Laptop steht und deine Wohnung abbrennt) Einen git Server einrichten ist eigentlich recht simpel. Du brauchst nur einen ssh-Server und git auf dem Rechner. Wie das unter Windows ist, weiß ich aber nicht so genau. Hier gibt es ein Kapitel dazu http://git-scm.com/book/en/Git-on-the-Server Wenn du ein GitHub ähnliches interface haben willst, kannst du dir GitWeb oder Gitorious (kann man lokal installieren) anschauen.
-
Hrmmm! Also ich habe ein Tutorial gefunden, dass Gitosis per ssh mit Cygwin umsetzt. Das arbeite ich jetzt mal ab.
Die Submodules-Beschreibung schreckt mich gerade erstmal ab! Wenn ich da kryptische Konsolenbefehle vergesse, dann verliere ich meine Veränderungen? Das klingt erstmal so, als würde mir das auf alle Fälle passieren.
-
Okay, das Projekt ist schon früh gescheitert, weil ich in der cygwin shell per git nicht das gitosis-repository clonen kann
-
Git habe ich bis heute nicht verstanden und aufgegeben. Mit Mercurial ("Git für Doofe") kann ich mehr anfangen. Mercurial ist under Windows auch einfacher zum Laufen zu bekommen. Einfach TortoiseHG installieren und funzt. Ich verwende das für alle Projekte. Auf der Arbeit haben wir uns auch auf Mercurial und SVN eingeschossen.
-
Unterstützt das auch solche "Submodules"?
Gitosis habe ich jetzt soweit, dass ich nur noch Probleme mit den Nutzerrechten habe. Auf wen müssen denn die Rsa-Schlüssel "ausgeschrieben" sein? Auf denjenigen, der sich einloggen will oder auf den Benutzer, auf den er sich einloggen will? Also ich habe jetzt einen Benutzer "git" (nicht-admin) konfiguriert, aber die rsa-public keys sind jetzt für den admin-user ausgeschrieben, das ist doch bestimmt falsch.
-
Was benutzt du denn bei Mercurial als Server? Hab hier beispielsweise Rhodecode gefunden, aber vielleicht übersehe ich ja etwas.
-
Warum willst du überhaupt Gitosis installieren? Wenn du eh nur selbst auf deine Projekte zugreifst, dann brauchst du das doch gar nicht. Gitosis wird glaube ich auch gar nicht mehr weiter entwickelt. Schaut dir vielleicht mal Gitolite an, was eine alternative zu Gitosis ist.
-
Nunja, man wahrscheinlich auch ohne solch einen Server bei den eigenen Systemen remote clonen oder pushen können (Sind ja Distributed, also ohne benötigten echten Server -> man braucht nur Dateizugriff), aber ich find es eben attraktiv, einfach über den browser ins Repo schauen zu können und auch von außen ohne Probleme drauf zugreifen zu können.
-
Decimad schrieb:
Unterstützt das auch solche "Submodules"?
Jain. Da gibt es was in der Richtung, aber die Doku rät von der Benutzung ab, wenn ich das richtig in Erinnerung habe.
Decimad schrieb:
Was benutzt du denn bei Mercurial als Server?
Nix. Mercurial funktioniert wunderbar auf Dateiebene -- auch über das Netzwerk. Für "spontanes Clonen/Pullen" im LAN kannst du auch "hgweb" im built-in HTTP-Server laufen lassen. Per Default bietet das nur Lesezugriff. Authentifizierung bietet dieser Server nicht. Deswegen ist das auch nur was für temporäre Lösungen in privaten, "trusted networks". Aber dafür ist es toll. Habe letztens erst einen Linuxer ein Projekt von meinem Windows-Laptop darüber clonen lassen. Wenn man zu zweit im LAN an etwas arbeitet, kann man sich so auch fix austauschen. Der eine ruft kurz "hg serve" auf und der andere "hg pull". Andere "HG Server" habe ich nie selbst laufen lassen. Da gab es bisher keine Notwendigkeit für. Aber dieses hgweb-Skript kannst du meines Wissens nach auch in'nem eigenen Apache per CGI laufen lassen.
Siehe http://mercurial.selenic.com/wiki/PublishingRepositories
-
Ich hatte (für kurze Zeit) "portable git" installiert, d.h. das git "master"-Repo auf einem USB-Stick und dann von Rechner zu Rechner geschleppt. Solang man nicht sein persönliches Projekt auf zig Rechnern gleichzeitig entwickelt macht sich das recht gut. Inzwischen habe ich quasi die gleiche Konstellation mit Veracity, einem DVCS das noch in der Entwicklung steckt, aber für meine Zwecke völlig ausreichend ist, zumal ein Bugtracker gleich mit dabei ist.
-
Ich verwende ebenfalls Git. Ist zwar am Anfang nicht ganz einfach zu verstehen, aber hat schon einiges netter gelöst als SVN. Submodules hatte ich kurz angeschaut, würde ich aber nicht empfehlen. Sie sind umständlich zu löschen und zu verändern, auch werden sie standardmässig nicht mitgeklont. Ich verwende daher das Tool git-subtree und habe damit bisher gute Erfahrungen gemacht.
Du musst nicht GitHub verwenden, um deine Daten zu sichern. Im Gegensatz zu SVN ist Git ein verteiltes Versionskontrollsystem, jedes Repository ist eine vollwertige Kopie. Du kannst also ein Repository auch auf einem Netzlaufwerk oder Stick haben, und dort von Zeit zu Zeit pullen.