2009-05-05 7 views
30

Я работаю с программным обеспечением, которое хранится в svn для контроля версий. Я хотел бы использовать git (git-svn), однако для его использования требуется множество настроек и конфигурации. Есть инструменты, которые заботятся обо всех настройках, включая проверку всего кода с помощью svn.Преобразование SVN-checkout для использования git (git-svn)

Для всей документации по git-svn (я смог найти) требуется свежая проверка, используя git-svn.

Есть ли способ конвертировать существующий svn checkout, чтобы он мог использовать git-svn?

ответ

11

Вы могли бы сделать что-то вроде этого:

  1. ли полный клон вашего SVN дерева с использованием ГИТ-SVN, во временный каталог. Убедитесь, что вы используете ту же ревизию, что и существующая проверка.
  2. Переместите папку «.git» с верхнего уровня проверки git-svn на верхний уровень проверки SVN.
  3. Затем вам нужно будет указать Git игнорировать каталоги .svn или удалить их все.
  4. Удалить git-svn checkout.
  5. Теперь вы можете манипулировать существующими файлами с помощью Git и git-svn.
  6. Сделайте «git status» и надейтесь, что в нем говорится, что изменений нет.
+0

У меня нет полной работоспособности, как я этого хочу, но такая стратегия, похоже, будет работать. – Jachin

+3

Есть ли способ сделать это БЕЗ доступа к репозиторию svn? У меня нет доступа к репо, у меня есть нетронутая рабочая копия при последней ревизии. Я надеялся, что, возможно, git svn fetch -r N, где N - это ревизия моей рабочей копии, можно каким-то образом убедить использовать содержимое рабочей копии для получения необходимой информации ... – Ole

13

Нет. Клон git-svn преобразует весь репозиторий в git. В проверках SVN нет всего репозитория и поэтому нельзя клонировать. Это основное преимущество перехода от SVN или CVS к распределенной системе (например, git).

+0

Я не забочусь обо всей истории, хотя это состояние, когда оно было проверено из svn и будущих изменений в ветви svn (так что я получил бы от вызова git-svn rebase) – Jachin

+3

Это не так, как работает git. DVCS «распределяется», потому что каждый клон является полной копией репозитория. В этом весь смысл. – singpolyma

+0

Снова вы видите умных людей, объясняющих, насколько вы должны заботиться об истории ... Я забочусь об истории, но только ОТ СЕЙЧАС, предположим, что история оборвана с тоннами ненужных двоичных файлов (никаких проблем в SVN) и только недавно рабочее дерево не имеет таких нагрузок, svn: externals и т. д. –

1

Другой способ сделать это, который не изменяет оригинальную Subversion рабочую копию и не требует от вас, чтобы скопировать его, использует патч:

  1. сделать полный клон вашего Subversion дерева, используя git-svn, в новый каталог, который будет репозиторием Git. Убедитесь, что вы используете ту же ревизию, что и существующая проверка. Вы можете использовать git reset --hard :/r<revision>, чтобы заставить его быть той же ревизией после клонирования, где <revision> - это ревизия, в которой рабочая копия Subversion обновлена ​​(см. Это с помощью svn info).
  2. cd к вашей рабочей копии Subversion.
  3. Используйте svn status, чтобы убедиться, что все новые файлы помечены A (или использовать svn add, чтобы добавить их), и все удаленные файлы помечаются D (или используйте svn rm удалить их).
  4. Запустите svn diff >patch.diff, чтобы создать файл исправления.
  5. Скопируйте patch.diff в начало репозитория Git, созданного ранее.
  6. cd наверху созданного ранее хранилища Git.
  7. Запустите git apply -p0 patch.diff, чтобы применить исправление на рабочем дереве репозитория Git.

Теперь вы можете пройти через изменения, используя git status и git add/git commit их, чтобы сохранить их в локальном хранилище.

4

Предполагаю, что вы, вероятно, хотите сохранить историю. Однако, если вы (или кто-либо еще, кто спотыкается на этой странице) не нуждается в истории, вы можете использовать функцию «экспорт», как описано здесь: https://stackoverflow.com/a/419475/2437521.