Восстановить клон Git-Svn без --stdlayout - PullRequest
7 голосов
/ 22 ноября 2010

Я случайно клонировал хранилище Subversion без добавления аргумента --stdlayout, давая мне что-то вроде:

$ git svn clone --prefix=svn/ svn+ssh://code.example.com/project
[two weeks later]
$ git branch -a                                                                                                
* master
  remotes/svn/git-svn

С макетом svn / git-svn, который выглядит примерно так:

branches/*
tags/*
trunk/*

Есть ли способ восстановиться после этого?

Ответы [ 3 ]

3 голосов
/ 23 ноября 2010

В настоящее время похоже, что новый старт - это единственный вариант, который будет поддерживать совместимость с SVN.

3 голосов
/ 22 ноября 2010

Это зависит: хотите ли вы иметь возможность взаимодействовать с Subversion в будущем?

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

Это не красиво, но должно быть выполнимо.

Дополнительная работа будетиспользовать git filter-branch, чтобы переписать историю каждой из только что созданных вами ветвей так же, как вы переписали совет.Это должно оставить вас с хранилищем, которое выглядит правильно.Тем не менее, вы все равно не получите интеграцию Subversion, и вам придется разобраться, как работать с исходной точкой ветвления.

Многое, гораздо больше будет работы, чтобы выяснить, как git svn хранит ее.метаданные и преобразуйте хранилище (возможно, снова используя git filter-branch) соответственно - все данные должны быть там:).

2 голосов
/ 13 июня 2012

Это не точный ответ, но я добавил флаг -r, чтобы указать последние несколько коммитов, поскольку я все равно не хотел коммитов год назад.

git svn clone --prefix=svn/ -s -r12000:HEAD http://some/svn/repo

Это требует, чтобы вы знали, к какому числу оборотов вы хотите вернуться, в данном случае, 12000. Это позволило мне сохранить здравомыслие после пропуска флага -s и сделало то, что я действительно хотел сделатьво-первых, в разумные сроки.

...