2010-10-12 12 views
9

Mi dispiace se questo è un duplicato, ho cercato google e SO e non ho trovato nulla di simile dal momento che è un insieme piuttosto generico di parole da cercare!repository Git con la directory git memorizzata altrove

Quello che voglio è avere la directory .git fuori dall'albero di lavoro.

Ho bisogno di fare questo perché è un repository git "stealth" all'interno di un progetto che usa un altro software di controllo della versione, e purtroppo il modo in cui è impostato è con più progetti (che voglio essere un repository git) all'interno una directory root e con script di compilazione a cui piace eliminare i file dalle directory del progetto. Finora ho eseguito il versioning della directory root e ignorato tutte le altre directory di progetto, quindi uno dei progetti era in versione, ma ora voglio fare un altro progetto e chiaramente non posso avere più repository git nella directory root (o posso ? Sarebbe una buona risposta alternativa). Mettere le directory .git altrove su disco sarebbe una buona soluzione, se possibile.

+1

Non è possibile impostare l'altro software di controllo versione per ignorare tale directory .git? Qual è l'altro VCS? – Vinzenz

+0

Sì, ho semplificato un po 'per il gusto della domanda. In realtà è parte dei nostri altri strumenti e del processo di creazione che piace eliminare le cose; mentre posso convincere VCS a ignorare la directory .git, sfortunatamente non posso farlo con questi altri strumenti (e non posso modificarli per permetterlo). –

+0

Mi dispiace, ho dimenticato di dire: il VCS è ... non normale. Supponiamo che sia proprietario. –

risposta

8

È possibile specificare esplicitamente il percorso del repository git con l'opzione globale --git-dir per tutti i comandi git. Quando si utilizza questa opzione con init, in genere viene creato un repository vuoto, ma se si fornisce --work-tree, è possibile inizializzare un repository non nudo con un albero di lavoro 'distaccato'.

git --git-dir=/var/repo/one.git --work-tree=/var/work/one init 

Da allora in poi, si devono ancora fornire l'opzione --git-dir o impostare la variabile GIT_DIR ambiente in modo che git sa dove il repository è come non ci sono dati specifici git a tutti all'interno del albero di lavoro, ma il lavoro l'albero sarà determinato in modo appropriato dalla git repository config.

+0

Simile alle altre risposte ma questo imposta anche l'albero di lavoro, quindi non ho bisogno di ricordarmi di fare il cd alla radice ogni volta. Ho svalutato anche gli altri. Grazie mille! –

1

Git interagisce con diversi altri VCS, quindi questo potrebbe non essere il modo migliore per risolvere il problema.

Tuttavia, è possibile: Utilizzando git-config è possibile indicare a git di utilizzare un'altra directory, diversa da quella contenente .git, come radice dell'albero di lavoro.

Se si esegue git init una directory sopra la directory radice del foo altro progetto, allora si potrebbe utilizzare:

git config core.worktree ../foo 

Dove ../foo è il percorso del foo progetto relativo alla vostra directory .git.

Tuttavia, con un percorso relativo, gli strumenti git funzioneranno solo nella directory superiore di foo, non in qualsiasi altro punto dell'albero. Usando un percorso assoluto lo eviti (ma ricordati di cambiarlo se mai muovi il tuo progetto).

+0

Questo funziona anche per ** modificare ** l'albero di lavoro in seguito (se lo hai spostato) - tuttavia, la cosa strana è che la directory dell'albero di lavoro originale ha bisogno esistere (una dir vuota lo farà). – giraff

0

Non so se è possibile, sono piuttosto un principiante su VCSes.

Ma si può dire agli altri VCS di ignorare i file, per creare un file CVS .cvsignore:

.git 
*ignore_me* 

per SVN utilizzare

$ svn propset svn:ignore -F .cvsignore . 

Spero che questo aiuti.

1

Non sono sicuro che questo sia un buon consiglio, ma è possibile impostare la variabile di ambiente GIT_DIR in modo che punti a una directory git non nuda. Attenzione, in questa configurazione git non è in grado di trovare la directory di lavoro più in alto, quindi è necessario essere sicuri di essere nella directory corretta quando si eseguono i comandi git.

mkdir foobar 
cd foobar 
git init 
export GIT_DIR=$PWD/.git 
cd .. 
mkdir wc 
cd wc 
echo foo > bar.txt 
git add . 
git commit 
6

È possibile collegare a un gitdir in una posizione arbitraria con la creazione di un file chiamato .git nella radice dell'albero di lavoro, contenente le seguenti:

gitdir: <path-to-gitdir> 

Naturalmente è necessario avere prima spostato il directory originale .git nella sua posizione esterna.

Tutti gli strumenti git ben educati lo onoreranno, senza fare affidamento su variabili di ambiente o meccanismi specifici del sistema operativo come i collegamenti simbolici. Dovresti inoltre essere in grado di posizionare questi collegamenti in posizioni arbitrarie nella tua gerarchia di directory, collegandoti quindi a più repository.

Ovviamente, tali file .git saranno ancora visibili nell'albero di lavoro, quindi questo approccio potrebbe non essere accettabile nel tuo caso. Tuttavia, se viene cancellato un file di questo tipo, è semplice ripristinarlo (diversamente dalla directory .git).