2012-04-27 23 views
6

Il mio compito è spostare i nostri repository dal github pubblico a un'istanza privata di github sulla nostra rete locale.Trasferire il repository git "autorevole" da Github a un github privato

Il mio pensiero è quello di spostarli con

git clone --bare <github-repo-url> 
git push --mirror <local-github-url> 

Durante un periodo di transizione, dovrei essere in grado di effettuare l'aggiornamento specchio stesso dal repository github sul papà. (O lo farò? Non ho trovato un comando nell'interfaccia utente per fare un aggiornamento.)

Quindi eliminerò il repository github "autorevole" e il mirror diventerà autorevole.

Ma come succede? Ogni sviluppatore deve modificare l'url per "origine" in .git/config?

Il mirror accetta push che non sono aggiornamenti dal suo genitore clone?

+0

Ulteriori informazioni: "local-github-url" è veramente un Gitub. È un servizio Github Enterprise privato. Non ho accesso a shell o crontab al Github privato. – Mojo

risposta

5

Il tuo processo è quasi perfetto. L'unica cosa era un parametro mancante --mirror sul clone iniziale.

# create the private repo 
ssh private-server 
mkdir -p /path/to/shared/repos 
git init --shared={whatever makes sense for your environment} /path/to/shared/repos/internalrepo.git 
exit 
# go to github.com and make the public repo readonly 
# create a local mirror 
git clone --bare --mirror $Github-URL github.git 
# now the local repo github.git contains all the stuff from the github repo 
cd github.git 
git push --mirror $Private-URL 
# Tell all developers to execute `git remote set-url origin $Private-URL` 
# Done 

non avrebbe lasciato il repo github aperto per le modifiche, in quanto non sarebbe chiaro a tutti nel progetto che repo è ora il pronti contro termine corretto. È ancora possibile farlo, se si esegue sul server-repo

ssh private-server 
cd /path/to/shared/repos/internalrepo.git 
git remote add --mirror github $Github-URL 

e poi regolarmente (come in un job cron)

git fetch github # get new commits from github 
git remote prune github # drop branches, which are now deleted in the github repo 

Modifica

È inoltre possibile utilizzare il specchio locale per fare lo scambio. Ma non esiste un processo automatizzato semplice, dato che git non può decidere né cosa fare con i rami cancellati, né cosa fare con i rami divergenti. Sou hai bisogno di tenere un repository funzionante dove prendi regolarmente il materiale dal precedente github-repo, prendi il materiale dal repository interno, risolvi la storia divergente e spinga questa roba al repository interno.

+1

Rudi, ottima risposta! Tuttavia, si presuppone che il repository privato sia su una macchina in cui ho shell/crontab. Nel mio caso il repository privato è su un'istanza "Github Enterprise" che si trova all'interno di un firewall. Non ho accesso diretto al repository privato tranne attraverso git e il sito web. – Mojo

+0

Devo ancora vedere una soluzione per GHE. Anche alcune discussioni sul sito Web GHE sono state rimosse. – Shane

Problemi correlati