Сопоставление между коммиттерами git и пользователями SVN - PullRequest
25 голосов
/ 24 марта 2009

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

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

Ответы [ 2 ]

24 голосов
/ 24 марта 2009

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

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

user = Joe User <user@example.com>
vdanen = Vincent Danen <vdanen@somewhere.com>

Краткое имя - это имя коммиттера для 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 <user@example.com>

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

config key: svn.authorsfile

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

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

1 голос
/ 18 октября 2012

второй вариант - предоставить программу / скрипт, который решает сопоставление.

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

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

Итак, для этого имеем:

--authors-prog=mapMyCompanyUsers.sh

Чтобы не заставлять каждого пользователя сначала извлекать / свернуть / wget'ting map-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!

...