git: отправка с удаленной ссылкой в ​​refspecs - PullRequest
1 голос
/ 13 февраля 2012

Может кто-нибудь объяснить мне (или привести меня к хорошей ссылке) следующую проблему?

Я знаю, что ниже приведена правильная команда push, которую я должен использовать:

git push origin refs/heads/master:refs/heads/master

   (I also know that it has short forms, like:
        git push origin master:master
        or
        git push origin master)

Однако однажды я сделал 2 следующих толчка (по ошибке):

  (1) git push origin refs/heads/master:refs/remotes/heads/master

  (2) git push origin refs/heads/master:refs/remotes/origin/master

git сообщает об ошибке в обеих командах, хотя в (1) у меня нет удаленного имени "глав ".

  • Мой первый вопрос: что git отправляет в удаленный репозиторий в этих случаях? Вредят ли они моему удаленному хранилищу?

  • Второй вопрос: в соответствии с http://progit.org/book/ch9-3.html все, что в разделе "refs / remotes", является удаленными ссылками которые должны знать идентификатор последнего коммита в соответствующем удаленном филиале при последней передаче сервера. Это только для этого (например, только для информации), использует ли какая-либо команда git эти ссылки?

Обновление с моими выводами о команде (2)

Я снова тщательно проверил поведение команды (2):

  • резервное копирование удаленного хранилища
  • сделать (2)
  • сравнить два репозитория (текущий и резервный)

Я нашел различия в текущем (тот, который выполняется командой (2))

  • в папке «objects» создано 2 новых файла: один - файл .pack, а другой - файл .idx
  • в папке "refs", новый refs создал "remotes / originins / master"

Я заметил, что вывод команды (2) был

Counting objects: 842, done.
Compressing objects: 100% (337/337), done.
Writing objects: 100% (651/651), 336.30 KiB, done.
Total 651 (delta 243), reused 612 (delta 218)
To file:///data/resto/central-repo
 * [new branch]      master -> origin/master

Теперь я сделал еще один тест:

  • Клонирование удаленного репо в 2 локальных репо
  • В одном локальном репо я внес изменения в файл, commit, push (мастер git push origin)
  • В другом локальном репо

    • Я внес изменения в файл, зафиксировал
    • Нажмите с git push origin master: master

      Я получил сообщение об ошибке от git: "...! [rejected] master -> master (non-fast-forward)..." То, что я ожидаю

    • Затем я выполнил команду (2), и в результате получилось то, что я упомянул выше.

Так что очевидно (2) отличается от git push origin master.

Что означает папка "refs" in the remote хранилище? Команда (2) создает новые "ссылки" в удаленное хранилище, к чему оно относится?

1 Ответ

1 голос
/ 15 февраля 2012
  1. (2) толчок действительно похож на git push origin master.Не уверен насчет (1), хотя.

  2. Как объяснено в " Существуют ли различные значения для концепции 'tracking' в git? ", пространство имен refs/remotes если для отслеживания ветвей: т.е. представляет«состояние ветви в удаленном хранилище в последний раз, когда ветка удаленного отслеживания была обновлена».
    Эти ссылки используются git fetch для того, чтобы узнать, что фиксирует выборка (по сравнению с тем, что у вас уже есть в вашемrepo)
    См. сообщение в блоге " git: получить и объединить, не тяните ", написанное участником SO Марк Лонгэйр для получения дополнительной информации.

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