2010-04-17 20 views
5

Ich habe eine große Sammlung meiner persönlichen Skripte, die ich Versionierung mit Git beginnen möchte. Ich habe meinen Code zuvor wie folgt organisiert:Was ist eine gute Möglichkeit, eine große Sammlung von persönlichen Skripts mit Git zu organisieren?

~/code/python/projects/ (for large stuff, each project contained in an individual folder) 
~/code/python/scripts/ (single file scripts all contained in this directory) 
~/code/python/sandbox/ (my testing area) 
~/code/python/docs/ (downloaded documentation) 

~/code/java/... (as above) 

Jetzt werde ich anfangen meinen Code Versionierung git verwenden, so dass ich Geschichte und alle meine Backup-Code auf einem Remote-Server haben.

Ich weiß, wenn ich SVN verwenden würde ich nur meine gesamte "~/code/" Verzeichnis in einem großen Repository, aber ich verstehe, das ist kein guter Weg, um Dinge mit Git zu tun.
Die meisten Informationen, die ich Online gesehen habe schlägt vor, alle meine Projektordner an einem einzigen Ort (wie, keine separaten Verzeichnisse für Python oder Java) mit jedem Projekt mit eigenen Git Repository, und einfach mit einem "Snippets" -Verzeichnis alle enthalten Single-File-Skripte/Experimente, die zu einem späteren Zeitpunkt in Projekte umgewandelt werden können.

Aber ich bin mir nicht sicher, wie ich alle meine Code-Verzeichnisse in einem Bereich konsolidieren möchte. Gibt es eine gute Möglichkeit, meine separaten Code-Verzeichnisse intakt zu halten, oder lohnt es sich nicht? Vielleicht bin ich nur an die separaten Code-Verzeichnisse angehängt, weil ich noch nie etwas anderes gewusst habe ...

Auch (als eine Randnotiz) möchte ich schnell eine chronologische Geschichte aller meiner sehen können Projekte und Skripte. So kann ich sehen, welche Projekte ich zuletzt erstellt habe. Ich tat dies, indem ich zu Beginn all meiner Projekte eine Nummer führte, 002project, 003project.
Gibt es automatische oder einfache Möglichkeit, dies in Git zu tun, ohne eine Nummer zu allen Projektnamen hinzufügen zu müssen?

Ich bin offen für jede praktische oder philosophische Code-Organisationsberatung, die Sie haben. Vielen Dank!!!

Antwort

5

ich weiß, wenn ich SVN wurde unter Verwendung würde ich nur mein ganzes „~/code /“ Verzeichnis in einem großen Repository halten, aber ich verstehe th Es ist kein guter Weg, Dinge mit Git zu machen.

Der git Grund, warum Menschen davon abzubringen, einzigen, monolithischen Repositories mit ist nicht Unterverzeichnisse eines Endlagers klonen (wie Sie mit SVN kann)

Sagen Sie bitte git://blah/somecorp_code.git haben, die Millionen von Revisionen hat und 15GB . Wenn Sie nur ein Unterverzeichnis dieses Codes wollen, zäh - Sie erhalten entweder alle 15 GB oder nichts.

Für persönlichen Code ist dies wirklich kein Problem - ich habe ein "monolithisches" Git-Repository, das etwa 20 MB ist, und ich kann es auf alle Maschinen geklont haben, auf denen ich es verwenden möchte.

Niemand sonst benutzt es, niemand verpflichtet, und ich mache selten viel Verzweigung. Es ist wirklich nur verwenden, um ein fancy-Undo-System mit nettem Syncing und Remote-Backup (privat GitHub Projekt)

ich es wie folgt organisiert:

In der Root-Ebene des Repository, ich habe einen code Ordner (zusammen mit einem sites Ordner für Web-dev Sachen - das ist, warum das Repository 20MB)

im Code-Ordner ist, habe ich Ordner für verschiedene Sprachen (python, ruby, c etc)

In jeder Sprache Verzeichnis, ich ha zwei Ordner, snippets und projects. Innerhalb von Snippets gibt es eine Reihe von Dateien, innerhalb von Projekten gibt es eine Reihe von Ordnern.

