Изменение имени пользователя в SVN + SSH URI на лету в рабочей копии - PullRequest
13 голосов
/ 09 ноября 2009

Я использую SVN + SSH для извлечения рабочей копии репозитория с сервера SVN, на котором все разработчики являются членами группы developer и имеют полные права на чтение / запись в каталоге репозитория и связанных метаданных:

svn co svn+ssh://someuser@svn.server/path/to/repository

Несколько разработчиков работают над одной и той же рабочей копией, извлеченной из общей учетной записи оболочки (root). Поскольку этот репозиторий используется для контроля версий конфигурации в производственной среде, это неизбежно. Предоставление каждому разработчику отдельной учетной записи оболочки на целевой машине (той, на которой выполняется проверка) будет одним из способов решения этой проблемы, поскольку тогда у каждого из них может быть собственная рабочая копия, но, к сожалению, это здесь неприемлемо.

У нас есть различные перехваты после фиксации, которые отправляют электронные письма с подробными сведениями о коммитах, в том числе имя пользователя, совершившего изменение.

Проблема заключается в том, что после извлечения рабочей копии с заданным именем пользователя с использованием схемы svn+ssh:// URI коммиты и обновления также должны выполняться под этим именем пользователя. Это нежизнеспособно по двум причинам:

1) Человек, который первоначально сделал проверку, может не быть тем, кто делает коммит сейчас, и нам нужны электронные письма после фиксации и другие хуки после фиксации, чтобы точно знать, кто сделал фиксацию, и

2) ясно, что для фиксации требуется, чтобы коммитирующий пользователь знал пароль учетной записи лица, сделавшего первоначальную проверку, использование ключей RSA для неинтерактивной аутентификации, несмотря на причину № 1.

Есть ли способ динамически отключить имя пользователя удаленной учетной записи, которая используется для аутентификации в этом сценарии?

Я провел некоторое исследование и нашел этот вопрос ранее:

Изменение имени пользователя для фиксации Subversion через svn + ssh

К сожалению, предложение в принятом ответе (svn switch) не работает:

[root@db repo-directory]# svn switch svn+ssh://user2@10.250.10.1/u/svc/repositories/repo-name
user2@10.250.10.1's password: 
svn: 'svn+ssh://user1@10.250.10.1/u/svc/repositories/repo-name' is not the same
repository as 'svn+ssh://user2@10.250.10.1/u/svc/repositories/repo-name'

Любые идеи будут с благодарностью. Заранее благодарю за внимание!

Ответы [ 3 ]

27 голосов
/ 30 июня 2010

Работает с ssh + svn, если вы измените конфигурацию вашего клиента: $ HOME / .subversion / config туннели раздел:

ssh = $SVN_SSH ssh -l *youruser*
17 голосов
/ 09 ноября 2009

Ах, ну, неважно. Кажется, что svn switch --relocate добивается цели:

svn switch --relocate svn+ssh://olduser@svn.server/path/to/repo svn+ssh://newuser@svn.server/path/to/repo

Хотя это громоздко. Если есть более простой способ, я открыт для предложений.

Очевидно, можно написать bash псевдоним или shell-скрипт, чтобы автоматизировать эту часть, я полагаю, но я бы хотел, чтобы это было проще.

5 голосов
/ 09 ноября 2009

Вы также можете выполнить простое обновление с другим именем пользователя.

svn update --username <user> --password <pwd>
...