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 HEAD
un 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 --all
repository 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 --all
o 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:master
all'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:master
e 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 fetch
e vedrai gli aggiornamenti. La cosa strana è che prima di questo, anche se c'è un remote
configurato, non ha rami elencati in git branch -a
.
git remote update
di eseguire il lavoro.
--force
e --prune
rispettivamente alla git fetch
linea.
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.git
non è necessario se si cd
accede prima alla directory.
origin
non è definito, puoi sempre sostituire la origin
parte 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 fetch
e 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 )