Creazione di un mirror github ufficiale


108

Come faccio a creare un mirror github per un repository git esterno, in modo tale che appaia come "mirror reale", ad esempio, come in https://github.com/mirrors ?

Finora, ho impostato uno specchio usando:

cd /path/to/bare/repository
git remote add --mirror github git@github.com:user/repo.git

e configurare l'hook di ricezione post per eseguire un file git push --quiet github. In questo modo, tuttavia, github non riconosce il mirror.

Qualche idea su come farlo in modo github, in modo tale che "Mirrorred from" appaia sotto il nome repostiory?


2
github.com/apache/libcloud un altro esempio di repository con mirroring, tutto da Apache LOL
Colin Su

Risposte:


113

Sulla base della comunicazione con il team di supporto di GitHub, ho scoperto che GitHub attualmente non offre alcun meccanismo diretto per consentire a un utente di eseguire il mirroring dei repository in questo modo.

Tuttavia, si può chiedere a GitHub di installare questo servizio per i repository che fanno parte di un'organizzazione. GitHub configura quindi un repository esistente come tale mirror e lo estrae in un intervallo che è una funzione del numero di mirror complessivi che hanno.

EDIT : come sottolinea Stuart, GitHub non accetta più richieste di mirroring di repository arbitrari. L'unica opzione rimanente è la soluzione che ho pubblicato nella mia domanda, ovvero la creazione di un hook post-ricezione per eseguire automaticamente il push al tuo repository GitHub.


9

A giudicare dal contenuto corrente di https://github.com/mirrors , sembrerebbe che GitHub non faccia più "mirror ufficiali", poiché la maggior parte dei progetti che vogliono il proprio codice rispecchiato su GitHub oggi fanno solo un'organizzazione per esso, come Git stesso .

C'è anche una richiesta di funzionalità su: https://github.com/isaacs/github/issues/415


In realtà, alcuni di questi hanno repository con mirroring di GitHub. Lo fanno ancora, ma solo se sei uno sviluppatore del progetto, cioè nessun mirror "non ufficiale".
nyuszika7h

E come si suol dire, solo per le organizzazioni.
nyuszika7h


4

Secondo Importing a Git :

A scopo dimostrativo, useremo:

  • Un account esterno denominato extuser
  • Un account utente personale GitHub denominato ghuser
  • Un repository GitHub denominato repo.git

La riga di comando:

# Makes a bare clone of the external repository in a local directory  
$ git clone --bare https://githost.org/extuser/repo.git

# Pushes the mirror to the new GitHub repository
$ cd *repo.git*
$ git push --mirror https://github.com/ghuser/repo.git

# Remove the temporary local repository.
$ cd ..
$ rm -rf repo.git

1
Qual è la differenza tra git clone --baree git clone --mirror? La seconda variante non è più adatta qui?
user7610

0

Ho utilizzato uno strumento chiamato github-backup con discreto successo, se non il mirror, almeno per eseguire un backup completo (inclusi problemi e altri metadati) di un utente o di un'organizzazione Github. Per citare il file README :

Ogni volta che esegui github-backup, troverà nuovi fork su GitHub. Aggiungerà telecomandi al tuo repository per i fork, usando nomi comegithub_torvalds_subsurface . Recupererà da ogni fork.

Scarica i metadati da ogni fork. Questo è memorizzato in un ramo chiamato "github". Ogni fork ha una directory lì, come torvalds_subsurface. All'interno della directory ci saranno alcuni file, come torvalds_subsurface/watchers. Potrebbero esserci ulteriori directory, come per i commenti:torvalds_subsurface/comments/1 .

Puoi seguire i commit nel ramo github per vedere quali informazioni sono cambiate su GitHub nel tempo.

Il formato dei file nel ramo github è attualmente con i tipi di dati serializzati Haskell. Questo è un testo semplice e leggibile, se strizzi gli occhi.

Le limitazioni includono:

  • nessun supporto per repository privati
  • niente cose "sociali" come star, follower, ecc
  • le note alle righe di commit non sono supportate (ancora?)
  • emettere etichette
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.