2012-08-23 12 views
10

Sto eseguendo un repository git su un server remoto. Ho installato una condivisione samba sul server remoto in modo da poter salvare il mio codice lì invece che sulla mia macchina Windows 7 locale. Stiamo cercando di utilizzare git, perché svn è stato così lento e inaffidabile. Il problema che stiamo riscontrando con git è che fare qualsiasi commit/clone/pull sulla condivisione di samba è un'operazione super super slow. Se faccio un commit/clone/pull su una directory locale sulla mia macchina Windows 7 funziona benissimo, ma abbiamo bisogno che il codice sia sul server remoto. Qualche idea? Potrei davvero usarlo.Git sta eseguendo commit molto lenti su una condivisione Samba. Cosa posso fare per accelerarlo?

Edit:

Vorrei anche ricordare che ho già eseguito gc git --aggressive e non ha accelerato in su.

+0

Esegui comandi git sul server e il repository è sull'unità del server? Oppure esegui i comandi localmente, ma il repository è sull'unità del server condiviso? Dovresti fare prima. – kan

+0

Eseguo i comandi git su una macchina locale, che regola il codice su una condivisione samba, la condivisione samba è ospitata su un server di sviluppo Web in modo che possiamo vedere cosa fa il nostro codice. Ogni sviluppatore ha la propria cartella nella condivisione. Spingiamo le nostre modifiche su un server remoto in cui archiviamo il nostro repository. –

+2

Sì, è un modo sbagliato per farlo. Forse potresti fare il contrario - avere un repo localmente, ma il web server userà la cartella condivisa del computer di dev. Altrimenti avresti altri problemi di rendimento, ad es. find-in-files funziona molto più velocemente sul disco locale che condiviso. – kan

risposta

2

Git non è destinato a essere utilizzato in questa configurazione. È come ottenere una Formula 1 e correre su una strada sterrata.

Git è un controllo DVCS o versione distribuita. In altre parole, ogni sviluppatore ottiene un clone.

Quello che dovete fare è impostare un repository di server git su quella macchina Samba e accedere al repository tramite HTTP o ssh

È possibile utilizzare progetti come GitBlit o meglio ancora un account su Github

+2

Abbiamo bisogno di eseguirlo da remoto perché è un server web. Le nostre macchine individuali non sono server web. –

+1

Non capisco. solo il server Git deve essere abilitato per il web. i client usano http/ssh per accedervi –

+1

Ogni singolo sviluppatore avrà un clone del repository. Memorano quel clone sul server Web in modo che possano testare il loro codice prima di inviarlo a tutti gli altri sviluppatori. Tutti usiamo le condivisioni Samba per accedere al nostro codice sulle nostre macchine locali. Ho installato un repository remoto che non è sul server web, ma è lì solo per contenere il codice. –

3

I ha avuto lo stesso problema con le prestazioni di Git sulle condivisioni SMB. Purtroppo non posso eseguire il codice di sviluppo sul mio computer locale, quindi utilizzo SMB per montare la directory remota e modificare i file di origine utilizzando un editor di testo corretto sul mio computer locale.

Poiché desidero un po 'di confidenza quando si esegue il commit nel repository, preferisco un client GUI che gira sul mio computer locale. Con i suddetti problemi di prestazioni questo è un po 'complicato, però, e richiede molto tempo.

Tuttavia: ho trovato una piccola soluzione elegante. Prima di commettere qualsiasi cosa per il repository, tiro una copia dei sorgenti remote al mio disco rigido locale utilizzando rsync, in questo modo:

rsync -az --progress --exclude ".git" [email protected]:/home/myapp/sourcecode /Devel/portal-mirror 

In questo modo ci vuole meno di un secondo per fare un pieno 1-a-1 sincronizzazione dello stato remoto (associato a una scorciatoia da tastiera nella mia app Git) prima di eseguire le diff e le commit. Funziona come un fascino. Dopo aver eseguito il commit e aver premuto il repository, eseguo semplicemente git reset --hard e git pull sul server di sviluppo per sincronizzare le modifiche.

2

Stiamo eseguendo la stessa configurazione con git e samba in combinazione con php-storm. Sta funzionando abbastanza bene. Solo quando provo a usare "SourceTree" sul nostro enorme progetto ci vogliono anni per aggiornare, perché (penso) git scansiona ogni singolo file per farlo.

Una cosa che ho provato, e ho ottenuto miglioramenti delle prestazioni minori fuori di esso, è stato quello di sintonizzare il server Samba un po ':

Config File:

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 

hanno scoperto che la linea quando alla ricerca di samba accelerare.

Un'altra soluzione potrebbe essere una sincronizzazione 1 su 1 costante che viene eseguita ininterrottamente in sostituzione di samba. Forse il rsync potrebbe essere modificato un po 'per farlo.

0

Si potrebbe considerare di invertire il paradigma un po 'e di avere il server Web montare condivisioni sulle macchine degli sviluppatori. In questo modo tutta la clonazione/commit/codifica viene eseguita localmente, ma il sito di ogni sviluppatore viene semplicemente ospitato su una condivisione.

In questo momento presumo che il server Web esponga la directory radice di ogni sito Web come una condivisione samba. Uno sviluppatore quindi monta quella condivisione sul proprio computer locale, clona alcuni repository e lavora fuori dalla condivisione. In questo caso, le prestazioni saranno alquanto scarse e potrebbero verificarsi problemi con le richieste di blocco dell'intervallo di byte (BRL) e così via.

Invece, un'opzione è quella di clonare direttamente in una directory sul computer di ogni sviluppatore e condividerla. Il server Web quindi monta quella condivisione.

Naturalmente, idealmente ogni sviluppatore eseguirà la propria istanza del server Web, ma se sto leggendo correttamente le domande forse non è possibile in questo caso.