Когда я конвертирую из SVN в Git, как мне указать номер ревизии в сообщении фиксации? - PullRequest
4 голосов
/ 18 августа 2011

Мы будем конвертировать наш репозиторий из Subversion в Git, но хотели бы иметь возможность сохранить номер редакции SVN, поскольку комментарии в трекере ошибок регулярно ссылаются на него.

Мы будем использовать git svn clone ипроцесс описан в блоге Джона Альбина .

Есть ли способ включить номер ревизии в сообщение о коммите?Я бы предпочел сделать это во время клонирования, но шаг пост-обработки был бы приемлемым.

Да, я знаю о git svn find-rev, но для этого требуется, чтобы SVN-репозиторий оставался без изменений, а у пользователя был доступ к сети.к этому.

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

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

Однако по указанной вами ссылке вы клонируете --no-metadata, что говорит git svn не добавлять строку git-svn-id.

3 голосов
/ 18 августа 2011

Непонятно, зачем вам нужен номер редакции svn в сообщении фиксации.Как указывает @John Flatness, git-svn включает номер ревизии svn в сообщения фиксации.

Мы сочли более полезным создавать теги для каждой ревизии.Это, кажется, лучше соответствует полезности номеров ревизий SVN.Скрипт, который использует git svn find-rev, быстро добавил 10000 тегов.Теперь мы можем получить доступ к любому историческому номеру svn ревизии.


Для каждого запроса здесь есть скрипт (добавленный здесь, потому что комментарии, похоже, плохо обрабатывают код)

#!/bin/bash

declare -i rev

for ((rev = 1; rev < 100; ++rev))
do
    hash=$(git svn find-rev "r$rev")
    if [ -z $hash ]; then
        break
    fi
    # TODO Pad with 0's for small values of rev
    tag="svn_r$rev"
    git tag -a -m "$tag" $tag $hash
done

Это простоделает первые 100 ревизий.Мы шагнули на 1000 для первых 5000 оборотов, затем на 100. Последние 2000 или около того коммитов имеют индивидуальные теги.

0 голосов
/ 17 августа 2018

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

declare -i rev

for rev in {1..50000}
do
    echo $rev
    hash=$(git svn find-rev "r$rev")
    tag="svn_r$rev"
    if [ -z $hash ] 
    then
        echo no tag
    else
        echo $hash
        echo $tag
        git tag -a -m "$tag" $tag $hash
    fi
done

echo Thats it !
...