мерзавец зеркало без истории, но с тегами - PullRequest
0 голосов
/ 07 июня 2018

по какой-то причине я хочу создать git зеркало проекта БЕЗ истории, но с сохранением тегов.

Например:

History: A-B-C-D-E-F-G-H
           |     |   |  
Tags:      1     2   3

После зеркалирования этого хранилища оно должно выглядеть следующим образом:

History: B-E-G
         | | |
         1 2 3

Возможно, также необходимо создать из [B|E|G] некоторые другие сообщенияВероятнее всего, такой же, как у тега (при необходимости).

Есть ли способ сделать это напрямую с помощью git или мне нужно написать это?Моя идея заключалась в том, что, начиная с самого последнего тега, я просто перебираю историю до следующего тега.Возможно ли это при объединении двух тегов?

1 Ответ

0 голосов
/ 07 июня 2018

В общем, самый простой способ переместить несколько ссылок одновременно (даже если это только одна ветвь и теги, доступные этой ветке) - это использовать git filter-branch.

Во-первых, вы должны использовать --commit-filter чтобы "пропустить" коммиты, которые не имеют тегов.Вам нужен скрипт, который может сказать, есть ли в скрипте тег.Вы можете использовать что-то вроде

git describe --exact-match --tags

и, если это найдет совпадение, оно вернет 0 (а также напечатает имя тега на stdout);так что ваш фильтр может условно отложить либо commit-tree, либо skip-commit в зависимости от того, найден ли тег.

Затем вам потребуется добавить --tag-name-filter cat или что-то подобное, чтобы заставить теги действительно перемещаться.

Подробнее о filter-branch см. https://git -scm.com / docs / git-filter-branch

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

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