Come posso rendere disponibile il mio repository locale per git-pull?


89

Ho un repository di copie funzionante su cui ho lavorato senza problemi; l'origine di questo repository è su GitHub.

Vorrei rendere disponibile il mio repository di copie di lavoro come origine per la mia macchina di compilazione (una VM su un altro host fisico), in modo che i commit che faccio sulla mia copia di lavoro possano essere compilati e testati sulla macchina di compilazione senza dover passare GitHub prima. Ho già una build per il repository GitHub in corso, ma mi piacerebbe che fosse un repository / build "d'oro"; cioè, se qualcosa va dentro, dovrebbe essere garantito il passaggio della build contro GitHub.

Ho esaminato la documentazione sugli URL Git e ho visto che c'è la possibilità di utilizzare un URL nel modulo git://host.xz[:port]/path/to/repo.git/(vedi, ad esempio, la documentazione di git-clone ). Voglio farlo nel modo più semplice possibile, con il minimo di configurazione: non voglio dover impostare un daemon SSH o un server web solo per pubblicarlo sulla mia macchina di compilazione.

Sto eseguendo Windows 7 x64 RC, ho MSysGit e TortoiseGit installati e ho aperto la porta predefinita di Git (9814) sul firewall. Si prega di supporre che il repository della copia funzionante sia su D:\Visual Studio Projects\MyGitRepoe il nome host sia devbox. La macchina di compilazione è Windows Server 2008 x64. Ho provato il seguente comando sulla macchina di compilazione, con l'output associato:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

Mi sto perdendo qualcosa?


Non puoi semplicemente impostare una condivisione localmente e poi fare 'git clone \\ workmachine \ share' dalla tua buildmachine? Non il modo migliore / più efficace, ma la cosa più semplice da fare.
Joakim Elofsson,

Risposte:


133

Esistono cinque possibilità per configurare un repository per il pull da:

  • filesystem locale : git clone /path/to/repoo git clone file://path/to/repo. Meno funzionante se si dispone di un filesystem in rete, ma un uso non molto efficiente della rete. (Questa è quasi esattamente la soluzione proposta da Joakim Elofsson )
  • HTTP protocolli : git clone http://example.com/repo. Hai bisogno di un server web, e devi anche eseguire (forse automaticamente, da un hook) git-update-server-info per generare le informazioni richieste per il recupero / estrazione tramite protocolli "stupidi".
  • SSH : git clone ssh://example.com/srv/git/repoo git clone example.com:/srv/git/repo. È necessario configurare il server SSH (daemon SSH) e avere SSH installato sul client (ad esempio PuTTY su MS Windows).
  • protocollo git : git clone git://example.com/repo. Devi eseguire git-daemon sul server; vedere la documentazione per i dettagli (è possibile eseguirlo come processo autonomo solo per il recupero, non è necessario eseguirlo come servizio). git-daemon fa parte di git.
  • bundle : si genera il bundle sul server utilizzando il comando git-bundle , lo si trasferisce su una macchina client in qualsiasi modo (anche tramite USB) e si clona utilizzando git clone file.bndl(se clone non funziona, è possibile eseguire "git init", "git remote add "e" git fetch ").

Quello che ti manca nel tuo esempio è probabilmente l'esecuzione di git-daemon sul server. Quello o una configurazione errata di git-daemon.

Sfortunatamente non posso aiutarti con l'esecuzione di git-daemon come servizio su MS Windows. Tuttavia, non c'è nulla nell'annuncio per l'ultima versione di msysGit sul fatto che git-daemon non funzioni.


Ok, quindi devo installare qualcosa o copiarlo manualmente su un bundle ogni volta (possibilmente tramite script, immagino. Anche le prime tre opzioni necessitano di git-daemon?
alastairs

1
Solo l'opzione "git protocol" richiede l'esecuzione di git-daemon sul server. Solo le opzioni "SSH" e "HTTP" richiedono strumenti aggiuntivi: sshd (server ssh) o server web. La soluzione bundle è una soluzione manuale.
Jakub Narębski,

Sebbene la domanda riguardasse "pull", il poster deve essere avvisato di eseguire "git push" in seguito, poiché il repository da cui sta clonando non è nudo.
yhager,

Per favore, potresti approfondire questo, @yhager?
alastairs

1
Nota a chiunque altro provi l'opzione del filesystem locale: ricorda di evitare le barre rovesciate iniziali sul percorso UNC! :-)
alastairs

17

Oltre alle risposte di Jakub Narębski, c'è un altro modo, più in linea con la tua domanda originale. Puoi clonare da GitHub come fai di solito, quindi quando vuoi eseguire un pull una tantum dal tuo repository locale, fallo semplicemente:

git pull /path/to/repo master

(invece di master puoi inserire qualsiasi nome di ramo.)


Un piccolo suggerimento (o come sono arrivato a questa domanda): ..in <path / to / repo> non sembrano funzionare; usa invece un percorso completo.
Dmitry Timofeev


1

Di recente ho modificato uno dei miei progetti git per replicarsi su un server HTTP utilizzando sitecopy per eseguire i caricamenti dei file effettivi.

È abbastanza facile, basta usare e git update-server-infopoi eseguire il mirroring della directory .git in una directory accessibile da http sul tuo server. Ho usato "project.git", che è abbastanza comune.

Git pull da http: // site / project-git funziona come un campione, e non devo avere nulla sul server tranne l'accesso FTP, sebbene sitecopy supporti anche webdav.

Non consiglio di usare sitecopy, tuttavia, poiché non mantiene sincronizzate bene più macchine. Per il mio progetto, il repository HTTP è di sola lettura e gli aggiornamenti gold provengono da una sola macchina, quindi funziona abbastanza bene.


1

Se hai un percorso come

C:\Project\

e l'hai git initgià fatto , quindi hai anche una cartella

C:\Project\.git\

Ora crei una nuova cartella

C:\.git\

Entra in quella cartella ed esegui git clone --bare ..\Project( nudo è importante),
torna alla tua C:\Project\cartella e fai un file git remote add-url local ..\.git\Project.
Ora devi solo fare git add -A, git commit -m "HelloWorld"e git push local master.

Puoi condividere la Projectcartella, collegarla Z:e farlo git clone Z:\Project: puoi usarla ora git pull origin mastere git push origin masterper spingere / tirare le modifiche da un computer a un altro.


0

Se il tuo host remoto si trova nella stessa rete Windows, ovvero puoi accedervi come \ remotehost, puoi mappare l'unità di rete in explorer, diciamo z: -> \ remotehost \ repodir, dopodiché puoi usare 'git clone / z / myproject 'per clonare il progetto

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.