2010-04-17 4 views
5

J'ai une grande collection de mes scripts personnels que je voudrais commencer à utiliser Git. Je l'ai déjà organisé mon code comme suit:Quelle est une bonne façon d'organiser une grande collection de scripts personnels en utilisant git?

~/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) 

Maintenant, je vais commencer mon code à l'aide de versioning git, pour que je puisse avoir l'histoire et de sauvegarde tout mon code à un serveur distant. Je sais que si j'utilisais SVN je garderais tout mon répertoire "~/code/" dans un grand dépôt, mais je comprends que ce n'est pas une bonne façon de faire les choses avec Git.
La plupart des informations que j'ai vues en ligne suggèrent de garder tous mes dossiers de projet dans un seul endroit (comme dans, pas de répertoires séparés pour python ou java) avec chaque projet contenant son propre dépôt git, et ayant simplement un répertoire "snippets" Scripts/expériences à un seul fichier qui peuvent être convertis en projets à une date ultérieure.

Mais je ne suis pas sûr de ce que je pense de la consolidation de tous mes répertoires de code dans un seul domaine. Existe-t-il un bon moyen de conserver mes répertoires de codes séparés, ou cela n'en vaut-il pas la peine? Peut-être que je suis juste attaché aux répertoires de code séparés parce que je n'ai jamais rien connu d'autre ...

Aussi (comme une note de côté), je voudrais être en mesure de voir rapidement un historique chronologique de tous mes projets et scripts. Je peux donc voir quels projets j'ai créés le plus récemment. J'avais l'habitude de le faire en gardant un numéro au début de tous mes projets, 002project, 003project.
Y at-il un moyen automatique ou facile de le faire dans git sans avoir à ajouter un numéro à tous les noms de projets?

Je suis ouvert à tout conseil d'organisation pratique ou philosophique que vous avez. Merci!!!

Répondre

5

Je sais que si j'utilisais SVN je voudrais juste garder tout mon répertoire « ~/code/» dans un grand dépôt, mais je comprends e Ce n'est pas un bon moyen de faire des choses avec Git.

La git raison dissuade les gens d'avoir des dépôts unique et monolithique, est que vous ne pouvez pas cloner les sous-répertoires d'un répertoire (comme vous pouvez avec SVN)

Supposons que vous avez git://blah/somecorp_code.git qui a des millions de révisions, et est 15GB . Si vous voulez juste un sous-répertoire de ce code, difficile - soit vous obtenez tous les 15 Go ou rien.

Pour le code personnel, ce n'est vraiment pas un problème - j'ai un dépôt git "monolithique", qui est d'environ 20 Mo, et je peux le faire cloner sur toutes les machines sur lesquelles je souhaite l'utiliser. Personne d'autre ne l'utilise, personne d'autre ne le fait, et je fais rarement beaucoup de ramifications. Il est vraiment juste utiliser un undo-système de fantaisie avec la synchronisation agréable et sauvegarde à distance (projet GitHub privé)

I organisé comme suit:

Au niveau de la racine du dépôt, j'ai un dossier code (avec un dossier sites, pour des trucs web-dev - c'est pourquoi le dépôt est 20Mo)

Dans le dossier de code, je possède des dossiers pour différentes langues (python, ruby, c etc)

Dans chaque langue répertoire, je ha Deux dossiers, snippets et projects. Inside snippets est un tas de fichiers, à l'intérieur des projets est une série de dossiers.

Ces projets sont des choses au hasard que j'ai écrit, mais ne fonctionnent pas vraiment beaucoup (projets de jouets, « Je me demande si je pouvais ... » - projets, etc.)

Si c'est un seul fichier Python , il va dans code/python/snippets/, si elle est plus d'un fichier, il va dans code/python/projects/{project name}

Quand je veux publier un projet (sur Github, le plus souvent), je crée un nouveau référentiel, copiez le code à cela et la synchronisation avec Github.

Le référentiel "projet actif" séparé n'est plus lié au référentiel monolithique. J'ai regardé dans le projet sous-module, mais il n'est pas destiné à cet usage - il est conçu pour faciliter les dépendances de clonage, pas pour gérer une série de référentiels sans lien

J'ai un script qui utilise l'API Github pour cloner automatiquement tous mes projets localement, ou les mettre à jour avec git pull - c'est juste la version autonome de githubsync.py (j'ai fusionné github.py dans le même fichier).Il peut être trouvé here as gist/373731

J'ai utilisé githubsync.py pour cloner mes projets sur mon ordinateur de bureau et mon ordinateur de bureau, et je l'exécute régulièrement dans Dropbox, en tant que sauvegarde.

+0

Wow, merci pour l'explication détaillée! Une question à propos de ce qui suit: "Lorsque je souhaite publier un projet (sur Github, en général), je crée un nouveau référentiel, je le copie et je le synchronise avec Github. sans rapport avec le repo monolithique. " Lorsque vous créez ce nouveau projet actif, le placez-vous en dehors de votre répertoire personnel/code /? Je suppose que sinon votre référentiel de code essaierait d'ajouter ce dossier de projet quand vous faites quelque chose comme "git commit -a". Merci encore! –

+0

@spooky note Oui, j'ai mon repo personnel dans '~/code/mycode' et je sépare les projets dans' ~/code/{projectname} '- git ne gère pas particulièrement les dépôts dans les dépôts, même si je pense git devrait les ignorer quand vous faites 'git commit -a' (pas sûr) – dbr

+0

Super, merci! Je vais aller avec cette méthode - il semble plus simple et plus facile à mettre en œuvre que les sous-modules. –

2

Je sais que si j'utilisais SVN je voudrais juste garder tout mon répertoire « ~/code/ » dans un grand dépôt, mais je comprends ce n'est pas une bonne façon de faire des choses avec Git.

Oui c'est.
Mais une fois que vous avez ce grand référentiel, vous devez distinguer les parties qui évolueront avec leur propre cycle de vie et leur propre tag.
Ceux qui seraient submodules qui seront, comme vous l'avez dit, un repo git de leurs propres.

Ainsi, vous obtenez encore:

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) 

Note: la chronologie de la création de projets est encore mieux géré avec une convention de nommage.

Avec autant sous-modules, vous pouvez:

  • clone en fait et travailler sur une partie de votre collection sans nécessairement obtenir tout
  • ou vous pouvez Reconstruit la même vieille organisation que vous aviez en premier lieu
Questions connexes