Git ödeme yapmadan çekilsin mi?


133

Git çekme ve diğer komutları üzerinde çalıştığım bir daldan çalıştırmaya alışkınım. Ancak birkaç kişinin üzerinde çalıştığı bir geliştirme sunucusu kurdum, bu yüzden bunu yaptığımda şubeleri değiştirmek zorunda kalmak istemiyorum. Dev sunucusundaki mevcut bir şubeyi hepimizin kullandığı github deposundan güncellemek istersem, bunu yapmanın doğru yolu nedir? 'Git pull github branchname' komutunu çalıştırırsam, bu sadece dalı geçerli dala çeker mi?

Bulabildiğim tüm git örnekleri, önce 'checkout branchname' komutunu çalıştırdığınızı, ardından pull'u yaptığınızı gösteriyor. Bundan kaçınmaya çalışıyorum. Dediğim gibi bu mevcut bir dal ve ben sadece en son sürüme güncellemek istiyorum.


6
git fetchne istersen yapmalısın.
Brad

12
git fetchuzak dalın yerel kopyasını günceller, ancak herhangi bir yerel şubeyi, o belirli uzak dalı izlemek için ayarlanmış olsa bile günceller. İstenen olabilir de olmayabilir de. (Düzenleme: varsayılan olarak, her neyse. Farklı davranmasını sağlamak için argümanlarla çağırmak mümkündür, ancak bu durumda argümanlar gerçekten belirtilmelidir.)

2
Tam olarak anlamıyorum ... dev sunucusunda herkes aynı yerel depoyu kullanıyor mu? Bu yüzden mi şubeleri değiştirmek istemiyorsun? Neden herkes çalışabileceği kendi özel klonunu yapmasın? Ayrıca bkz. Git: kontrol etmeden yerel bir şubeyi güncelleme? .

Yanıtlar:


222

Aynı şeyi arıyordum ve sonunda başka bir stackoverflow gönderisinde benim için işe yarayan cevabı buldum: Checkout kullanmadan Git dallarını birleştirme, güncelleme ve çekme

Temelde:

git fetch <remote> <srcBranch>:<destBranch>


Kaynak dalı belirtmek yerine yukarı yönlü dalı kullanmanın bir yolu var mı?
2019

Ne yazık ki, ama pullbu parametrelere sahiptir fetch: yok -s <strategy>, -Xsubtree=...bu bir eşdeğer yedek değildir, bu yüzden benim için önemliydi. Burada açıklanan sorunu yaşadım: congruityservice.com/blog/… ama benim durumumda bir ödeme almak istemedim.
Andry

2
Sorunun çekme ile ilgili olduğu düşünüldüğünde, cevabın onun yerine olması gerektiği anlaşılıyor git pull <remote> <srcBranch>:<destBranch>.
J Woodchuck

İşlemler zaten yerel deponuzdaysa:git fetch . origin/master:master
Evan

74

Mevcut özellik değişikliklerini kaydetme veya saklama zorunluluğuyla aynı sorunu yaşadım, ana dalı kontrol et, do pullkomutu uzaktan yerel masterçalışma alanına her şeyi al , sonra tekrar bir özellik şubesine geç ve rebasebunu güncel hale getirmek için bir gerçekleştir usta.

Tüm bunları yapmak için çalışma alanını özellik dalında tutun ve tüm geçişlerden kaçının, şunu yapıyorum:

git fetch origin master:master

git rebase master

Ve hile güzel bir şekilde yapıyor.


19
Bu iyi bir tavsiye ancak lede'yi gömüyor: aşağıdaki cevaplara göre, eğer açıksanız featureve tek yapmak istediğiniz yerel bilginizi mastermenşe ile uyumlu olacak şekilde güncellemektir , dokunmadan feature, sadece yapın git fetch origin master:master... ve sanki yapmışsınız gibi saklamak-checkoutMaster-pull-checkoutFeature-stashPop!
btown

7
Kaynak ana kopyayı yerel şubenizle birleştirmek için yerel ana kopyayı çekmeniz gerekmez. Kullanabilirsiniz git merge origin/master
Dan,

