Git & svn externals - окончательное решение? - программирование
Подтвердить что ты не робот

Git & svn externals - окончательное решение?

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

  • на сервере, выполните inital git svn fetch, который может занять несколько часов. Также создайте ветку 'build'.
  • на клонирование машины разработки теперь быстро: git clone srv://project.git, git checkout build, за которым следует git update-refs ..., git svn fetch, чтобы восстановить ссылку на репозиторий svn
  • работа, фиксация, фиксация работы,...
  • чтобы проверить, правильны ли вещи, git push build на сервере и запустить сборку в Hudson для этой ветки
  • чтобы сохранить работу, чтобы я мог работать с ней с другой машины, также нажмите ветку build
  • когда выполняется, объединение объединяется в логические шаги (например, по одному для каждой ошибки), фиксировать svn и reset все как git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

Введите svn externals. Я пробовал каждый script здесь уже, но все они терпят неудачу. Мои внешние настройки настроены следующим образом:

/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file

и скрипты делают такие вещи, как попытка создать /path/to/x в корне файловой системы и git svn fetch /path/to/x. Кроме того, отдельные файлы, похоже, вызывают больше проблем. (subquestion 1: что такое формат svn: externals, для которого эти сценарии были написаны?)

Кажется, что это не так сложно изменить один из сценариев, чтобы обрабатывать мою ситуацию и реплицировать структуру каталогов, после которой я прав, но тогда у меня осталась серьезная проблема: если я изменил файл как на x, так и на y/z, я не вижу способа присоединиться к этому в одном svn-коммите, и это одна из причин, по которой я начал использовать git в первую очередь.

Следовательно, возникает вопрос: существует ли способ реплицировать описанный выше рабочий процесс, используя только части некоторого репозитория svn, таким образом, что я могу сделать svn dcommit в корне? Я бы предпочел готовое к использованию решение, которое работает как на Linux, так и на окнах.

edit Я быстро взломал один из скриптов, которые я нашел, и сделал его репликацией структуры каталогов внешних svn. Я не могу клонировать отдельные файлы, но здесь вывод:

git svn clone -r HEAD srv://svn/repo/path/to/projects.sln
Initialized empty Git repository in xxx/projects.sln/.git/
Invalid filesystem path syntax: REPORT request failed on '/svn/repo/!svn/vcc/default':
  Cannot replace a directory from within at yyy/git/libexec/git-core/git-svn line 5114

subquestion 2: невозможно ли получить один файл через git svn?

4b9b3361

Ответ 1

К сожалению, внешние svn довольно гибкие. Я столкнулся с несколькими сценариями, которые обрабатывают их как < путь > <url> , но <url> < & путь GT; также допускается. Поэтому я думаю, что некоторые скрипты просто сломаны в этом отношении.

Чтобы ответить на ваше второе подзапрос: нет. 'git svn fetch' должен работать с поддеревом репо Subversion, но он должен быть чем-то, что он может рассматривать как ветвь. Единственное, что хорошо отображает в этой парадигме, - это каталог (ствол/, например). Здесь также страдают FWIW, Bazaar и Mercurial. В конце дня Subversion - это просто файловая система с версиями, тогда как Git имеет концепцию первого класса ветки. Это один из тех несоответствий, которые мешают.: - (

Ответ 2

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