Изменение имени пользователя в SVN + SSH URI на ходу в рабочей копии
Я использую SVN + SSH для проверки рабочей копии репозитория с сервера SVN, на котором все разработчики являются членами группы developer
и имеют полные права на чтение и запись в каталоге репозитория и связанных метаданных:
svn co svn+ssh://[email protected]/path/to/repository
Несколько разработчиков работают с одной и той же рабочей копией, которая проверяется в общей учетной записи оболочки (root
). Поскольку этот репозиторий используется для контроля версий конфигурации в рабочей среде, это неизбежно. Предоставление каждому разработчику отдельной учетной записи оболочки на целевом компьютере (тот, на котором выполняется проверка), будет одним из способов решения этой проблемы, потому что тогда у каждого из них может быть собственная рабочая копия, но, к сожалению, здесь это неприемлемо.
У нас есть различные крючки после коммита, которые отправляют электронные письма с подробными коммитами, включая имя пользователя человека, совершившего изменение.
Проблема заключается в том, что после того, как рабочая копия будет извлечена с заданным именем пользователя с использованием схемы URI svn+ssh://
, коммиты и обновления, похоже, также должны выполняться под этим именем пользователя. Это нецелесообразно по двум причинам:
1) Лицо, которое первоначально сделало выписку, может не быть лицом, совершившим фиксацию сейчас, и нам нужны сообщения post-commit и другие крючки после фиксации, чтобы точно знать, кто совершил коммит, и
2) ясно, что фиксация требует, чтобы ответственный пользователь знал пароль учетной записи лица, сделавшего первоначальную проверку, использование ключей RSA для неинтерактивной аутентификации, несмотря на причину № 1.
Есть ли способ динамически отключить имя пользователя удаленной учетной записи, которая используется для аутентификации в этом сценарии?
Я провел некоторое исследование и нашел этот вопрос ранее:
Изменение имени пользователя для транзакции Subversion над svn + ssh
К сожалению, предложение в принятом ответе (svn switch
) не работает:
[[email protected] repo-directory]# svn switch svn+ssh://[email protected]/u/svc/repositories/repo-name
[email protected] 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'
Любые идеи будут высоко оценены. Заранее благодарю вас за внимание!
Ответы
Ответ 1
А, ну, неважно. Кажется, что svn switch --relocate
делает трюк:
svn switch --relocate svn+ssh://[email protected]/path/to/repo svn+ssh://[email protected]/path/to/repo
Тем не менее, это громоздко. Если есть более простой способ, я открыт для предложений.
Очевидно, что можно написать алиас bash
или shell- script для автоматизации этой части, я полагаю, но я бы хотел, чтобы это было проще.
Ответ 2
Он работает с ssh + svn, если вы изменяете конфигурацию своего клиента: раздел $HOME/.subversion/config туннели:
ssh = $SVN_SSH ssh -l *youruser*
Ответ 3
Вы можете сделать простое обновление с другим именем пользователя.
svn update --username <user> --password <pwd>