2015-06-28 24 views
5

Sto sviluppando un'applicazione che utilizza git, quindi devo testare la sua integrazione con git. All'interno del mio repository git, ho bisogno di avere un altro repository (my_git_repo/tests/another_repo). Come posso eseguirlo senza i sottomoduli git? (Non voglio avere un altro repository remoto (in github/bitbucket, ecc.) Per un solo file)Come eseguire il commit di un repository git all'interno di un altro repository git

Qualche idea?

+4

Sembra che sarebbe più semplice evitare l'intero problema. Potresti testare l'integrazione non semplicemente usando un repository esistente, ma impostando il repository da zero? Cioè, fai iniziare il test con 'mkdir',' git init', ecc. Ciò eviterebbe la necessità di tenere traccia del sotto-repository interamente. – hvd

+0

questo è il mio attuale workarround, ma preferisco evitare questi passaggi per evitare la complessità (perché ho bisogno di fare alcune modifiche e creare alcuni commit) – fj123x

+0

Penso che @hvd sia giusto perché se si commette questo secondo repository, le modifiche ad esso lo faranno accumulare e avere un effetto collaterale.Se lo crei sempre da zero avrai una build riproducibile, che è una buona cosa. – jotadepicas

risposta

1

I sottomoduli non devono necessariamente essere clonati separatamente; puoi pubblicare un progetto e i suoi sottomoduli in un unico repository. Basta avere un ramo dedicato ai contenuti del sottomodulo nel repository principale, quindi dopo aver clonato il repository principale git clone -sb il sottomodulo direttamente da lì.

# setup your current repo this way: 
(git init sub 
    cd sub 
    > file 
    git add . 
    git commit -m- 
    git remote add origin .. 
    git push -u origin master:sub/master 
) 

installazione in nuovo clone: ​​

git branch -t sub/master origin/sub/master 
git clone -sb sub/master . sub 

e sub avrà il contenuto più recente.

git rev-parse :sub ti mostrerà che cosa è impegnato per sub - vale a dire cosa deve essere controllato là fuori - quando non vuoi solo il suggerimento ramo corrente.

È possibile collegare qui il comando git submodule, con un file .gitmodules e questo e quello, ma difficilmente sembra valerne la pena.

0

ho amato @ risposta di HVD e penso che dovrebbe essere una risposta che merita il voto su:

Si potrebbe includere un già impostato sotto-archivio come un file zip - o qualsiasi altro formato che preferisci - e poi fai il tuo test per creare o cancellare una directory e semplicemente decomprimere il sub-repository lì. Detto questo, mentre riduce notevolmente la complessità dell'esecuzione dei test, aumenta notevolmente la complessità della creazione e della manutenzione dei test, quindi non è qualcosa che consiglio.

Ci sono situazioni in cui i sottomoduli sono troppo complessi per un semplice problema. Il mio codice stava già lavorando con la configurazione simile alla domanda originale. Il mio problema riguardava i repository di test in cui quei repository (3 di questi) avrebbero dovuto essere usati a scopo di test usando solo repository reali con commit noti. Quindi volevo aggiungere quei repository in git proprio come qualsiasi altra sottocartella senza la complessità dei sottomoduli ... questo è per testare per gridare forte. Avevo bisogno che le storie fossero all'interno di questi repository di test. Ho notato che la complessità dei sottomoduli è in realtà maggiore della "complessità della creazione e della manutenzione dei test" ... in realtà è semplice.

const GitMockReposWD = Path.resolve(__dirname, 'mocks/git') 
before(`Decompress git mock repos...`, function (done) { 
    if (!Fs.existsSync(GitMockReposWD)) { 
    console.log(`Decompressing git mock repos...`) 
    const Decompress = require('decompress') 
    Decompress(Path.resolve(__dirname, 'mocks/git-mock-repos.zip'), GitMockReposWD).then(() => { 
     console.log('Done decompressing!') 
     done() 
    }) 
    } else { 
    console.log(`git mock repos already exist...`) 
    done() 
    } 
}) 
after(`Clean git mock repos...`, function() { 
    if (Fs.existsSync(GitMockReposWD)) { 
    console.log(`Cleaning git mock repos...`); 
    Fs.rmdir(GitMockReposWD,() => { 
     console.log(`Done cleaning git mock repos!`) 
    }) 
    } 
}) 

Il codice sopra decomprime semplicemente i pronti contro termine di prova prima delle prove suite sono eseguiti e li pulisce in seguito. L'idea qui è di impostare i repository come richiesto dal tuo scenario e poi aggiungerli ad un archivio. Se ci sono cambiamenti al repository, basta aggiornare l'archivio.