Я не обновлял вопрос, потому что в последние несколько дней мне удавалось работать очень хорошо и легко с помощью моего нового репо:)
Вот что я сделал в итоге:
Инициировать два репозитория SVN в одном каталоге. (Я не могу вспомнить в это время, но возможно, что «git init» был сделан в том же каталоге, до:
mkdir src && cd src
(not sure about this: git init)
git svn init --stdlayout --prefix=projA/ -RprojA file:///path/to/svn/repo/A
git svn init --stdlayout --prefix=projB/ -RprojB file:///path/to/svn/repo/B
«--stdlayout» означает, что репозитории SVN имеют стандартный формат, с транком, ветвями и тегами на одном уровне.
«--prefix» используется для названия веток. Когда мы выполняем «git branch -a», все ветки SVN из проекта A имеют префикс «projA» (например, projA / branch_name_of_A). То же самое относится и к B.
Опция -R устанавливает имя репозитория SVN внутри репозитория git (это имя, которое мы используем с git при обращении к репозиторию / проекту SVN)
В этом случае путь file: /// - это путь к репозиторию SVN и к проекту внутри репо. Я использую «file: //», потому что я использовал репозиторий с плоскими файлами без сервера. Я уверен, что он работает нормально с http: // для сервера SVN.
После этого шага из любопытства я взглянул на файл src / .git / config. Две вышеупомянутые команды создали несколько разделов "svn-remote", по одному для каждого проекта (опция -R), и общий, называемый "svn". Я изменил записи, поэтому будут только ссылки на проекты. У каждой ссылки были записи для пути репо (выборки) и для тегов / филиалов / ствола. Если вы посмотрите на файл, вы поймете, что нужно изменить.
После этого я извлек содержимое каждого проекта, используя
git svn fetch projA #the contents of project A repo are downloaded
git svn fetch projB #the contents of project B repo are downloaded
Теперь, запуск "git branch -a" отобразил все ветви из двух репозиториев и главную ветвь (локальную). "git branch -r" не отображал никаких веток; вероятно, потому что они "svn-remote", а не "remote"
Текущая ветка "master" указывала на ствол второго проекта. Я решил избавиться от этого, так как это вызовет проблемы при переключении с одного проекта на другой.
Я создал две новые ветви для указания на стволы каждого проекта, затем удалил «главную» ветку:
git checkout -b master_project_A projA/trunk
git checkout -b master_project_B projB/trunk
git branch -D master
А теперь о «рабочем процессе»; работать над проектом А:
git checkout master_project_A #switch to project A
git svn rebase #check for any updates on SVN repo
git checkout -b work_on_A master_project_A #create a branch starting from the master of project A
work work work on work_on_A; commit, etc
git checkout master_project_A #go back to master of project A
git svn rebase #check again for any update on SVN repo
git checkout work_on_A #go back to the work branch
git rebase master_project_A #update branch with any changes from the master of project A
git checkout master_project_A #go back to the master of project A
git merge work_on_A #merge to the master of project A the changes from the work branch
git svn dcommit #commit changes to the SVN repo, in trunk, because master_project_A was pointing to its trunk
Если я хочу извлечь существующую ветку из SVN, я могу сделать это с помощью:
git checkout -b work_on_branch projA/branch_name
work work work
git svn rebase #update any changes from projA/branch_name
git svn dcommit #commit updates back to the branch in the SVN repo
Для проекта B я могу делать точно такие же вещи. В конце я могу иметь содержимое проекта A или B в одном и том же каталоге "src" и иметь доступ к обоим проектам в репозитории SVN из одного и того же репозитория git! : D
Я до сих пор не понял, как создать локальную ветвь, а затем отправить ее в репозиторий SVN - я был близко, но это не сработало.
Кроме того, может быть полезно знать команду "reset" ("git reset --hard projPrefix / branch"), но я сломал несколько вещей, используя ее, так что может быть лучше оставить ее на какое-то другое время.
Надеюсь, это кому-нибудь поможет!
Ура,
Alex