2011-01-11 16 views

risposta

55

Sembra che tu voglia utilizzare Git submodules.

Git risolve questo problema utilizzando i sottomoduli. I sottomoduli ti consentono di mantenere un repository Git come sottodirectory di un altro repository Git. Ciò ti consente di clonare un altro repository nel tuo progetto e mantenere separati i tuoi commit.

+5

Non esattamente: non sposterà *** tutto il contenuto *** di repoA: solo A più un riferimento a B. Ma io non critico la tua risposta, mi sono affrettato a scrivere più o meno lo stesso quando sono -sposta la domanda dell'OP;) – VonC

+0

Questo è praticamente il caso d'uso dei sottomoduli. REPO-A e REPO-B sono trattati come repository git a pieno titolo, con i propri commit, origini, cronologia, ecc. –

+0

quindi, se sto leggendo, posso controllare in modo indipendente un submodo-repo interamente fuori da quello in cui lo trovo? Come potrei prendere un repository già esistente e farne riferimento come sottomodulo in un altro progetto? – JohnO

47

Ho sempre utilizzato i collegamenti simbolici per mantenere due repository separati e distinti.

+3

per la confusione di sottomoduli git e git sub-tree, questa è una risposta valida. –

+0

Questo è anche molto utile per assemblare un'applicazione da più repository remoti – GeraldScott

+7

Per mantenere due repository separati e distinti, non sarebbe corretto mantenere il repo B nel repository A e aggiungere semplicemente il repo B al ".gitignore" di repo A? –

15

Sì, puoi fare esattamente quello che stai chiedendo con la gerarchia di file che hai disegnato. Repo-B sarà indipendente e non ha conoscenza di Repo-A. Repo-A seguirà tutte le modifiche nei propri file e nei file di Repo-B.

Tuttavia, non lo consiglio. Ogni volta che cambi file e impegni in Repo-B dovrai impegnarti in Repo-A. La ramificazione in Repo-B farà confusione con Repo-A e la ramificazione in Repo-A sarà instabile (problemi nella rimozione delle cartelle, ecc.). I sottomoduli sono sicuramente la strada da percorrere.

+26

Non puoi semplicemente aggiungere REPO-B a /REPO-A/.gitignore? – mikkelbreum

+2

@mikkelbreum Ho avuto la stessa identica idea. Al momento utilizziamo la subverion per il nostro progetto principale e usiamo un repo git in una delle sottocartelle. Con SVN ho appena aggiunto la cartella con il repository git alla proprietà svn: ignore e mi chiedevo se potevo fare lo stesso con git. – 2ndkauboy

+1

Beh, non vedo perché aggiungere un repo git annidato alla lista di ignori del repository padre non dovrebbe funzionare .. Ma allo stesso tempo ho la sensazione che ci sia qualcosa che non ho pensato, visto che questo approccio viene visto raramente e molte persone scoraggiano i repository git nidificati. – mikkelbreum