"simple" vs "current" push.default в git для децентрализованного рабочего процесса

Функционально говоря, в децентрализованном рабочем процессе я не вижу разницы между параметрами simple и current для настройки push.default.

current будет вытолкнуть текущую ветку на ветку с одинаковым именем на указанном пульте. simple будет эффективно выполнять то же самое как для отслеживаемых, так и для любых невосстановленных пультов для текущей ветки (в обоих случаях они выполняют одинаковые имена ветвей).

Может кто-нибудь объяснить какие-либо важные различия между этими двумя для децентрализованных рабочих процессов, которые мне не хватает?

Ответ 1

Различие заключается в том, что при simple, git push (без передачи refspec) произойдет сбой, если текущая ветка не отслеживает удаленную ветвь вверх по течению (даже если ветвь с тем же именем существует на удаленном компьютере):

$ git checkout -b foo
Switched to a new branch 'foo'

$ git config push.default simple
$ git push
fatal: The current branch foo has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin foo

С другой стороны, current не заботится о том, отслеживает ли текущая ветка восходящий поток, просто хочет нажать на любую ветку с таким же именем:

$ git config push.default current
$ git push
Total 0 (delta 0), reused 0 (delta 0)
To /Documents/GitHub/bare
 * [new branch]      foo-> foo

Документация

В документации Git:

  • upstream - нажмите текущую ветвь на свою ветвь вверх по течению...

  • simple - как вверх по течению, но отказывается выдвигать, если имя ветки восходящего потока отличается от локального...

  • current - нажмите текущую ветвь на ветвь с тем же именем.

Ответ 2

Разница в том, что simple подталкивает ее ветку отслеживания, если она имеет то же имя, а current будет нажимать на ветвь с тем же именем независимо от какой-либо ветки отслеживания:

$ git branch -vvv
  master 58d9fdc [origin/master: ahead 1] t1 bobo
* new    37132d3 [origin/save: ahead 1] t1 bibi   # <- tracking branch 'save'

$ git -c push.default=current push                # <- set `push.default=current`
Counting objects: 3, done.
Writing objects: 100% (3/3), 234 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /home/jthill/sandbox/20/t1
 * [new branch]      new -> new                   # <- and push creates `new`