2013-11-23 14 views
14

Voglio clonare un repository git il cui server git:// non è attivo.repository di clonazione da gitweb

Fortunatamente la sua interfaccia gitweb è ancora funzionante e tutti i dati necessari per ricostruire il repository git sono disponibili da lì.

Quindi, esiste un comando git o un altro strumento in grado di clonare un repository git da gitweb?

(potrei scrivere un bot me stesso, ma non voglio sprecare il mio tempo a fare se c'è un altro modo)

risposta

1

Si può provare a pronti contro termine il recupero utilizzando http:// invece di git://.

Per esempio, Linux repo git a https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ può essere clonato utilizzando http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

provare a sostituire git:// con http:// o https:// e vedere se fa il trucco.

Ricostruire il repository git file per file può essere possibile, ma considerando che il repository esiste ancora, non ha molto senso. Potresti provare a contattare i proprietari di repository e verificare se sarebbero disposti a risolvere l'accesso al repository.

+0

's/^ git/http /' non funziona, ho provato diverse altre varianti senza successo. Finora, i proprietari di repository non hanno risposto alla mia posta. – salva

+0

Considerando che si tratta di un repository git, è possibile che ci siano altre persone che * fanno * un clone. Se il progetto ha una mailing list, puoi tentare la fortuna lì. – ArtemB

+2

@ArtenB, certo, la soluzione * social * è lì, ma il fatto è che questa non è la prima volta che trovo in questa situazione e sono sicuro che qualcuno ha già scritto quello script che è in grado di ricostruire l'intero repository git ottenere tutte le differenze dal server gitweb. – salva

6

gitweb è solo un perl script (gitweb.perl):

Se enabled in the gitweb.conf, gitweb può servire "istantanee" (in formato ZIP o tag.gz), ma questa non è la storia completa del repository: è solo un archivio compresso di qualsiasi albero o commettono, come prodotto da git-archive.

http://<gitweburl>/gitweb.cgi?p=<repo>.git;a=snapshot;h=HEAD 

Se è presente un comando, è necessario eseguirlo sul server.
Per esempio, si può chiedere un fascio (git bundle):

cd /path/to/bare/repo 
git bundle create ../repo.bundle --all 

che creerà una di file, che è possibile sftp di nuovo al vostro stazione locale, e che funge da repository git (solo lettura , clone/pull only, no push):

cd /path/to/repo.bundle 
git clone repo.bundle 
cd repo 
Problemi correlati