-1

İsterseniz yerel şube ipuçları yeniden işaret sonra almak için git fetch, bazı ek adımlar gerekir.

Daha somut olarak, github repo dalları vardır herhalde D, B, Cve master(bu garip dal-name-seti için nedeni anda açığa olacaktır). Ev sahibindesiniz devhostve origingithub deposunun olduğu bir depodasınız. Yapacak git fetchher yerinde nesneleri ve güncellemeler getiriyor, origin/D, origin/B, origin/C, ve origin/master. Çok uzak çok iyi. Ama şimdi bir şey üzerinde, ne istediğimizi varsayalım devhostiçin, yerel şubeleri D, B, C, ve / veya master?

Şu apaçık (bana göre) sorularım var:

  1. Neden tüm şubelerin ipuçlarının güncellenmesini istiyorsunuz ?
  2. Ya bazı dallar (örneğin B), uzaktaki (github) deposunda eksik olan taahhütlere sahipse? Birleştirilmeli mi, yeniden düzenlenmeli mi yoksa ...?
  3. Ya bir daldaysanız (örneğin C) ve çalışma dizini ve / veya dizin değiştirilirse ancak taahhüt edilmezse ?
  4. Ya uzak depoya yeni dallar eklendi ( A) ve / veya dallar silinirse ( D) ne olur?

(1) 'in cevabı "çünkü devhostaslında geliştirme için değil, daha çok github deposunun yerel olarak mevcut bir kopyasını tutan yerel bir aynaysa, böylece gerçek geliştiricilerimiz yavaşça okumak yerine ondan hızlıca okuyabilir. github "varsa," normal "bir depo yerine bir" ayna "istersiniz. Bir çalışma dizini olmamalıdır ve belki de itmeleri kabul etmemelidir, bu durumda geri kalan sorular ortadan kalkar.

Başka bir cevap varsa, (2-4) sorunlu hale gelir.

Her durumda, yerel referansları uzak referanslara göre güncellemenin bir yolunu burada bulabilirsiniz ( git fetch -pörneğin çalıştırdıktan sonra ):

for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
    local=${ref#refs/remotes/origin/}
    ... code here ...
done

... code here ...Bölümde neler yer alacağı , soruların cevaplarına bağlıdır (2-4).


-5

kullanım

git fetch

yerine. Deponuzdaki uzak referansları ve nesneleri günceller, ancak yerel dalları, HEAD'i ve çalışma ağacını tek başına bırakır.


17
Ancak bu, geliştirme sunucusunun yerel şubelerini güncellemez ... yalnızca o git klasöründeki, sorucunun github deposuna karşılık gelen "kaynak" dallarını yeniler.
ANeves

1
Ya da, sorunun benim versiyonunu istiyorsanız: Çalışma dalımı "ssh kökeni / ana birimi: // bla bla bla" ile değil, "ana" ile birleştirmek istiyorum. Getirme yapmak, kaynağı / ana bilgisayarı güncelleyecektir, ancak ana öğeyi güncellemeyecektir.
2017,

-6

DÜZENLEME: 'git pull' kullanın Depodan tüm dalları alır ve ayrıca şube yerel sistemden yalnızca mevcut şube için çıkarsa en son güncellenir. Not: git çekme, tüm dalları getiren ancak yalnızca geçerli dalı birleştiren fetch + merge ile eşdeğerdir.


6
Söylemesi daha iyi: pullbir getirme yapar (bu, evet, her şeyi uzaktan kumandadan alır), ancak daha sonra yalnızca geçerli dalı birleştirir .
torek

Olumsuz oyumla alınma niyetinde değilim, söylediklerinizin doğru ve gerçeklere dayalı olduğunu biliyorum ve OP gerçekten de çekişin ne yaptığı konusunda onay istedi (ve siz ona bu açıklamayı verdiniz), ancak bu, Peşinde olduğu şeyin püf noktası: Yerel şubelerinizden birini, önce şubeyi kontrol etmek zorunda kalmadan ilişkili uzak şubesindeki en son taahhütlere güncellemenin bir yolu var mı?
Gürce
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.