Я постараюсь сохранить эту краткую информацию.Как я могу объединить изменения из ветви, содержащей подмножество каталогов из другого?
У нас есть git-хранилище, которое действует как зеркало SVN (управляется BitBucket). Этот репо содержит каждый проект в компании с начала времени и наличие каждого клона разработчика не является разумным запросом (25 + 33GiB полный клон и 15 + GiB неглубокий). Но даже тогда нам не нужен полный клон всего репозитория, всего лишь подмножество каталогов внутри.
Используя git-поддеревье, мне удалось разделить все интересующие нас каталоги и подумали, что мы можем добавить эти каталоги в наши локальные репозитории, используя git-subtree add. Этот процесс прозрачен для репозитория svn. Это хорошо работает, и размер намного более управляемый (9 + 6GiB полный клон и 8GiB мелкий). Проблема в том, что я не знаю, как мы могли бы вносить изменения в эти «частичные клоны» и объединить их обратно в основную ветвь.
Я думал, что мы сможем использовать обычные запросы на тягу, чтобы получить их, но так как деревья ветвей разные, это не ведет себя так, как хотелось бы (отсутствующие каталоги рассматриваются как абсорбция). Я просто хочу объединить изменения клонированных каталогов и оставить остальных нетронутыми.
Я не думаю, что использование разреженной выписки поможет здесь, так как нам все равно придется клонировать полное репо, чтобы заставить его работать, и именно этого я и стараюсь избежать.
Есть ли какая-то комбинация команд, которые я могу использовать, чтобы все это работало?
Вот эта (модифицированная) сценарии, которые я использовал, чтобы расколоть из каталогов и проверки каталогов интересов:
split_projects.sh
я использовал ГИТ-поддерево, чтобы разделить и воссоединиться каталогами и использовал мерзавец -replace, чтобы улучшить скорость повторного добавления (только для обработки новых коммитов). Обратите внимание, что rejoin - , а не, преданный основному репо (я не хочу пытаться совершить это, особенно с зеркалом svn).
initial_setup.sh
Это сценарий для подготовки местного репо. Для использования пользователями Windows, многие из которых не очень разбираются в инструментах git или командной строки.
checkout_projects.sh
Фактический скрипт выписки.
Есть еще один, который извлекает обновления из подкаталогов split, но я не включаю его здесь.
Что случилось с параметрами поддерева при слиянии? – jthill
Я понимаю, что использование этой стратегии объединяет ветви, где один полностью содержится внутри другого. то есть ветвь A уже является поддеревом ветви B. В моей ситуации ветвь A содержит подмножество каталогов ветви B и не будет работать. –
Возможно, вам придется обратиться к списку рассылки ([email protected]), чтобы получить поддержку. Мой интуитивный инстинкт, однако, заключается в том, что может не быть решения, поскольку вы пытаетесь каким-то образом применить изменения, сделанные в поддеревьях к корневому репо, и я не могу представить, как это было бы возможно без информации о коммитах в корень репо. Если ваши разработчики используют Windows, недавно открытый проект GVFS на самом деле может быть тем, что вы ищете. – Pockets