Diese Projekte zufällige Dinge, die ich geschrieben habe, aber funktionieren nicht wirklich auf vielen (Spielzeug Projekten „Ich frage mich, wenn ich könnte ...“ - Projekte usw.)

Wenn Datei eine einzelne Python ist , geht es in code/python/snippets/, wenn es mehr als eine Datei ist es in code/python/projects/{project name}

geht wenn ich ein Projekt öffentlich freigeben möchten (auf Github, in der Regel), erstelle ich ein neues Repository, kopieren sie den Code auf diese und synchronisieren sie es mit Github.

Das separate Projektarchiv "aktives Projekt" ist nun nicht mit dem monolithischen Repository verknüpft. Ich schaute in das Submodul-Projekt, aber es ist nicht für diese Verwendung gedacht - es wurde entwickelt, um Cloning-Abhängigkeiten zu erleichtern, nicht eine Reihe von unabhängigen Repositories verwalten

Ich habe ein Skript, das die Github-API verwendet, um automatisch alle meine klonen Projekte lokal, oder aktualisieren Sie sie mit git pull - es ist nur in sich geschlossene Version von githubsync.py (ich habe github.py in die gleiche Datei zusammengeführt).Es kann gefunden werden here as gist/373731

Ich habe githubsync.py verwendet, um meine Projekte zunächst auf meinen Laptop und Desktop zu klonen, und routinemäßig auch innerhalb von Dropbox als Backup auszuführen.

+0

Wow, danke für die ausführliche Erklärung! Eine Frage zu folgenden Punkten: "Wenn ich ein Projekt veröffentlichen möchte (normalerweise auf Github), erstelle ich ein neues Repository, kopiere den Code und synchronisiere es mit Github. Das separate 'aktive Projekt' Repository ist jetzt ohne Bezug auf das monolithische Repo. " Wenn Sie dieses neue aktive Projekt erstellen, legen Sie es außerhalb Ihres persönlichen/code/-Verzeichnisses ab? Ich würde annehmen, ansonsten würde Ihr Code-Repository versuchen, diesen Projektordner hinzuzufügen, wenn Sie etwas wie "git commit -a" machen. Danke nochmal! –

+0

@spooky Hinweis Yeh, ich habe meinen persönlichen Code Repo in '~/code/mycode' und separate Projekte in' ~/code/{projectname} '- git behandelt Repositories-in-Repositories nicht besonders sinnvoll, obwohl ich denke Git sollte sie ignorieren, wenn Sie 'git commit -a' (nicht sicher) – dbr

+0

Großartig, danke! Ich werde mit dieser Methode gehen - es scheint einfacher und einfacher zu implementieren als Sub-Module. –

2

Ich weiß, wenn ich SVN wurde unter Verwendung würde ich nur mein ganzes „~/code/“ Verzeichnis in einem großen Repository halten, aber ich verstehe das nicht ein guter Weg, um Dinge mit Git zu tun.

Ja ist es.
Aber sobald Sie dieses große Repository haben, müssen Sie die Teile darin unterscheiden, die sich mit ihrem eigenen Lebenszyklus und ihrem eigenen Tag entwickeln werden.
Das wäre submodules das wird, wie Sie sagten, ein Git Repo ihrer eigenen.

So erhalten Sie noch:

code 
    .git (main project) 
    python 
    .git (main sub-project for all python-related stuff) 
    project1 
     .git (first submodule) 
    project2 
     .git (first submodule) 
    ... 
    scripts 
     .git (one submodules for all your scripts) 
    sandbox 
     .git (sandbox submodule) 
    docs 
     .git (docs submodule) 
    java 
    .git (main sub-project for all java-related stuff) 
    ... (repeat same organization) 

Hinweis: Die Chronologie der Projekte Schöpfung ist noch besser mit einer Namenskonvention verwaltet.

Mit, dass viele Submodule können Sie:

  • tatsächlich klonen und auf einen Teil Ihrer Sammlung arbeiten, ohne notwendigerweise alles
  • erhalten, oder Sie können die gleiche alte Organisation erneut gebaut Sie hatte in der erste Platz
Verwandte Themen