Получение списка пользователей SVN для Subversion -> Git-миграция? - PullRequest
23 голосов
/ 03 марта 2012

Я просматривал несколько SVN-> Git миграций, и все они упоминают о получении правильного списка пользователей перед миграцией, в частности с помощью команды:

svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq

У меня есть доступ к серверу Ubuntuхостинг единого репозитория (с 9 проектами), но без локальной установки SVN.Можно ли выполнить эту команду на сервере, чтобы получить список имен пользователей?На данный момент он просто возвращает ошибку:

svn: E155007: '/var/subversion/' is not a working copy

Ответы [ 2 ]

29 голосов
/ 03 марта 2012

Передайте путь к хранилищу как URL:

svn log -q file:///var/subversion | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq

Кстати, если вам нужен список авторов в хронологическом порядке первого коммита (я нашел его полезным один раз при конвертации из svn в git), вы можете сделать следующее:

svn log -q -r 1:HEAD url://to/repo | grep '^r' | awk -F'|' '!x[$2]++{print$2}'
0 голосов
/ 21 октября 2018

См. Инструкции ниже для преобразования SVN-репозитория в git-репозиторий

Примечание: ТОЛЬКО чтобы увидеть список пользователей, запустите позицию 1.

КОНВЕРТ СВН РЕПО в ГИТ РЕПО

1. Получить список всех коммиттеров Subversion

 $ svn log -q https://svn.example.com/repository_name | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

Это будет захватывать все сообщения журнала, извлекать имена пользователей, удалять любые дубликаты имен пользователей, сортировать имена пользователей и помещать их в файл «hors-transform.txt ». Теперь отредактируйте каждую строку в файле. Например, преобразуйте :

username = username <username>

в это:

 username = Firstname Lastname <username@example.com>

2. Клонировать хранилище Subversion, используя git-svn

git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp

3. Конвертировать svn: игнорировать свойства в .gitignore Если в вашем репозитории svn использовались свойства svn: ignore, вы можете легко преобразовать это в файл .gitignore, используя:

cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'

4. Переместить репозиторий в пустой репозиторий git Сначала создайте пустой репозиторий и сделайте так, чтобы его ветвь по умолчанию соответствовала имени ветки svn "trunk".

git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk

cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare

Теперь вы можете безопасно удалить ~ / temp репозиторий.

5. Переименуйте ветку "Магистраль" в "Мастер" Ваша основная ветка разработки будет называться «trunk», что соответствует имени, которое было в Subversion. Вы хотите переименовать ее в стандартную «master» ветку Git, используя:

cd ~/new-bare.git
git branch -m trunk master

6. Очистить ветки и метки git-svn превращает все теги Subversions в очень короткие ветви в Git в форме «теги / имя». Вы хотите преобразовать все эти ветви в настоящие теги Git, используя:

cd ~/new-bare.git
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
   git tag "$ref" "refs/heads/tags/$ref";
   git branch -D "tags/$ref";
done

7. Переместить пустой репозиторий в центральный удаленный репозиторий Пример того, как переместить ваш локальный пустой репозиторий в репозиторий gitolite:

mv new-bare.git repository_name.git
tar czvf repository_name.git.tar.gz repository_name.git/
scp repository_name.git.tar.gz remote_host:
ssh remote_host
tar xzvf repository_name.git.tar.gz
sudo chown -R git:staff repository_name.git/
cd repository_name.git/
find . -type f -exec chmod go= {} \;  # remove group and world permissions
find . -type d -exec chmod go= {} \;  # remove group and world permissions
cd ../
mv repository_name.git /Users/git/repositories/

8. Клонировать новую локальную копию

mv old-svn-copy old-svn-copy.backup
git clone git@remote_host:repository_name.git

Вывести список всех неверсионных файлов из вашего старого локального хранилища svn и скопировать их в новый локальный репозиторий git:

cd old-svn-copy.backup
git clean -dXn  # Using this command because the old copy was a git-svn clone
cp example-file.txt ../repository_name/  # copy all files and directories from the list that you need in the new local git repository

Теперь вы можете переместить резервную копию локальной копии SVN в корзину. Это может быть хорошей идеей, чтобы не очищать мусор, пока вы не убедитесь, что все работает правильно.

9. Готово.

Источник здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...