Подтвердить что ты не робот

Сопоставление между git коммиттерами и пользователями SVN

Я использую git -svn для хранения "промежуточной" версии некоторого SVN-репо, где другим пользователям разрешено выходить из этого промежуточного репо, а фиксация там возвращается обратно к нему, тогда коммиты на промежуточном репо периодически передаются в репозиторий SVN вверх по течению.

Я хочу знать, есть ли способ сопоставления между именами коммандеров git и именами пользователей SVN, чтобы их информация сохранялась неповрежденной при возврате к репо SVN?

4b9b3361

Ответ 1

Vincent Danen упоминает параметр -A при использовании git svn:

Таким образом, используя ~/ git в качестве каталога верхнего уровня для git репозиториев [...], создайте файл authors.txt.
Этот файл отобразит имена коммандеров Subversion на авторов git, что приведет к правильной истории импортированного репозитория Subversion.
Для проектов с небольшим количеством коммиттеров это довольно просто. Для крупных проектов с большим количеством коммиттеров это может занять некоторое время. Синтаксисом файла будет:

user = Joe User <[email protected]>
vdanen = Vincent Danen <[email protected]>

Сокращенное имя - это имя коммиттера для Subversion, тогда как длинная форма - полное имя пользователя и адрес электронной почты, используемые Git.

Последний шаг - клонировать репозиторий Subversion, который создает локальный репозиторий git на его основе. Предполагая, что ваш репозиторий использует стандарты /trunk,/tags и/branch, используйте:

# git svn clone --no-metadata -A authors.txt -t tags -b branches -T trunk https://svn.example.com/svn/repo

-A<filename>
--authors-file=<filename>

Синтаксис совместим с файлом, используемым git -cvsimport:

loginname = Joe User <[email protected]>

Если этот параметр указан и git-svn встречает имя коммиттера SVN, которое не существует в файле author, git -svn прекратит работу.
Затем пользователю необходимо добавить соответствующую запись.
Повторное выполнение предыдущей команды git-svn после изменения файла author-file должно продолжаться.

config key: svn.authorsfile

Это должно работать для всех команд git-svn, включая git-svn dcommit (при нажатии на SVN) (Примечание: я не тестировал его напрямую, хотя).

Мохаммед Гамал сообщает (в комментариях) он работает, но без опции --no-metadata.

Ответ 2

второй вариант - предоставить программу / script, которая разрешает отображение.

Очень полезно, если количество коммиттеров неизвестно, но может быть "сгенерировано" из имени коммандера SVN!

Если... SVN имя коммиттера, которого нет в файле author-file, git svn прекратит работу. Затем пользователю необходимо добавить соответствующую запись. Повторно запустите предыдущую команду git svn после изменения файла author...

поэтому мы имеем:

--authors-prog=mapMyCompanyUsers.sh

Чтобы не заставить всех пользователей проверять/скручивать/wget'ting карту- Script, сначала вы можете предоставить что-то вроде этого:

$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile)

Клон будет выглядеть так:

$ git svn clone -s --authors-prog=$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile) https://svn.example.com/svn/repo/

Это приведет к тому, что все сопоставления будут одинаковыми, а клоны SVN могут быть "разделены" и объединены через git!