Ho creato un repository nudo per pubblicare il mio repository, ma non riesco a capire come aggiornare il repository nudo con lo stato corrente del repository principale.
Ho creato un repository nudo per pubblicare il mio repository, ma non riesco a capire come aggiornare il repository nudo con lo stato corrente del repository principale.
Risposte:
Se si desidera duplicare tutti gli oggetti dal repository principale, farlo all'interno del repository principale:
git push --all <url-of-bare-repo>
In alternativa, esegui un recupero all'interno del repository nudo:
git fetch <url-of-main-repo>
Non è possibile eseguire un pull, perché un pull vuole fondersi con HEADun repository nudo.
Puoi aggiungerli come telecomandi per risparmiare un po 'di battitura in futuro:
git remote add <whatever-name> <url-of-other-repo>
Quindi puoi semplicemente farlo
git push --all <whatever-name>
o
git fetch <whatever-name>
a seconda del repository in cui ti trovi. Se lo <whatever-name>è origin, puoi anche lasciarlo fuori del tutto.
Disclaimer: non sono un git guru. Se avessi detto qualcosa di sbagliato, mi sarebbe piaciuto essere illuminato!
Aggiornamento: leggi i commenti!
git-fetch --allrepository interno, non ho visto gli aggiornamenti che avevo fatto al repository principale, ma quando li git push --all <url-of-bare-repo>ho spinti dal repository principale con vedo gli aggiornamenti git log. Presumibilmente c'è una semplice spiegazione per questo - qualcuno può spiegare?
git log, non mostra questi aggiornamenti nel repository nudo. (Né lo è git log --all, e nemmeno un repository funzionante creato creando una clonazione del repository nudo - tramite git log --allo semplicemente guardando nuovi file che dovrebbero essere visualizzati lì). È un test abbastanza veloce da vedere da soli. Principalmente sono solo curioso di sapere cosa mi sto perdendo.
git fetch -q origin master:masterall'interno del tuo repository nudo locale. Questo recupererà le nuove cose dal ramo principale di Github e aggiornerà il tuo ramo principale locale ad esso.
master:masterè ciò che è necessario per spostare HEAD in avanti a quello del repository remoto. Nel mio caso a causa di un problema non potevo più collegarmi al nostro repository nudo perché mancava git. Fino a quando non viene risolto, faccio un tunnel inverso e vado al repository centrale usando: git fetch ssh://localhost:8765/... master:mastere funziona come un incantesimo. Grazie!
git fetch origin *:*
Ho creato un repository utilizzando il seguente comando
git clone --bare <remote_repo>
Quindi ho provato ad aggiornare il clone nudo usando la risposta di Thomas, ma non ha funzionato per me. Per ottenere l'aggiornamento del repository nudo (che è quello che penso Let_Me_Be stava chiedendo), ho dovuto creare un repository mirror:
git clone --mirror <remote_repo>
Quindi ho potuto eseguire il comando seguente nel repository con mirroring per afferrare gli aggiornamenti del repository principale:
git fetch --all
Mi sono imbattuto in questa soluzione leggendo Mirror a Git Repository Pulling
[remote "origin"]sezione, aggiungi fetch = +refs/*:refs/*emirror = true
L'unica soluzione oltre a ricreare con git clone --mirrorè di Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
allora puoi git fetche vedrai gli aggiornamenti. La cosa strana è che prima di questo, anche se c'è un remoteconfigurato, non ha rami elencati in git branch -a.
git remote updatedi eseguire il lavoro.
--forcee --prunerispettivamente alla git fetchlinea.
assumendo:
$ git clone --bare https://github.com/.../foo.git
Scarica con:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Nota: --git-dir=foo.gitnon è necessario se si cdaccede prima alla directory.
originnon è definito, puoi sempre sostituire la originparte con il percorso / url al tuo repository originale. ad esempio$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Dopo molti scherzi ho scoperto che questo funziona per me.
Una volta:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Ogni volta che voglio sincronizzare:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') è la chiave. Buona risposta, grazie!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'è la risposta. Dopo aver premuto questo comando, posso solo git fetche il repository si sincronizza con quello remoto.
Aggiungi il repository nudo come repository remoto, quindi usa git push.
Per me questa combinazione ha funzionato:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
-u era necessario il parametro per il recupero, altrimenti viene visualizzato il messaggio di errore: "Rifiuto di recuperare nel refs / head / master del repository non bare corrente" (vedere anche https://stackoverflow.com/a/19205680/4807875 )