2010-04-17 16 views
5

Ho una vasta raccolta di script personali che vorrei avviare con la versione di Git. Ho già organizzato la mia codice come segue:Qual è un buon modo per organizzare una vasta raccolta di script personali usando 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) 

Ora ho intenzione di iniziare versioni mio codice utilizzando git, in modo che io possa avere la storia e il backup di tutti il ​​mio codice a un server remoto.

So che se stavo usando SVN manterrei la mia intera directory "~/code/" in un ampio repository, ma capisco che questo non è un buon modo per fare cose con Git.
La maggior parte delle informazioni che ho visto online suggerisce di mantenere tutte le mie cartelle di progetto in un unico posto (come in, nessuna directory separata per python o java) con ogni progetto contenente il proprio repository git e semplicemente una directory "snippet" contenente tutti script/esperimenti a file singolo che possono essere convertiti in progetti in un secondo momento.

Ma non sono sicuro di come mi sento di consolidare tutte le mie directory di codice in un'unica area. C'è un buon modo per mantenere intatte le mie directory di codice separate o non ne vale la pena? Forse sono solo collegato alle directory di codice separate perché non ho mai conosciuto altro ...

Inoltre (come nota a margine), mi piacerebbe essere in grado di vedere rapidamente una cronologia cronologica di tutti i miei progetti e sceneggiature. Quindi posso vedere quali progetti ho creato più di recente. Lo facevo mantenendo un numero all'inizio di tutti i miei progetti, 002project, 003project.
C'è un modo automatico o semplice per farlo in git senza dover aggiungere un numero a tutti i nomi dei progetti?

Sono aperto a qualsiasi consiglio pratico o filosofico per l'organizzazione dei consigli. Grazie!!!

risposta

5

so che se sto usando SVN vorrei solo mantenere la mia intera directory "~/code /" in una grande repository, ma capisco ° non è un buon modo per fare cose con Git.

La ragione git dissuadere le persone ad avere singoli, repository monolitico è non è possibile clonare le sottodirectory di un repository (come si può con SVN)

Diciamo che avete git://blah/somecorp_code.git che ha milioni di revisioni, ed è 15GB . Se vuoi solo una sottodirectory di quel codice, difficile - o ottieni tutti i 15 GB o niente.

Per codice personale, questo non è davvero un problema - Ho un repository git "monolitico", che è di circa 20 MB, e posso tranquillamente averlo clonato su tutte le macchine su cui vorrei utilizzarlo.

Nessun altro lo usa, nessun altro si impegna e raramente faccio molto per ramificazioni. E 'davvero solo usarlo una fantasia-undo-sistema con una bella sincronizzazione e backup remoto (progetto privato GitHub)

Ho organizzato come segue:

Nel livello radice del repository, Ho una cartella code (insieme a una cartella sites, per le cose di web-dev - questo è il motivo per cui il repository è 20 MB)

Nella cartella codice, ho cartelle per varie lingue (python, ruby, c ecc)

In ogni lingua directory, io ho due cartelle, snippets e projects. I frammenti interni sono un mucchio di file, all'interno dei progetti c'è una serie di cartelle.

Questi progetti sono cose a caso che ho scritto, ma in realtà non funzionano su molto (progetti giocattolo, "mi chiedo se potessi ..." - progetti, ecc)

Se si tratta di un singolo file di Python , va in code/python/snippets/, se si tratta di più di un file va in code/python/projects/{project name}

Quando voglio rilasciare pubblicamente un progetto (su Github, di solito), creo un nuovo repository, copiare il codice per questo e sincronizzarlo con Github.

Il repository "progetto attivo" separato non è più correlato al repository monolitico. Ho esaminato il progetto del sottomodulo, ma non è destinato a questo utilizzo: è progettato per semplificare le dipendenze della clonazione, non gestire una serie di repository non collegati

Ho uno script che utilizza l'API Github per clonare automaticamente tutti i miei progetti localmente, o aggiornarli con git pull - è solo la versione autonoma di githubsync.py (ho unito github.py nello stesso file).Può essere trovato here as gist/373731

Ho usato githubsync.py per clonare i miei progetti sul mio laptop e desktop inizialmente, e anche di eseguirlo regolarmente all'interno di Dropbox, come backup.

+0

Wow, grazie per la spiegazione dettagliata! Una domanda su quanto segue: "Quando voglio rilasciare pubblicamente un progetto (su Github, di solito), creo un nuovo repository, copio il codice e lo sincronizzo con Github. Il repository" progetto attivo "separato è ora non correlato al repository monolitico. " Quando crei questo nuovo progetto attivo, lo metti al di fuori del tuo personale/codice/directory? Supponevo che altrimenti il ​​tuo repository di codice proverebbe ad aggiungere questa cartella di progetto quando fai qualcosa come "git commit -a". Grazie ancora! –

+0

@spooky note Yeh, ho il mio repository di codice personale in ~ ~/code/mycode' e progetti separati in '~/code/{projectname}' - git non gestisce repository-in-repository in modo particolarmente utile, anche se penso git dovrebbe ignorarli quando fai 'git commit -a' (non sicuro) – dbr

+0

Grande, grazie! Vado con questo metodo: sembra più diretto e più facile da implementare rispetto ai sottomoduli. –

2

so che se sto usando SVN vorrei solo mantenere la mia intera directory "~/code/" in una grande repository, ma capisco che questo non è un buon modo per fare le cose con Git.

Sì, lo è.
Ma una volta che hai un repository di grandi dimensioni, devi distinguere le parti che si evolveranno con il loro ciclo di vita e il proprio tag.
Questi sarebbero submodules che saranno, come hai detto, un loro pasticcio.

Quindi è ancora ottenere:

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) 

Nota: la cronologia della creazione di progetti è ancora meglio gestito con una convenzione di denominazione.

Con che molti moduli, è possibile:

  • realtà clonare e lavorare su qualsiasi parte della vostra collezione senza necessariamente ottenere tutto
  • o è possibile ri-costruito la stessa vecchia organizzazione che si aveva in il primo posto
Problemi correlati