Git Subtree. Почему я не могу веткиться из поддерева, а не из корня?

Я пытаюсь понять смысл использования стратегии поддерева Git. Мое намерение заключалось в том, чтобы объединить несколько разрозненных РЕПО в небольшую семью игрушек-репозиториев под зонтичным репо. Я использую описанную здесь стратегию поддерева: http://help.github.com/subtree-merge

Я вытаскиваю свои волосы, пытаясь убедить Git, что я хочу создать ветвь из одного из этих поддеревьев NOT из корня. Когда я записываю cd в поддерево, создайте ветку, а затем cd вернемся к корню, работающая ветвь Git от корня четко указывает, что ветвь была создана в корне. Вздох.

Мне нравится git/github, но это безумие, чтобы заставить эту, казалось бы, рутинную задачу работать правильно.

Может кто-нибудь, пожалуйста, просветит меня?

Ответ 1

git работает только на уровне всего дерева, поэтому везде, где вы находитесь в рабочем дереве, такие как branch, checkout <branch>, commit все работают на корневом уровне.

Стратегия слияния поддерева - это стратегия слияния, которая помогает, когда у вас есть репозиторий, где одна ветка перемещает поддерево файлов в другое место в репозитории, а другая сторона внесла изменения в эти файлы в исходных местах. Он призван помочь объединить эти две операции таким образом, что обычная стратегия слияния создаст больше конфликтов или оставит файлы в неправильном месте.

Стратегия слияния поддерева не влияет на то, как работает операция "все дерево" из git, поэтому, если вы хотите сделать ветку, которая является всего лишь одним поддеревом репозитория, вам нужно разветкить, а затем сделать новую фиксацию с удалением других поддеревьев, и дерево интереса переместилось на уровень корня.

Учитывая ваш шаблон использования, я бы рекомендовал, чтобы вы долго читали о подмодулях. Он может обеспечить функциональность, которая соответствует тому, что вы пытаетесь достичь.

Ответ 2

Я рекомендую apenwarr git -subtree: http://github.com/apenwarr/git-subtree. Надеюсь, в какой-то момент он будет добавлен к самому git.