2009-11-09 6 views
13

J'utilise SVN + SSH pour extraire une copie de travail du référentiel d'un serveur SVN sur lequel tous les développeurs sont membres d'un groupe developer et ont une lecture/écriture complète autorisations sur le répertoire de dépôt et les métadonnées associées:Modification du nom d'utilisateur dans SVN + SSH URI à la volée dans la copie de travail

svn co svn+ssh://[email protected]/path/to/repository 

Plusieurs développeurs travaillent sur la même copie de travail qui est extrait sous un compte shell partagé (root). Étant donné que ce référentiel est utilisé pour le contrôle des révisions de configuration dans un environnement de production, cela est inévitable. Donner à chaque développeur un compte shell individuel sur la machine cible (celui sur lequel la vérification est effectuée) serait une façon de résoudre ce problème car ils pourraient alors chacun avoir leur propre copie de travail, mais malheureusement ce n'est pas acceptable ici.

Nous avons divers hooks post-commit qui envoient des e-mails détaillant les validations, y compris le nom d'utilisateur de la personne qui a commis le changement. Le problème est qu'une fois qu'une copie de travail est extraite avec un nom d'utilisateur donné en utilisant le schéma URI svn+ssh://, les validations et les mises à jour semblent également devoir être effectuées sous ce nom d'utilisateur. Ce n'est pas viable pour deux raisons:

1) La personne qui a fait la caisse à l'origine peut ne pas être la personne qui fait une validation maintenant, et nous avons besoin des courriels post-commit et d'autres hooks post-commit pour savoir exactement qui a fait la validation, et

2) clairement, une validation nécessite que l'utilisateur qui s'engage connaisse le mot de passe du compte de la personne qui a fait la commande originale, l'utilisation des clés RSA pour l'authentification non interactive nonobstant 1.

Existe-t-il un moyen de remplacer dynamiquement le nom d'utilisateur du compte distant utilisé pour l'authentification dans ce scénario?

je fait quelques recherches et trouvé cette question auparavant:

Changing the username for a Subversion commit over svn+ssh

Malheureusement, la suggestion contenue dans la réponse acceptée (svn switch) ne fonctionne pas:

[[email protected] repo-directory]# svn switch svn+ssh://[email protected]/u/svc/repositories/repo-name 
[email protected]'s password: 
svn: 'svn+ssh://[email protected]/u/svc/repositories/repo-name' is not the same 
repository as 'svn+ssh://[email protected]/u/svc/repositories/repo-name' 

Toutes les idées seraient grandement apprécié. Merci d'avance pour votre considération!

Répondre

16

Ah, eh bien, tant pis. Il semble que svn switch --relocate le tour est joué:

svn switch --relocate svn+ssh://[email protected]/path/to/repo svn+ssh://[email protected]/path/to/repo 

Il est lourd, cependant. S'il y a un moyen plus facile, je suis ouvert aux suggestions.

Évidemment, on peut écrire un alias bash ou shell-script pour automatiser cette partie, je suppose, mais je voudrais que ce soit plus simple que cela.

+1

Si vous voulez changer votre utilisateur pour svn + ssh, essayez d'exécuter 'exportation SVN_SSH = "ssh -l newuser"' dans un terminal. Cela s'est avéré être la solution la plus simple pour moi. – marktani

5

Vous pouvez également effectuer une mise à jour simple avec un autre nom d'utilisateur.

svn update --username <user> --password <pwd> 
+4

Si je ne me trompe pas, cela ne fonctionne qu'avec svnserve, pas svn + ssh. –

+0

Je dois avouer que je ne l'ai pas essayé avec le protocole 'svn + ssh'. Mais cela fonctionne avec le protocole 'http' et pas seulement avec svnserve. – tangens

26

Il fonctionne avec ssh + svn si vous modifiez la configuration de votre client: $ HOME /.subversion/configtunnels section:

ssh = $SVN_SSH ssh -l *youruser* 
+2

+1 Cela semble fonctionner parfaitement pour permettre à plusieurs utilisateurs de travailler sur un seul contrôle svn + ssh. –

+1

Merci. Je voudrais seulement ajouter que, pour bénéficier de votre suggestion, il est vraiment important de checkout le référentiel sans ajouter explicitement le nom d'utilisateur dans l'URL svn. Cela signifie que vous devez uniquement exécuter la commande "svn co svn + ssh: //svn.server/path/to/repository" – freedev

+0

[highlevelbits] (http://highlevelbits.com/2007/04/svn-over-ssh- invite-for-wrong-username.html) note une alternative: vous pouvez spécifier des noms d'utilisateur par hôte. –

Questions connexes