Как интегрировать svn-ветки в git-ветки с помощью git-svn? - PullRequest
0 голосов
/ 02 марта 2011

У меня немного опыта в SVN, но я привык работать с Git.

У меня есть следующая структура хранилища SVN и ревизии.

https://server/svn/solution/trunk/solution.sln @ r100
https://server/svn/solution/trunk/project1/project1.csproj @ r150
https://server/svn/solution/trunk/project2/project2.csproj @ r160

https://server/svn/solution/branches/solution.sln @ r100
https://server/svn/solution/branches/project1/project1.csproj @ r200
https://server/svn/solution/branches/project2/project2.csproj @ r350

Когда я клонирую хранилище

git svn clone https://server/svn/solution --stdlayout

Я все понимаю

(master)$ git branch -a  
* master  
  remotes/project1  
  remotes/project2  
  remotes/trunk  

Когда я хочу создать локальную ветку для удаленной

(master)$ git checkout -b local-project1 project1

все, что я получаю при оформлении заказа, это ветка project1. В ветке ничего не содержится от

https://server/svn/solution/branches/solution.sln @ r100

Чтобы решить проблему, я попробовал следующее:

(local-project1)$ git checkout master
Switched to branch 'master'.
(master)$ git branch local-project1 -D
Deleted branch local-project1 (was 1111a11).
(master)$ git checkout -b local-project1
Switched to new branch 'local-project1'.
(local-project1)$ pwd
/c/workingcopies/solution
(local-project1)$ cd project1
(local-project1)$ pwd
/c/workingcopies/solution/project1
(local-project1)$ git branch --set-upstream local-project1 remotes/project1
Branch local-project1 set up to track local ref refs/remotes/project1.
(local-project1)$ git svn fetch
(local-project1)$ git reset --hard ae8e9b1a ;# go to last commit of the remote branch

Выборка получает последнюю ревизию из ветви в репозитории, а для HEAD задано значение последнего коммита, но я все еще получаю только project1 в ветви, а не решение. Любые советы и помощь приветствуются.

1 Ответ

1 голос
/ 02 марта 2011

Проблема в том, что у вас нет стандартного формата SVN. Стандартная компоновка будет иметь каталоги под ветвями для каждой ветви, например, так.

repo/
  +-- trunk
  |     +-- solution.sin
  |     +-- project1/project1.csproj
  |     +-- project2/project2.csproj
  +-- branches/
        +-- branch01/
              +-- solution.sin
              +-- project1/project1.csproj
              +-- project2/project2.csproj

Вместо этого у вас есть транк и ветвь, называемые «ветками», расположенными в том же каталоге, что и транк.

Я не уверен, можно ли сказать, что git справится с этим правильно. У меня есть несколько идей: вы можете отредактировать .git / config, чтобы git искал ветку в верхнем каталоге, но тогда он может быть сбит с толку, когда пытается создать ветку, называемую транком, когда у него уже есть транк.

...