Как работать с «искусственным root коммитом» в git хранилище? - PullRequest
4 голосов
/ 25 марта 2020

Проблема и мотивация

У нас есть большой git репозиторий на нашем центральном сервере. В нем много истории, которую мы хотим сохранить, поэтому перебирать или раздавливать что-либо там на самом деле не вариант. Однако при клонировании репозитория на наши серверы разработки на самом деле актуальна только недавняя история. Для нас «недавний» может быть определен как заданный тег, и любой коммит ранее в истории может быть опущен. Цель здесь - сэкономить пропускную способность, время и дисковое пространство.

Идеи для подхода

Текущая идея состоит в том, чтобы клонировать только этот тег, используя git clone --branch my-root-tag --depth 1, рассматривая его как искусственный root коммит в этом локальном хранилище. После этого добавляем ветки, которые мы хотели бы получить вручную, используя git remote set-branches --add origin some-branch. Все эти ветви должны включать my-root-tag где-то в своей истории. Тем не менее, каждый выбор теперь снова перенесет всю историю. Есть ли способ ограничить выборки остановкой на my-root-tag? Похоже, что для этого подхода потребуется что-то вроде запроса в git мелком клоне, так как спецификатор c commit , в идеале заключенный в псевдоним git для «динамического» вычисления значения параметра --depth .

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

Результаты

edit : Подводя итог, кажется, что git fetch действительно передает только коммиты в новый привитой репозиторий root (по крайней мере в Git v 2.25.1). Только исходный clone должен быть правильно параметризован, в то время как последующие операции с хранилищем могут выполняться с использованием обычных (непараметризованных) команд git. Никакие опции shallow-include или shallow-exclude сейчас на самом деле не нужны. Это хорошая новость, так как она делает эту конфигурацию намного дешевле agile, чем первоначально опасалось.

1 Ответ

3 голосов
/ 01 апреля 2020

Кажется, что выборка всего до коммита - это то, что должно происходить с использованием --shallow-exclude=my-root-tag См. Как сохранить мелкий клон набора ветвей в git

Этот похожий вопрос предлагает использовать --shallow-since=<date of tagged commit>: Git: мелкие копии из указанного c коммита

Также связано:

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