2009-03-19 12 views
8

Per un corso corrente che sto prendendo, stiamo usando un computer remoto per eseguire il nostro codice (è un cluster a quattro nodi, programmazione con MPI e C++).Il modo migliore per sincronizzare il codice sul server remoto usando SCP (SSH-Copy)

Sto codificando localmente sul mio MacBook e sto cercando un buon modo per mantenere aggiornato il mio codice locale sul cluster.

Il modo in cui stavo facendo era di avere un terminale aperto per l'esecuzione di SCP per copiare la directory e un altro terminale che era SSH-ed nel cluster per creare ed eseguire il mio codice.

Questo mi sembra non ottimale. C'è un modo per automatizzare l'invio dei file al cluster quando vengono modificati? O c'è un IDE (XCode, se possibile) che mi permetterà di fare questo?

Oppure sono bloccato con il comando a una riga per spostare tutto? Attualmente sto usando TextMate per scrivere il codice.

risposta

14

Se è possibile utilizzare rsync, probabilmente sarebbe il modo migliore.

Utilizzare sshfs su (un fusibile) montare le cartelle remote come un'opzione? È possibile modificare i file direttamente oppure utilizzare rsync, unison o qualsiasi strumento di sincronizzazione delle cartelle.

9

L'opzione migliore, oltre a un controllo di versione distribuito, utilizza rsync su ssh. Tengo un paio di macchine in sincronia effettuando le seguenti operazioni su ciascuno:

rsync -urltv --delete -e ssh /src.dir [email protected]:/src.dir 

Lei ha parlato con un MacBook - rsync è su Mac OS X. Per quanto ne so, non ha bisogno di essere installato extra. E la bellezza di rsync è che cerca modifiche e copia solo i file modificati. Non è necessario unire le modifiche simultanee come un sistema di controllo della versione distribuito, ma se sei come me dove lavori sul tuo laptop e poi lavori sul desktop, rsync è il modo migliore per inviare tutti i file modificati (e solo i file modificati) da uno all'altro quando si cambia modalità.

Nota: le opzioni di rsync utilizzati sono:

  • -u, --update saltare i file che sono più recenti sul ricevitore
  • -r, recurse --recursive in directory
  • -l, - collegamenti copia i collegamenti simbolici come collegamenti simbolici
  • -t, - tempi di modifica dei tempi di aggiornamento
  • -v, --verbose Aumenta la verbosità
  • --delete eliminare i file estranei da dest dirs, agisce come --delete-during

infine, -e è l'opzione che consente di specificare la vostra shell remota, in questo caso ssh

+0

Si esegue rsync solo sul mio computer? Mi chiedo solo se non ho accesso a rsync sul cluster. –

+0

No, hai bisogno di rsync ad entrambe le estremità del tunnel ssh. Questo è molto comune tuttavia, quindi sicuramente lo succhio e vedo. – Evan

+0

Dovrò controllare questo quando torno a casa. Ancora una domanda, rsync cerca modifiche? –

4

So che non è la risposta che si sa, ma è possibile impostare un server SVN o CVS, che sarebbe molto più semplice.

Altrimenti andrei per rsync.

0

Probabilmente non è quello che stai cercando, ma si dovrebbe dare un'occhiata a un DSCM come git:

  1. creare un repository nel server remoto.
  2. clonalo sul tuo computer di sviluppo usando ssh.
  3. aggiungi/modifica codice
  4. usa commit e spinge (ancora, su ssh) per unire le modifiche.
1

Ancora meglio di rsync è lo Unison file synchronizer, che consente di apportare modifiche alle due estremità e rileva e aiuta a risolvere eventuali conflitti. Funziona su ssh.

Problemi correlati