Merkezi olmayan iş akışı için git'te "basit" ve "geçerli" push.default


122

İşlevsel olarak konuşursak, bir merkezi olmayan iş akışı içinde, ben arasındaki farkı göremiyorum simpleve currentseçenekler push.defaultyapılandırma ayarı.

currentgeçerli dalı belirtilen uzaktaki aynı adlandırılmış bir dala itecektir. simplegeçerli dal için hem izlenen hem de izlenmeyen uzaktan kumanda için aynı şeyi etkin bir şekilde yapacaktır (her iki durumda da aynı şube adlarını uygular).

Merkezi olmayan iş akışları için özlediğim ikisi arasındaki önemli farklılıkları birisi açıklayabilir mi?



2
@Trevor - sorumla hiç alakası yok.
void.pointer

Yanıtlar:


185

Fark ile yani simple, git pushşimdiki şube uzak memba dalı (aynı adı taşıyan bir kolu uzaktan varsa bile) izleme değilse (a refspec geçmeden) başarısız olur:

$ 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

Öte yandan, currentmevcut şubenin bir yukarı akışı takip edip etmediği umurunda değil, sadece aynı adı taşıyan herhangi bir şubeye itmek istiyor:

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

Dökümantasyon

Gönderen Git yapılandırma belgelerinde :

  • upstream - mevcut şubeyi yukarı yöndeki şubesine itin ...

  • simple - yukarı akış gibi, ancak yukarı akış şubesinin adı yerel olandan farklıysa itmeyi reddediyor ...

  • current - geçerli şubeyi aynı adlı bir dala itin.


4
Sanırım tek "bonus" soru "neden" dir. Bir yukarı akış izleme dalını zorlamak hataları ortadan kaldırır (yanlışlıkla o dalın yanlış uzaktan kumandanın üzerine yazılması).
void.pointer

7
Basit, daha güvenli "emniyet kemeri" seçeneği gibi görünüyor.
Jonathan

2
Uzun bir süre sonra kendi sorumu tekrar gözden geçirmek :-) currentHangi kumandayı seçeceğimi nasıl bildim? İzleme şubeniz yoksa, nereye itiyor?
void.pointer

2
Varsayılan uzaktan kumandaya -> iter, bu orijin anlamına gelir. Man git-push'tan: Komut satırı, <repository> bağımsız değişkeni ile nereye itileceğini belirtmediğinde, dallanma. Yapılandırma eksikse, varsayılan olarak orijin alır.
reegnz

2
Yıllarca her zaman "güncel" i kesinlikle hiçbir sorun olmadan kullandım. Çoğu durumda işe yarar: tek bir depoya çekmek / itmek, yeni şubeler yapmak veya isim çatışmalarının olası olmadığı durumlarda mevcut şubeleri kontrol etmek. Sadece çalışıyor, sorun yok. Varsayılan olması gerektiğini söyleyemem (güvenli olmadığı için) ama şükürler olsun ki var.
trisweb

10

Aradaki fark, simpleaynı ada sahipse currentizleme dalına itilirken, herhangi bir izleme dalından bağımsız olarak aynı adda bir dala ittirmesidir:

$ 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` 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.