Статьи

Анатомия Git Pull


Когда-нибудь видел что-то подобное?

➜  ~/projects/gitblit/[master]>git pull
remote: Counting objects: 5899, done.
remote: Compressing objects: 100% (1322/1322), done.
remote: Total 5746 (delta 4099), reused 5413 (delta 3770)
Receiving objects: 100% (5746/5746), 3.78 MiB | 853 KiB/s, done.
Resolving deltas: 100% (4099/4099), completed with 98 local objects.
From git://github.com/gitblit/gitblit
 * [new branch]      bootstrap  -> origin/bootstrap
 * [new branch]      gh-pages   -> origin/gh-pages
 * [new branch]      issues     -> origin/issues
 * [new branch]      ldap       -> origin/ldap
   8f73a7c..67d4f89  master     -> origin/master
 * [new branch]      rpc        -> origin/rpc
From git://github.com/gitblit/gitblit
 * [new tag]         v0.9.1     -> v0.9.1
 * [new tag]         v0.9.2     -> v0.9.2
 * [new tag]         v0.9.3     -> v0.9.3
Updating 8f73a7c..67d4f89
Fast-forward
 .classpath                                         |  137 +-
 .gitignore                                         |   43 +-
 NOTICE                                             |   56 +
 build.xml                                          |  484 ++-
 distrib/add-indexed-branch.cmd                     |   20 +
[..clipped..]
 docs/screenshots/00.png                            |  Bin 41019 -> 38869 bytes
 374 files changed, 43257 insertions(+), 3508 deletions(-)
 create mode 100644 distrib/add-indexed-branch.cmd
 create mode 100644 distrib/federation.properties
[..clipped..]

Что ж, Дэвид Гербер из
списка рассылки пользователей Git сделал это и
спросил, о чем весь этот вывод . Я понял это, что создал интеллектуальный фильтр на выходе многих команд Git, игнорируя части, которые не важны. Поэтому я хотел покопаться, понять и объяснить каждую из этих строк. Вот слегка адаптированная копия моего ответа в списке рассылки. Я обновлю его, если у вас есть какие-либо комментарии, которые могут улучшить объяснения.

Я подменил его пример вывода тем, что получил от большого обновления в проекте
Gitblit :

➜ ~ / projects / gitblit / [master]> git pull 
remote: Подсчет объектов: 5899, сделано.

Любое сообщение с префиксом «remote:» означает, что оно приходит из удаленного хранилища.

Первое, что он делает, это подсчитывает количество
объектов в хранилище , которые должны быть перенесены: коммиты, BLOB- объекты , деревья и теги. Я думаю, что 5899 — это количество объектов, отсутствующих в вашем локальном хранилище.

Если вы хотите узнать больше об этих объектах, попробуйте поиграть с
git count-objects -v в ваших репозиториях до и после фиксации. Также обратите внимание, как
git gc изменяет результат.

Обратите внимание, что количество объектов различается между «незакрепленными» объектами и
объектами, которые были сжаты в «файлы пакета» (представьте его как zip-файлы) для эффективности.

Удаленный: Сжатие объектов: 100% (1322/1322), сделано.

Это дистанционное сжатие незакрепленных предметов перед переносом. Я считаю, что 1322 — это количество незакрепленных объектов, которые необходимо перенести.

удаленный: всего 5746 (дельта 4099), повторно использованный 5413 (дельта 3770)

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

Прием объектов: 100% (5746/5746), 3,78 МиБ | 853 КиБ / с, готово.

Это просто счетчик прогресса при передаче по проводам. Финальные 38.50 — это число
переданных Кибибайт (аналог Килобайт).

Разрешение дельт: 100% (4099/4099), дополнено 98 локальными объектами.

Просто получающий конец, подтверждающий упомянутые выше дельты.

Из git: //github.com/gitblit/gitblit
* [новая ветка] bootstrap -> origin / bootstrap
* [новая ветка] gh-pages -> origin / gh-pages
* [новая ветка] проблемы -> происхождение / проблемы
* [новая ветка] ldap -> origin / ldap
8f73a7c..67d4f89 master -> origin / master
* [новая ветка] rpc -> origin / rpc


Это сводка изменений в
удаленных ветках . Большинство из них являются новыми, но вы уже отслеживали мастер ветки
, поэтому в нем говорится, с какой версии он был обновлен и до какой он был обновлен (от
… до ).
Из git: //github.com/gitblit/gitblit * [новый тег] v0.9.1 -> v0.9.1 * [новый тег] v0.9.2 -> v0.9.2 * [новый тег] v0.9.3 -> v0. 9,3






Достаточно просто, это новые теги, которые были созданы.
Константин Хомоутов добавляет: Стоит упомянуть, что по умолчанию загружаются 
только теги, прикрепленные к объектам, на которые ссылаются (прямо или косвенно) извлекаемые заголовки (вначале `git pull` вызывает` git fetch`). 



Чтобы получить все теги с удаленного компьютера, можно использовать `git fetch —tags …`

Обновление 8f73a7c..67d4f89

Это ваша текущая активная ветка (master), обновляемая с изменениями, которые мы видели ранее. Поскольку вы извлекаете, а не просто извлекаете, изменения из удаленной ветви объединяются с вашей локальной веткой (поскольку ваша локальная ветка ‘
master ‘ настроена на отслеживание удаленной ветки ‘
origin / master ‘).

Перемотка вперед

Это означает, что ваше местное отделение не отличается от
источника / мастера . Другими словами: вы не сделали никаких локальных коммитов. Следовательно, слияние можно быстро пересылать, воспроизводя изменения в вашей локальной ветке без фиксации слияния.

Note: This is an important line! If your pull was not a fast-forward, it means a merge commit has been created for you. If this is not intentional, you should consider undoing the merge (
git reset —hard HEAD~1), and then doing
git pull —rebase instead.

 .classpath                                         |  137 +-

 .gitignore                                         |   43 +-

 NOTICE                                             |   56 +

 build.xml                                          |  484 ++-

 distrib/add-indexed-branch.cmd                     |   20 +


These are the changes in «stat» form (lines added minus lines removed — same as doing
git diff —stat 8f73a7c..67d4f89).

 docs/fed_aggregation.png        |  Bin 0 -> 21532 bytes

Change in a binary file, cannot be expressed as line changes, so the change in size is printed instead

 374 files changed, 43257 insertions(+), 3508 deletions(-)

A summary of the changes that were made in your local branch.

 create mode 100644 distrib/add-indexed-branch.cmd

 create mode 100644 distrib/federation.properties

[..clipped..]

This is a notice on which of the changes files are actually new files.

If you can elaborate any more on any of these, please do so in a comment, and I’ll extend the post.