Как получить символ пробела в файле авторов для git svn - PullRequest
5 голосов
/ 25 февраля 2012

Авторы в моем репозитории svn:

$ svn log --xml | Автор grep | сортировать -u | perl -pe 's /.>(.?)<./$ 1 = /' </p>

Выход:

<author>ashfame</author>
<author>clean</author>
<author>clean </author>
<author>rocketweb</author>

Но, клонируя репо для импорта с помощью git svn clone, он останавливается между словами Author: clean not defined in /home/ashfame/fun/authors-transform.txt file

Обратите внимание на двойной пробел после очистки, что означает, что это третий пользователь "clean ".

Как мне отформатировать файл моих авторов, чтобы в имени пользователя был пробел? Мое текущее содержимое выглядит следующим образом:

ashfame = Ashfame <mail@example.com>
clean = Yogesh Tiwari <yogesh.tiwari@example.com>
clean = Yogesh Tiwari <yogesh.tiwari@example.com>
"clean\ " = Yogesh Tiwari <yogesh.tiwari@example.com>
"clean " = Yogesh Tiwari <yogesh.tiwari@example.com>
rocketweb = rocketweb <rocketweb@rocketweb.com>
(no author) = Yogesh Tiwari <yogesh.tiwari@example.com>
(no author) = no_author

Интересное открытие: Я попытался импортировать репозиторий svn в git без какого-либо сопоставления пользователей, и я не смог увидеть ничего, связанного с «чистым» пользователем, существует только «чистый», так что, я думаю, какой-то сбой на SVN РЕПО. Любые указатели на то, что можно сделать с этим?

Ответы [ 3 ]

4 голосов
/ 25 ноября 2013

Была похожая проблема с пробелом в имени автора.

Решите ее, используя опцию author-prog, которая позволяет использовать скрипт bash, который преобразует неизвестных авторов.

2 голосов
/ 25 февраля 2012

Я не мог понять, что это за ошибка с репозиторием SVN, поэтому я просто импортировал их без какого-либо авторского файла.И затем я переименовал данные об авторах коммитов, используя этот скрипт из Github :

#!/bin/sh

git filter-branch --env-filter '

an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
then
    cn="Your New Committer Name"
    cm="Your New Committer Email"
fi
if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
then
    an="Your New Author Name"
    am="Your New Author Email"
fi

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'

Сохраните приведенный выше код в файл с именем скажем change-commit-author-script.sh и поместите файл в репозиторийкорень.Сделайте его исполняемым на chmod +x change-commit-author-script.sh, а затем запустите на ./change-commit-author-script.sh

И да, не забудьте отредактировать скрипт, чтобы заполнить ваше имя и адрес электронной почты.

0 голосов
/ 07 февраля 2018

Если, как и я, вы уже создали users.txt, который хотели передать как --authors-file только для того, чтобы потом понять, что он не работает, вот скрипт, который использует ваш существующий users.txt и позволяетодин для дополнительных настроек:

#!/bin/sh

if [ -z ${GIT_SVN_USERS_TXT+x} ]; then
    echo "the environment variable GIT_SVN_USERS_TXT must be set to the path of your users.txt" >&2
    exit 1
fi

while read line; do
    # remove largest suffix and trim whitespace
    svn=$(echo ${line%%=*} | xargs)
    # remove smallest prefix and trim whitespace
    git=$(echo ${line#*=} | xargs)
    if [ "$1" = "$svn" ]; then
        echo "$git"
        exit 0
    fi
done < "$GIT_SVN_USERS_TXT"

if [ "$1" = "spaceatend " ]; then
    echo "VirtualSVNServer <svn.localdomain>"
    exit 0
fi

echo "Unable to find user $1" >&2
exit 1

Запустите его так:

GIT_SVN_USERS_TXT=/path/to/users.txt git svn clone --authors-prog=/path/to/script.sh --no-metadata ...
...