2015-08-25 12 views
5

Usiamo github per gestire gran parte del nostro ambiente software, e scommetterei che, come molte altre organizzazioni, la stragrande maggioranza del traffico da/per quel repository proviene dal nostro ufficio. Con questo in mente, c'è un modo per costruire una cache locale di un determinato repository github, ma avere ancora la protezione della versione cloud? Sto pensando a questo nel modello di un server proxy di memorizzazione nella cache, in cui il server locale (presumibilmente nel nostro edificio, sulla nostra rete locale) gestirà la stragrande maggioranza delle operazioni di clonazione/pull.cache locale per un repository github?

Sembra che dovrebbe essere fattibile, ma la ricerca di questo è stato molto difficile, penso in non piccola parte perché le parole "locale" e "cache" hanno sovraccaricato significati soprattutto per le domande git (hub).

+2

* Ogni * repository * è * una 'cache locale'. – user2864740

+0

Non puoi semplicemente eseguire il backup del file repo locale '.git'? –

+0

Questo è un ottimizzazione delle prestazioni, non un backup. Voglio che gli utenti normali facciano un "git pull" o "git clone" o qualsiasi altra cosa, e invece di far viaggiare quella richiesta su github.com, voglio che vada su un server locale che ha una copia cache del repository .. rendendo presumibilmente il processo molto più veloce. Facciamo una serie di cloni completi ogni giorno nei test automatici, e avere una copia del repository che vive su un disco geograficamente vicino agli utenti renderebbe le cose molto più veloci. – ljwobker

risposta

4

Il tuo ultimo commento indica che stai cercando un'ottimizzazione delle prestazioni. Questo aiuta.

È possibile iniziare a creare un mirror locale del repository github dopo these instructions. È possibile aggiornarlo periodicamente o organizzare ricevere web hooks da github per aggiornare il mirror locale "su richiesta". Per fare ciò è necessario creare un piccolo servizio web che risponda ai ganci di github. È possibile aggiungere un gancio Web andando a https://github.com/someuser/someproject/settings/hooks/new. Probabilmente si vuole selezionare il pulsante "mi permette di selezionare i singoli eventi", e quindi selezionare:

  • eliminare
  • spinta
  • creare

Questo avrebbe mantenuto la cache up-to -data in relazione ai cambiamenti nei tag e nelle filiali disponibili.

Configurare un server Git che rende disponibile quel repository localmente. Questo può essere semplice come eseguire git daemon o un account locale accessibile tramite ssh o qualcosa di più completo, in base ai requisiti locali.

Poi si dovrebbe impostare le copie di lavoro locali in questo modo:

$ git clone http://localrepository/someproject.git 
$ cd someproject 
$ git remote set-url --push http://github.com/someuser/someproject.git 

questo sarebbe impostare ogni repository per tirare dalla cache locale, ma spingere modifiche a monte GitHub.

1

Si consiglia di controllare il git-cache-http-server project. Penso che implementa in parte ciò di cui hai bisogno (ed è simile all'idea del post di @larsks).

Si tratta di un software NodeJS che esegue un server HTTP per fornire l'accesso ai repository git memorizzati nella cache locale. Il server recupera automaticamente le modifiche upstream quando richiesto. Se si utilizzano i repository git locali invece di quelli distanti, il client git verrà servito contenuto memorizzato nella cache locale.

Se si esegue git-cache-http-server su un host separato (VM o contenitore, ad esempio), è possibile configurare il client git locale per clonare e recuperare automaticamente dalla cache configurandolo per sostituire https://github.com con qualcosa come http://gitcache/github.com. Ciò può essere ottenuto da una configurazione come:

git config --global url."http://gitcache:1234/".insteadOf https:// 

Al momento, questo software fornisce solo una cache per clonare e aggiornare un repository, non v'è alcuna disposizione per la spinta di cambiamenti di nuovo.Per alcuni casi d'uso, pensando a un'infrastruttura di CI che ha bisogno di estrarre il contenuto di più repository anche se solo uno solo è cambiato o il test automatizzato che hai menzionato, questo può essere utile.

Problemi correlati