мерзавец эквивалент Subversion "переключатель"? - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть несколько SVN-репозиториев, которые я планирую переключить на git, но они используют функцию «переключения» Subversion таким образом, что я не знаю, как эмулировать в git. Как мне это сделать?

Возьмем один конкретный пример: я храню свой домашний каталог в SVN. Я проверяю это на многих компьютерах, где я работаю. Это очень удобно для многих вещей, но не для многих. Примеры:

  • У меня есть каталог www /, где я создаю личный веб-сайт. Я работаю на этом сайте только с моей домашней машины, и на самом деле там есть файлы, которые я не хочу разбрызгивать на все остальные машины. В самом репо это пустой каталог, но когда я проверяю репо на своем домашнем компьютере, я также переключаю этот каталог на несвязанное место в репо, где фактически живет www /. Таким образом, большинство машин просто получают пустой www /, но выбранные машины получают содержимое.

  • У меня есть каталог Documents /, содержащий документы MacOS. Много их. Они бесполезны на многих моих машинах с Linux. Из-за нехватки места я использую ту же хитрость, о которой говорилось выше: в хранилище «Документы» пусто, но в других местах путей хранилища есть фактическая папка «Документы», в которую я переключаю «Документы / на Mac».

1 Ответ

4 голосов
/ 22 декабря 2011

Во-первых, это не то, для чего предназначена команда switch.

В любом случае, вы собираетесь использовать git submodules для того, что вы хотите.Www и Documents могут быть разделенными git-репозиториями, и вы можете использовать их как подмодули в своем основном git-репозитории.Таким образом, когда кто-либо клонирует репо, они получат пустые папки, если только они не обновят субмодули.

Если вы не хотите, чтобы субмодули, вы должны явно клонировать отдельные репо для www и Documents и поместить вСделки рЕПО.Обратите внимание, что git не отслеживает пустые папки, поэтому у вас не будет возможности заполнять их.

Другой способ (не очень рекомендуется), если вы не хотите, чтобы внешние репозитории создавали несвязанные ветки с помощью, скажем, www:

git checkout --orphan
git rm -rf .
mkdir www
touch www/a
git add www
git commit -m "adding www"
git checkout master
git checkout www -- www

PS: Реальный git-эквивалент svn-коммутатора, для которого он предназначен:

git checkout <branchname>
...