2009-03-19 6 views
8

Pour un cours courant, nous utilisons un ordinateur distant pour exécuter notre code (c'est un cluster à quatre nœuds, programmation avec MPI et C++). Je code localement sur mon MacBook et je cherche un bon moyen de garder mon code local à jour sur le cluster. La façon dont je le faisais était d'avoir un terminal ouvert pour exécuter SCP pour copier le répertoire, et un autre terminal qui était SSH-ed dans le cluster pour faire et exécuter mon code.Meilleure façon de synchroniser le code sur le serveur distant en utilisant SCP (SSH-Copy)

Cela semble moins qu'optimale pour moi. Existe-t-il un moyen d'automatiser l'envoi des fichiers au cluster lorsqu'ils sont modifiés? Ou y a-t-il un IDE (XCode, si possible) qui me permettra de faire ça? Ou suis-je coincé avec la commande d'une ligne pour tout déplacer? J'utilise actuellement TextMate pour écrire le code.

Répondre

14

Si vous pouvez utiliser rsync, ce serait probablement le meilleur moyen.

L'utilisation de sshfs pour (monter) le (s) dossier (s) distant (s) serait-elle une option? Vous pouvez modifier directement les fichiers ou utiliser rsync, unison ou n'importe quel outil de synchronisation de dossier à dossier.

9

Votre meilleure option, autre qu'un contrôle de version distribuée, utilise rsync sur ssh. Je garde deux machines synchronisées en procédant comme suit sur chacun:

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

Vous avez mentionné l'aide d'un MacBook - rsync est sous Mac OS X. Pour autant que je sache, il n'a pas besoin d'être installé supplémentaire. Et la beauté de rsync est qu'il recherche des modifications et ne copie que les fichiers modifiés. Il ne fusionne pas les modifications simultanées comme le ferait un système de contrôle de version distribué, mais si vous êtes comme moi et que vous travaillez sur votre ordinateur portable, puis sur votre bureau, rsync est le meilleur moyen d'envoyer tous les fichiers modifiés (et seulement les fichiers modifiés) de l'un à l'autre lorsque vous changez de mode.

Note: les options de rsync utilisées ici sont:

  • -u, --update Ignorer les fichiers qui sont plus récents sur le récepteur
  • -r, récursion --recursive dans des répertoires
  • -l, - liens copier les liens symboliques comme liens symboliques
  • -t, --fois conserver les heures de modification
  • -v, --verbose augmenter verbosité
  • --delete supprimer des fichiers étrangers de DEST dirs, agit comme --delete-during

enfin, -e est l'option qui vous permet de spécifier votre shell distant, dans ce cas ssh

+0

Est-ce que rsync fonctionne sur mon ordinateur uniquement? Je me demande juste au cas où je n'ai pas accès à rsync sur le cluster. –

+0

Non, vous avez besoin de rsync aux deux extrémités du tunnel ssh. Ceci est très commun cependant, donc je serais certainement le sucer et voir. – Evan

+0

Je vais devoir vérifier cela quand je rentre à la maison. Une autre question, rsync recherche-t-elle des modifications? –

4

Je sais que ce n'est pas la réponse que vous connaissez, mais vous pouvez installer un serveur SVN ou CVS, ce qui serait beaucoup plus facile.

Sinon, je voudrais aller pour rsync.

0

Probablement pas ce que vous cherchez, mais vous devriez jeter un oeil à un DSCM comme git:

  1. créer un référentiel sur le serveur distant.
  2. clonez-le sur votre machine de développement en utilisant ssh.
  3. ajouter/modifier le code
  4. utiliser commit et pousser (encore une fois, sur ssh) pour fusionner les changements.
1

Encore mieux que rsync est le Unison file synchronizer, qui vous permettra de faire des changements à chaque extrémité et détectera et aidera à résoudre les conflits. Cela fonctionne sur ssh.

Questions connexes