Git: несколько пультов + sparseCheckout + мелкий клон - PullRequest
0 голосов
/ 04 января 2019

Я хочу клонировать часть хранилища. Если быть более конкретным, репозиторий - это https://github.com/helm/charts, часть, в которой я заинтересован - stable/airflow. После этого я планирую внести некоторые изменения и зафиксировать их в своем личном репо. Периодически я хочу сделать ребаз с helm/charts репо. Есть несколько дополнительных критериев:
- Хранить в моем личном репо только stable/airflow каталог
- Получить как можно меньше метаданных из helm/charts репо

Моим первым подходом было добавление двух пультов, используя настройку sparseCheckout и выборку с depth=1. Это доставило мне некоторые затруднения: я не мог содержать репо в чистоте от ненужных папок (sparseCheckout ~ = sparsePush), нажатие на источник не работает с мелким клоном.

В настоящее время я закончил с созданием двух папок "git": .git (мое репо) и .helm_git (репозиторий helm). Последний все еще использует sparseCheckout и неглубокий клон. Эти репозитории ничего не знают друг о друге и могут отслеживать только измененные файлы. (поэтому нет смешанной истории коммитов). Но это меня тоже не устраивает. Я должен поместить обе папки в файл .gitignore. И поэтому каждый разработчик должен устанавливать их самостоятельно.

Видите ли вы другие возможности для решения исходной проблемы?

1 Ответ

0 голосов
/ 04 января 2019

Нет простого способа и способа, который я бы порекомендовал сделать точно так, как вы просите.

В git хранилище организовано вокруг COMMIT с - снимки всего содержимого проекта , а не вокруг файлов. Подмножество файлов - это другое содержимое, поэтому требуется другое COMMIT. (Это относится к вашему комментарию о «редком толчке»; такого не может быть в git.)

Таким образом, вы можете ограничить коммиты, которые вы храните, только путем клонирования определенных ссылок и / или с помощью аргумента --depth для создания поверхностного клона. Но особенно, если вы хотите иметь возможность интегрировать восходящие изменения в будущем, совсем не просто ограничить набор файлов в коммитах, которые вы храните.

Прежде чем приступить к как, я настоятельно рекомендую вам еще раз взглянуть на , почему вы бы приложили усилия для этого. Это не сэкономит столько места. (Общая история репо составляет около 17 МБ, с рабочим деревом 11 МБ на кончике ветки по умолчанию. Для проекта может быть полезно использование git lfs для некоторых крупных активов, но даже полный размер репо как есть, просто нет ' Это может беспокоить в большинстве современных сред.) Если вы просто хотите иметь менее загруженное рабочее дерево, то, как вы заметили, для этого подходят редкие проверки, даже если само хранилище хранит все.

Если вы все еще хотите попытаться это сделать, вам нужно создать «хранилище мостов», в котором будет храниться как их история (или часть), так и ваша. Это будет включать, по крайней мере, одну дополнительную ветку, нестандартные процедуры слияния и в целом просто процесс интеграции хрупких изменений. Другими словами, это не будет ни меньше, ни проще, чем просто работать с полными коммитами.

Вы можете найти шаблоны, которым вы должны будете следовать, чтобы создать такую ​​процедуру, в предыдущем ответе здесь: Объединить восходящую ветку в ветвь с переписанной историей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...