это рабочий процесс, который я сейчас использую для своих проектов svn (я никогда не использую ветки svn, а над некоторыми проектами активно работают и другие люди):
- на сервере выполните начальное
git svn fetch
, что может занять несколько часов. Также создайте ветку build. - на машине для разработки клонирование теперь выполняется быстро:
git clone srv://project.git, git checkout build
, за которым следуетgit update-refs ..., git svn fetch
, чтобы восстановить ссылку на репозиторий svn - работа, фиксация, работа, фиксация, ...
- чтобы проверить, все ли в порядке,
git push build
на сервер и запустить сборку в Hudson для этой ветки - для хранения работы, чтобы я мог работать над ней с другой машины, также нажмите ветку сборки
- когда удовлетворено, объедините коммиты вместе в логические шаги (например, по одному для каждой ошибки), зафиксируйте в svn и сбросьте все, как
git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build
Введите svn externals. Я пробовал каждый скрипт здесь Уже но все они терпят неудачу. Мои внешние настройки настроены так:
/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
. Также отдельные файлы, кажется, вызывают больше проблем. (подвопрос 1: для какого формата svn: externals тогда были написаны эти скрипты?)
Кажется, нетрудно изменить один из сценариев, чтобы справиться с моей ситуацией и правильно воспроизвести структуру каталогов, которую я ищу, но тогда у меня останется серьезная проблема: если я изменю файл как в x, так и в y / z каталогов, я не вижу способа объединить это в один коммит svn, и это одна из причин, по которой я вообще начал использовать git.
Отсюда вопрос: есть ли способ воспроизвести описанный выше рабочий процесс, используя только части определенного репозитория svn, таким образом, чтобы я мог выполнить svn dcommit в корне? Я бы предпочел готовое решение, работающее как в Linux, так и в Windows.
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
подвопрос 2: нельзя ли получить отдельный файл через git svn?