Как мне прочитать сообщение, которое возвращает git fetch? - PullRequest
0 голосов
/ 30 мая 2019

Я только что сделал

get fetch origin feature/8067

и под ним я получил 3 столбца:

 * branch                feature/8067 -> FETCH_HEAD
 * [new branch]          feature/8067 -> origin/feature/8067

Пытаясь обработать это ... чтение из здесь Я простоузнал, что FETCH_HEAD в основном означает верхушку того места, где я в последний раз делал fetch.Файл будет содержать коммит.

Относится ли [new branch] к новой ветви, созданной в моем refs/remote?

Я не уверен, правильно ли я прочитал следующее: feature/8067 -> origin/feature/8067

Является ли 2-й столбец <nameOfBranchOnRemoteRepo>, а 3-й столбец - <repoName/nameOfBranchOnRemoteRepo>, и там написано, что я извлеченудаленная ветка в ссылках указывает на то, что в удаленной?

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Вывод извлечения сбивает с толку даже старой руке.Вот как я их декодирую:

 * branch                feature/8067 -> FETCH_HEAD
 * [new branch]          feature/8067 -> origin/feature/8067

Работа с каждой строкой справа налево:

  • Первая строка заканчивается FETCH_HEAD,Это означает, что ссылка была депонирована в FETCH_HEAD.См. Примечание о FETCH_HEAD ниже.Стрелка жестко закодирована (всегда появляется, и вы можете просто ее игнорировать);имя feature/8067 - это имя ссылки на пульте дистанционного управления;и * branch говорит вам, что на самом деле это был refs/heads/feature/8067 на удаленном компьютере, т. е. был филиалом.Поскольку это было внесено в FETCH_HEAD, дополнительная информация недоступна.

  • Вторая строка заканчивается origin/feature/8067.Ваше имя для удаленного отслеживания 1 origin/feature/8067 (полное имя refs/remotes/origin/feature/8067) создано или обновлено.Как и раньше, у нас есть стрелка и то же имя.Тогда у нас есть * [new branch]: это говорит нам о том, что origin/feature/8067 раньше не существовало, и что feature/8067 было - как мы уже знаем - именем ветви на пульте.

Вот что я получаю, обновляя Git-репозиторий для Git:

   ab15ad1a3b..aa25c82427  master      -> origin/master
   ef7435264c..5a294203ad  next        -> origin/next
 + f98c0007ae...e49ac33073 pu          -> origin/pu  (forced update)
   0f4b6a451a..ff8db353a4  todo        -> origin/todo
 * [new tag]               v2.22.0-rc1 -> v2.22.0-rc1

И снова мы можем работать справа налево:

  • My origin/masterбыл создан или обновлен с их master.Значение моего origin/master было ab15ad1a3b, но теперь aa25c82427.Поскольку было значение, оно было обновлено, а не создано.

  • Мой origin/next был создан или обновлен, а все остальное в основном такое же, как указано выше (по модулю очевидные различия).

  • Мой origin/pu был обновлен принудительно, т. Е. Это не ускоренная перемотка вперед, и некоторые коммиты были удалены .Источником была их ветка pu, а моим origin/pu был f98c0007ae, но теперь он ff8db353a4.Тот факт, что между двумя идентификаторами хэша есть три точки, а в других строках - только две точки, означает, что обновление было принудительным, а следовательно, не ускоренным переходом.Знак «плюс» в самом начале означает, что обновление было принудительным.(Очевидно, что очень важно, чтобы обновление было принудительным: у меня есть три объявления на этот счет!)

  • Мой origin/todo был создан или обновлени к тому времени, как мы доберемся до левой стороны, это, очевидно, обновление.

  • Мои v2.22.0-rc1 были созданы или обновлены из их v2.22.0-rc1;это новый тег.

Каждый раз, когда у вас есть новое имя (ветвь, тег или любая другая ссылка), это по определению обычное принудительное создание, а * 1082 нет* хеш доступен, поэтому левый край будет читать * [new whatever].

FETCH_HEAD особенный: все обновления записываются в .git/FETCH_HEAD, обычно стирая все, что было в нем раньше (но с -a или --append вместо этого добавится git fetch).Каждая извлеченная ссылка приводит к тому, что одна строка появляется в FETCH_HEAD, давая:

  • идентификатор хеша
  • необязательная not-for-merge строка
  • типи название ссылки и ее источник:

    $ cat .git/FETCH_HEAD
    aa25c82427ae70aebf3b8f970f2afd54e9a2a8c6        branch 'master' of git://...
    [snipped for length]
    

Одна строка, которая не помечена not-for-merge, подходит для сценария git pull 2 чтобы выловить и передать этот хэш-идентификатор git merge или git rebase.


1 A имя для удаленного слежения ,который большая часть Git называет веткой удаленного отслеживания , является ссылкой в вашем хранилище, полное имя которой начинается с refs/remotes/ и включает в себя имя удаленного, в этомcase origin и еще один слеш, а затем обычно содержит остальную часть имени branch , как видно на этом пульте.

A reference - это просто обобщенное имя для вещей, которые являются ветвями, тегами, именами удаленного отслеживания, refs/stash и т. Д .: имя в формате строки, обычно начинающееся с refs/, которое запоминает один хеш Я БЫ. Для ветки один хэш-идентификатор, который помнит имя, - это коммит, который Git должен считать tip этой ветки. Для тега один идентификатор хеша, который запоминает имя, является либо идентификатором хеша фиксации, либо идентификатором хеша аннотированного объекта тега , который содержит дополнительную информацию (возможно, включая ключ подписи), плюс хэш Идентификатор помеченного объекта (обычно коммит, хотя любой тег может указывать на любой из внутренних типов объектов Git).

Git создает имена для удаленного отслеживания через refspec . Вы можете указать refspec при запуске git fetch. Если вы не предоставляете refspec, но предоставляете удаленное имя как origin, Git выдает правильный refspec из вашей конфигурации:

$ git config --get-all remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Стандартная конфигурация для origin всегда имеет эту точную стандартную ссылку, но есть несколько полезных нестандартных конфигураций, таких как созданная git clone --single-branch. Вы также можете сделать свои собственные совершенно причудливые refspecs, хотя в зависимости от того, как вы получите, некоторые комбинации приведут к неработоспособности git fetch.

2 Ну, во всяком случае, тогда, когда git pull был сценарием. Это было перекодировано в C для скорости на Windows.

0 голосов
/ 30 мая 2019

Первая строка сообщает вам, что выборка дала новую ветку в вашем локальном репо, и что у вас есть ГОЛОВА. Второй говорит, что новая ветка настроена для отслеживания удаленной ветки. (Вы можете иметь локальную ветвь с тем же именем, что и удаленная ветвь, но не можете отслеживать удаленную.)

Удаленная ветка не была создана там обязательно, но, возможно, была выдвинута другим разработчиком, например.

...