Лучше всего пояснить на примере: я нахожусь в ветке репозитория 0.58, и вот как я тяну:
git pull origin 0.58
Когда я просто вызываю "git pull", я получаю:
ip238:openlierox az$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.0.58.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.0.58.remote = <nickname>
branch.0.58.merge = <remote-ref>
remote.<nickname>.url = <url>
remote.<nickname>.fetch = <refspec>
See git-config(1) for details.
Кажется, я, вероятно, забыл какую-то опцию (--track?), Когда проверял эту ветку. Во всяком случае, я установил это сейчас:
git config branch.0.58.merge 0.58
git config branch.0.58.remote origin
И это, кажется, работает. Затем, просто из интереса, я взглянул на другую ветку об этих настройках:
ip238:openlierox az$ git config branch.0.57.merge
refs/heads/0.57
ip238:openlierox az$ git config branch.0.57.remote
origin
Мне вот интересно, есть ли разница между «0,58» или мне следует указать «refs / Heads / 0,58»?
В чем именно разница?
heads
с «S».Ответы:
A
ref
- это все, что указывает на фиксацию, например ветки (заголовки), теги и удаленные ветки. Вы должны увидеть заголовки, пульты и теги в своем.git/refs
каталоге, если у вас есть все три типа ссылок в вашем репозитории.refs/heads/0.58
указывает ветку с именем 0.58. Если вы не укажете, в каком пространстве имен находится ссылка, git будет искать в пространстве по умолчанию. Это делает использование только 0,58 предположительно неоднозначным - у вас может быть и ветвь, и тег с именем 0,58.источник
refs/heads/
иrefs/remotes/
иrefs/tags/
Просто для тех, кому интересно -
git show-ref
, который доступен начиная с Git v1.8.2.2, покажет вам все ссылки, которые есть в вашем локальном репозитории.источник
git log --decorate=full
будут показаны полные имена упоминаний в историиВидите ли,
branchName
необходимо полностью решить, прежде чем GIT сможет его идентифицировать. Полностью разрешенное имя будетrefs/heads/branchName
.Одна из известных команд
git checkout branchName
фактически автоматически полностью разрешает его, чтобы определить, где вы хотите оформить заказ. Обратите внимание, что он делает это автоматически, поэтому мы никогда не пишем его полностью самостоятельно.Как оно это делает ? Давайте посмотрим здесь
Таким образом, с помощью вышеуказанных 6 шагов он пытается решить, что это такое
branchName
. Следовательно, нам никогда не нужно давать ему полностью разрешенное имя ветки.Смотри сюда и сюда тоже.
Также зайдите в свой
.git
каталог и загляните вref
папку.источник