Soru Git - push.default “matching” ile “simple” arasındaki fark nedir?


Bir süredir git kullanıyorum, ama kendime yeni bir uzaktan repo kurmam gerekmedim ve bunu yapmayı merak ettim. Öğreticiler okuyordum ve işe gitmek için "git push" i nasıl alacağımı karıştırıyorum.

Sadece kullanırsam git push işaret etmek için varsayılan bir şube (?) görmemi ister? Bana sağladığı bu iki seçenek arasındaki fark nedir?

git config --global push.default matching
git config --global push.default simple

Eşleşmek, yerel repo'mda ne tür şubeler varsa onu iter ve eğer eşleşmezlerse, elimden geldiğince yeni yerel şubeleri itmek için elimden gelmeliyim, doğru mu? Kullanmak için en iyi yöntem mi, yoksa en iyisi mi?


208
2018-02-17 21:30


Menşei


olası kopyası Uyarı: push.default unset; Git 2.0'da örtük değeri değişiyor - Trevor Boyd Smith
Şimdi, eğer sadece pull.default tüm bu şubeleri yerel olarak güncellemek için kullanılabilir - Nogurenn


Cevaplar:


git push Bu yapılandırmaya bağlı olarak tüm dalları veya tek bir düğmeye basabilirsiniz:

Tüm şubelere bas

git config --global push.default matching

Tüm şubeleri uzak şubeye iter ve onları birleştirir. Tüm şubeleri zorlamak istemiyorsanız, sadece mevcut şubeye basabilirsiniz.

Sadece mevcut şubeye bas

git config --global push.default simple

Yani, bence, bu seçeneği kullanmak ve kod dalınızı şubeye doğru itmek daha iyidir. Dalları elle ve tek tek itmek daha iyidir.

Daha fazla okumak için lütfen buna gidin Blog yazısı


255
2018-02-18 21:06



Beğendim push.default current @UpAndAdam cevaptan. Bunu bilmiyordu. - alanjds
FYI: UpAndAdam'dan en iyi cevap feryat, git kılavuzu. - Dr Beco
Bunu not et simple artık bir seçenek değil. İçinde 1.7.8.4 (ve daha erken?) itmeye çalıştığınızda bir hatayla sonuçlanır. fakat current hala müsait - sixty4bit
@ sixty4bit: Git sürüm 1.7.1 kullanıyorum. Ben kullanıyorum tracking -> mevcut dalı yukarı akış bölgesine yönlendirir. - kevinarpe
@ sixty4bit Hayır, daha sonraki bir Git Sürümüne dahil oldu bilmiyorum ama (1.7) 2016 için bile cehennem kadar eskidir. Bu tür eski sürümleri hiç kullanmamayı tavsiye etmem. - Schmoudi


GIT belgelerinden: Git Dokümanlar

Aşağıda tam bilgi verir. Kısacası, simple sadece itecek current working branch ve hatta o zaman uzaktan kumandada da aynı adı varsa. Bu yeni başlayanlar için çok iyi bir ayardır ve GIT 2.0

Buna karşılık matching itecek herşey uzaktan kumandada aynı ada sahip yerel şubeler. (Mevcut çalışma şubenize bakılmaksızın). Bu, potansiyel olarak, paylaşmak istemeyebileceğiniz de dahil olmak üzere pek çok farklı dalın itileceği anlamına gelir.

Kişisel kullanımımda genellikle farklı bir seçenek kullanırım: current Şu anki çalışma dalını iter (çünkü her zaman değişikliklere katılıyorum). Ama yeni başlayanlar için tavsiye ederim simple

push.default
  Refspec yoksa, gitmesi gereken aksiyonu tanımlar.   açıkça verilmiş. Farklı değerler özel olarak uygun   iş akışları; örneğin tamamen merkezi bir iş akışında (ör. getirme   kaynak, itme hedefine eşittir), yukarı yönde muhtemelen ne   İstediğiniz. Olası değerler:

Hiçbir şey - bir refspec olmadığı sürece hiçbir şeyi itmeyin (hata)   açıkça verilmiş. Bu öncelikle kaçınmak isteyen insanlar içindir   her zaman açık olmaktan kaynaklanan hatalar.

Geçerli - aynı şubeyi güncellemek için mevcut şubeye bas   Alıcı ucunda isim. Hem merkezde hem de merkezde çalışır   iş akışları.

upstream - mevcut şubeyi değişiklikleri olan şubeye geri itin   genellikle mevcut şubeye entegre edilir.   @ {Yukarı}). Bu mod eğer sadece   normalde (yani merkezi iş akışı) çekeceğiniz aynı depo.

