2013-02-04 15 views
6

Io uso il sistema di controllo versione git per il mio software. E "dentro" il codice sorgente, io uso go get per recuperare automaticamente il software da github. Come posso gestire la situazione del "doppio git"?git + go - come gestire i sottoprogetti con go get

Quando eseguo git add nella directory src/github.com/somename/someproject, che è un repository git di per sé, verrà aggiunto qualcosa? (non appare così quando corro git status)

Devo usare git submodule per il git get sottodirectory aggiunte?

Qual è la migliore pratica in questa situazione?


Modifica: ho un ambiente personalizzato $GOPATH per il mio progetto software. Questo è il motivo per cui la directory src/github.com/somename/someproject si trova all'interno della mia gerarchia di directory del software.

+0

Più ci penso e più mi viene la tentazione di eliminare la directory '.git' nella sottodirectory' github.com/somename/someproject'. In questo modo ho solo congelare il codice e inserirlo nel mio repository principale. Brutto ma immagino che funzioni bene. – topskip

+2

Sembra che goven (https://github.com/kr/goven) lo faccia. – topskip

risposta

3

Mentre la risposta di @ nemo è probabilmente la strada da percorrere, questo è quello che ho fatto: ho rimosso i file .git e .gitignore dai repository scaricati go get. Il percorso di origine che ho è nella mia directory di origine: GOPATH=.../myproject/src/go/. In questo modo tutti i download di go get si trovano nella mia struttura di progetto e posso gestirlo con git.

Penso che questo è ciò che "goven" (vedere il mio commento sulla mia domanda) dovrebbe fare, ma non ero in grado di farlo funzionare.

2

Se si desidera archiviare la revisione dei pacchetti esterni che si utilizzano, sarebbe meglio se la sintassi remota di importazione go supporterà qualcosa come github.com/user/project/sub/directory/revision, che purtroppo non è possibile. C'è uno discussion sulla mailing list golang-nuts su questo argomento, verificarlo per possibili soluzioni e avvertimenti.

Il modo più semplice per eseguire questa operazione consiste probabilmente nel fork dei progetti utilizzati e nell'importazione delle forcelle, in modo da avere il pieno controllo sugli aggiornamenti. Piattaforme come Github rendono davvero facile farlo.

Da go help remote:

Nuova scaricato pacchetti vengono scritti prima directory elencata nella variabile d'ambiente GOPATH (vedi 'andare ad aiutare gopath').

Quindi la soluzione proposta per il sottomodulo è possibile ma non è così facile da usare, poiché è necessario specificare un GOPATH personalizzato durante il recupero. Suggerirei di biforcare la libreria e di fare riferimento alla forcella.