Конвертируя svn в git, как заставить ветки не быть просто удаленными в репозитории svn?

Если ваш результат будет новым, вы можете использовать понимание списка:

new_list = [ some_function(i, j) for i, j in zip(list1, list2) ]

Вот реальный пример приведенного выше кода:

>>> list1 = [1, 2, 3, 4]
>>> list2 = [1, 3, 4, 4]
>>> like_nums = [ i == j for i, j in zip(list1, list2) ]
>>> print like_nums
[True, False, False, True]

Это сделает список bools, который показывает, являются ли элементы одного индекса в двух списках равными друг другу.

Кроме того, если вы используете функцию zip, существует возможность разархивировать результат, когда вы закончите работу с ним. Вот как это сделать:

>>> list1 = [1, 2, 3, 4]
>>> list2 = [1, 3, 4, 4]
>>> new_list = zip(list1, list2)         # zip
>>> print new_list
[(1, 1), (2, 3), (3, 4), (4, 4)]
>>> newlist1, newlist2 = zip(*new_list)  # unzip
>>> print list(newlist1)
[1, 2, 3, 4]
>>> print list(newlist2)
[1, 3, 4, 5]

Это может быть полезно, если вам нужно изменить исходные списки, а также каким-то образом сравнить элементы одного и того же индекса.

16
задан Community 23 May 2017 в 11:46
поделиться

3 ответа

Здесь есть довольно подробное объяснение того, как сделать довольно хороший импорт SVN, в котором объясняется, как правильно конвертировать ветки:

https://git-scm.com/book/ ru / v1 / Git-and-Other-Systems-Migrating-to-Git

Краткий ответ - запустить это:

$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes

Надеюсь, это поможет.

15
ответ дан 30 November 2019 в 12:43
поделиться

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

8
ответ дан 30 November 2019 в 12:43
поделиться

Скотт решение не сработало для меня. Я подозреваю, что что-то могло измениться в последней версии git-svn с тех пор, как он опубликовал это (и с тех пор, как была написана связанная книга), поскольку она, похоже, агрессивно собирает мусор, как только клон будет завершен. Но это только предположение, почему это не сработало. Я использую git 1.6.5.6.

В частности, мой каталог .git / refs / remotes был полностью пуст, за исключением каталога тегов, который также был пуст. Так что нет ничего, что я мог бы скопировать, чтобы исправить это.

После некоторых поисков я смог исправить это, проверив файл .git / Packed-refs и выполнив поиск и замену в следующем (в этом порядке ):

refs/remotes/tags => refs/tags
refs/remotes => refs/heads

Если ваш редактор - vim, вы можете сделать это с помощью этих двух команд:

:%s/refs\/remotes\/tags/refs\/tags/g
:%s/refs\/remotes/refs\/heads/g

svn2git 1.3.1 также не дал мне полезного результата (не импортировал никаких коммитов после определенного момента несколько месяцев назад, и все ветки показали одинаковые коммиты). На данный момент я отказался от svn2git и добился наибольшего успеха, используя git-svn в сочетании с вышеупомянутым.

Принятие желаемого за действительное: конечно, было бы неплохо, если бы git-svn просто добавил команду типа 'отказаться'

5
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: