Я буду чрезвычайно признателен за все советы о том, как приступить к следующей задаче под рукой. Я достаточно внимательно прочитал документацию по git-tfs clone
, git-tfs quick-clone
и git-tfs branch
, но так и не смог разобраться с этой проблемой.
Наша кодовая база TFS УЖАСНО БОЛЬШАЯ (это потому, что по одиозным причинам она содержит большие BLOB-объекты и тому подобное). Однако он довольно хорошо организован и имеет следующую структуру:
$/TeamProject/Dev (TERRIBLY LARGE)
|
+- $/TeamProject/Dev.EpicX (TERRIBLY LARGE)
|
+- $/TeamProject/Dev.EpicY (TERRIBLY LARGE)
|
+- $/TeamProject/Dev.EpicZ (TERRIBLY LARGE)
Каждая из этих ветвей является «законной» ветвью TFS (-vs-просто разветвленной «папкой»). Мы можем думать о ветке Dev как об основной ветке интеграции. Эти ветки содержат наши решения и проекты, а также несколько других ресурсов (как я уже упоминал, BLOB и т. д.)
Как я уже сказал, из-за смехотворного размера этих веток большинство из нас даже не утруждают себя получением ветки целиком, а только соответствующими каталогами или решениями, над которыми мы работаем. Например, я работаю в $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory в ветке Dev.EpicY. Размер исходных файлов в SolutionDirectory намного удобнее (~200 МБ). Это каталог, в котором мне нужно создать репозиторий git
для работы, наслаждаясь всеми преимуществами git
(локальные ветки и т. д.), не затрагивая моих коллег, которые продолжат использовать TFS.
Прежде всего: мне нужна возможность прямой интеграции путем «слияния» с соответствующим «родительским» каталогом $/TeamProject/Dev/Foo/Bar/SolutionDirectory, который постоянно развивается.
Что я пробовал
1-я попытка: клонировать все ветки
Меня не интересует предыдущая история проекта, поэтому я думаю использовать git tfs quick-clone
.
git tfs quick-clone http://tfs-server/Collection $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory . --branches=all
с последующим:
git tfs quick-clone http://tfs-server/Collection $/TeamProject/Dev/Foo/Bar/SolutionDirectory . --branches=all
Когда я это делаю, я не получаю отношения ветвления родитель-потомок между Dev и Dev.EpicY. Например:
git tfs branch
Git-tfs remote details:
default -> http://tfs-server/Collection $/TeamProject/Dev/Foo/Bar/SolutionDirectory
refs/remotes/tfs/default - 04ddfd8641096a2d02eed4c087423bc0cdeb4ed7 @ 44016
2-я попытка: явно инициализировать ветки
После клонирования. Теперь я даже получаю сообщение об ошибке:
git tfs branch --init --all
error: The use of the option '--branches=all' to init all the branches is only possible
when 'git tfs clone' was done from the trunk!!! '$/TeamProject/Dev/Foo/Bar/SolutionDirectory'
is not a TFS branch!
3-я попытка: перейдите в TFS и преобразуйте подпапки в ветки.
Кажется, что для git tfs
разница между обычными папками и ветвями в TFS значительна, поэтому я перешел на TFS и преобразовал SolutionDirectory в ветку, вместе с его иерархией:
$/TeamProject/Dev/Foo/Bar/SolutionDirectory
|
+- $/TeamProject/Dev.EpicX/Foo/Bar/SolutionDirectory
|
+- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
|
+- $/TeamProject/Dev.EpicZ/Foo/Bar/SolutionDirectory
Теперь, когда я запустил git tfs branch --init --all
, был некоторый прогресс, но все равно произошел сбой со странной ошибкой:
git tfs branch --init --all
Tfs branches found:
- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
=> Working on TFS branch : $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
Branches to Initialize successively :
-$/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory (43506)
The name of the local branch will be : Dev.EpicY/Foo/Bar/SolutionDirectory
error: an error occurs when initializing the branch. Branch is ignored and continuing...
=> Working on TFS branch : $/TeamProject/Dev/Foo/Bar/SolutionDirectory
warning: Some Tfs branches could not have been initialized:
- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
Please report this case to the git-tfs developers! (report here : https://github.com/git-tfs/git-tfs/issues/461 )
warning: Some Tfs branches could not have been initialized or entirely fetched due to errors:
- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
=>error:error: Couldn't fetch parent branch