basit - merkezileşmiş iş akışında, eklenen bir akışla birlikte çalışır   Yukarı akış dalı adı farklı ise itmeyi reddetme güvenliği   yerel olandan.

Uzaktan kumandayı uzaktan kumandanızdan farklı olduğunda   normalde çekin, akım olarak çalışır. Bu en güvenli seçenek ve   yeni başlayanlar için uygun.

Bu mod Git 2.0'da varsayılan haline gelecektir.

Eşleştirme - her iki ucunda aynı ada sahip tüm dalları itin. Bu   Şube setini hatırlamak için bastırdığınız depoyu yapar   dışarı itilecek (örneğin, her zaman maint ve master'ı zorlarsanız   Orada ve başka şubeler yok.   Bu iki şube ve yerel maint ve ustanız itilecek   Orada).

Bu modu etkili bir şekilde kullanmak için tüm şubelerin   git itmeyi çalıştırmadan önce dışarı itilmeye hazır olursunuz,   Bu modun bütün noktası olarak, tüm   tek seferde dallar. Genelde sadece bir dalda çalışmayı bitirirseniz ve   Diğer dalları bitmemiş iken sonucu itmek, bu mod   senin için değil. Ayrıca bu mod, paylaşıma zorlamak için uygun değildir.   Merkez deposu, diğer insanlar orada yeni şubeler ekleyebilir, ya da   Mevcut şubelerinizin kontrolünü kontrol et.

Bu şu anda varsayılan, ancak Git 2.0 varsayılanı   basit.


84
2018-02-18 22:26



evet, ama eğer push.default ayarıyla bile "$ git push" yaparsanız kökeni ustası", sadece geçerli şube aynı ada sahip kökene kökeni itecektir ... değil mi? Ayrıca varsayılan bir uzak olduğunu da belirtmelisiniz - Alexander Mills
Ne yaptığınızı anladığımdan emin değilim. HERHANGİ BİR MODDA diyorsan git push origin master aynı şeyi yapacak. Modların ve varsayılanların noktası genellikle basitçe söylediğinizde ne olur? git push ve ona bir uzak ya da dal demezsin. Hangi varsayılan ayar? push.default varsayılan ayarını mı kastediyorsunuz? Git sürümündeki varsayılan ayar ... eğer yorum yapmazsanız, yorumunuz çok belirsizdir. - UpAndAdam
'push.default git recover' açıkça belirtilirse gitmesi gereken eylemi tanımlar. git diyerek git asıl ustasını yönlendirirseniz daha fazla bilgi veriyorsunuz ve yine de tanımladığınız şeyi yapmayabilirsiniz; kurduğunuz refspec'e bağlı olarak .. git-scm.com/book/en/v2/Git-Internals-The-Refspec - UpAndAdam


Git v2.0 Sürüm Notları

Geriye dönük uyumluluk notları

Ne zaman git push [$there] ne itmek demek değil, biz Şimdiye kadar geleneksel "eşleme" semantiği (tüm şubeleriniz gönderildi) zaten aynı ismin dalları olduğu sürece uzaktan kumandaya orada). Git 2.0'da, varsayılan artık "basit" semantik, hangi iter:

  • sadece aynı şubeye sahip şubeye şu andaki şubesi ve Mevcut şube bu uzaktan kumandayla entegre olacak şekilde ayarlandığında şube, siz getirdiğinizle aynı uzaklığa itiyorsanız; veya

  • aynı adı taşıyan şubeye sadece mevcut şube, eğer genellikle nereden aldığınız bir uzaklığa itiyorsunuz.

Değiştirmek için "push.default" yapılandırma değişkenini kullanabilirsiniz bu. Kullanmaya devam etmek isteyen eski bir zamanlayıcıysanız "Eşleşen" semantik, değişken için "eşleşen" örnek. Diğer olasılıklar için belgeleri okuyun.

Ne zaman git add -u ve git add -A bir alt dizinin içinde çalıştırılır komut satırına eklenecek yolları belirtmeden ile tutarlılık için tüm ağaç üzerinde çalış git commit -a ve diğer komutlar (yalnızca bu komutta çalışmak için kullanılan komutlar) alt). Söylemek git add -u . veya git add -A . Eğer istersen İşlemi geçerli dizine sınırlar.

git add <path> aynıdır git add -A <path> şimdi, öyle ki git add dir/ dizinden kaldırdığınız yolları fark edecek ve kaldırmayı kaydedin. Git'in eski sürümlerinde, git add <path> Kullanılmış kaldırmayı yok saymak. Söyleyebilirsin git add --ignore-removal <path> için yalnızca eklenen veya değiştirilmiş yollar ekleyin <path>eğer gerçekten istiyorsan.


2
2017-12-31 22:33