Переключение ветки для подкаталога только в Git - PullRequest
2 голосов
/ 28 сентября 2011

Я работаю над Git-репозиторием с двумя основными ветками и двумя основными папками. Одна из этих папок очень похожа между двумя ветвями, другая сильно отличается. Это означает, что, даже если я просто работаю над общей папкой, переключение между двумя ветвями происходит медленно из-за всех обновлений, необходимых для другой папки.

Можно ли переключить ветвь подпапки в репозитории Git, не переключая ветвь остальной части репозитория? В Subversion я мог просто использовать svn switch в любой подпапке, и все было бы просто Work ™, но я не нашел эквивалента в Git.

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

Просто, чтобы усложнить ситуацию, я использую git svn; две основные ветви, которые я упоминаю, - это ствол и ветвь в базовом хранилище Subversion.

Ответы [ 4 ]

3 голосов
/ 27 февраля 2012

Я нашел новое решение для этого: git-new-workdir.Он не позволяет мне переключать подпапки, но он позволяет мне иметь отдельные рабочие каталоги, между которыми я могу переключаться вместо использования операции «switch».

Это решает основную проблему: у меня может быть один рабочийдиректории для каждой из основных веток, меняйте их местами в любое время без каких-либо затрат, и эти два рабочих каталога совместно используют один и тот же репозиторий Git, поэтому мне не нужны два отдельных клона, как Бен Ли , предложенный в комментариев к своему ответу .

Чтобы получить сценарий в моей системе (Cygwin), мне нужно было скачать и установить исходный код Git;он находится в каталоге contrib.

3 голосов
/ 28 сентября 2011

Вы можете сделать это в git с помощью функции "sparse checkout".Сначала вы должны включить это в своем проекте:

git config core.sparsecheckout true

Затем вы должны настроить каталоги, которые вы хотите проверить.Откройте .git/info/sparse-checkout в редакторе и перечислите каталоги, которыми вы хотите ограничить оформление заказа (каждая в отдельной строке).Затем выполните эту команду:

git read-tree -m -u HEAD

Вы можете отключить запасную проверку в более поздний момент, чтобы вернуть поведение в нормальное состояние.

2 голосов
/ 28 сентября 2011

Если вы действительно хотите это сделать, единственный способ в Git - настроить подпапку как подмодуль http://book.git -scm.com / 5_submodules.html

Полагаю, причина в том, что SVN допускает это, потому что он помещает отдельные файлы .svn в каждую подпапку, которые отслеживают текущее состояние.

0 голосов
/ 28 сентября 2011

Я не думаю, что это возможно.Git - это трекер контента, который отслеживает изменения контента, а не файлов или папок.

В качестве обходного пути вы можете использовать git-svn для извлечения ствола SVN в одном репозитории Git и ветки SVN в другом.

...