Получение патча Git для всех коммитов всех веток удаленного репозитория - PullRequest
0 голосов
/ 05 сентября 2018

Я немного озадачен тем, как Git обрабатывает начальный git clone удаленного репозитория. Мне нужно получить полный патч Git (diff) для всех коммитов по всем веткам для данного <repo> URI.

В настоящее время я делаю следующее:

$ git clone <repo>
$ git rev-list --all | xargs git show

Тогда мое беспокойство: получает ли Git все данные репозитория в своем индексе (включая все коммиты из всех ветвей) или он получает полную историю только для основной ветки?

Другими словами, мой вопрос: достаточно ли одного git clone, чтобы получить «полный» патч / diff, который мне нужен?

ОБНОВЛЕНИЕ: <repo> может иметь несколько сиротских ветвей

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Обновление - В комментариях к другому ответу вы запросили документацию о поведении git. Это будут git clone документы (https://git -scm.com / docs / git-clone ). Если это то, что вы на самом деле просили, вы должны были сказать это в своем вопросе, а не скрывать реальный спрос в комментарии. Тем не менее, имейте в виду, что запросы на документацию не по теме, и если вам нужны git docs, их все довольно легко найти, прибегая к помощи соответствующей команды.


получает ли Git все данные репозитория в своем индексе (включая все коммиты из всех ветвей) или он получает полную историю только для главной ветки?

Ну ...

Что касается того, что вы пытаетесь спросить, по умолчанию clone копирует полную историю всех ветвей. Вы можете ограничить это поведение такими опциями, как single-branch или depth, но копирование всего происходит по умолчанию.

Однако ваша терминология представляет собой небольшую проблему. index обычно представляет собой один снимок проекта, представляющий содержимое так, как оно будет записано git commit. (Исключение составляет слияние, когда оно может хранить несколько состояний файлов, находящихся в конфликте.) Это не то место, где хранится история, и это не то, к чему rev-list обращается.

Таким образом, git не «получает все данные репозитория в своем индексе»; он получает данные в локальной базе данных.

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

0 голосов
/ 05 сентября 2018

git clone предполагается скопировать весь репозиторий со всеми ветками.

Попробуйте клонировать его, а затем запустите git branch -a. Следует перечислить все ветви.

...