Geçiş yapmadan başka bir Git şubesi için çekin


55

Yakın zamanda SVN'den Git'e geçtik ve aynı zamanda canlı sistemlerimizi sürüm kontrolü altına aldık (yerel ödeme ve canlı dosya kopyası yerine).

Projede hepimiz aynı depoya erişiyoruz ve değişiklikleri hayata geçirmek için tam git pulloradayız. Bu, web tasarımcılarımızın VCS'de henüz canlı olmaması gereken ancak web test ortamında olması gereken değişiklikleri zorlaması nedeniyle sorun yaratır.

Geliştiricilerden biri şimdi hayata geçtiğinde, tüm (muhtemelen bitmemiş) değişiklikleri alır.

Hayata geçmeyi fazladan bir şubeye çevirmeyi düşündüm ve sadece neyin değiştiğini birleştirdim, ama gitme bilgim olmadığı için nasıl bir fikrim yok.

Benim fikrim:

  • Canlıda yeni bir Şube oluşturun ( git branch live).
  • Her zaman bir şey canlı olmak zorunda
    • Master Çekme değişiklik (örn: git checkout master; git pull; git checkout live)
    • git merge master

Sorun şu ki, ana sisteme geçmek ya da her şeyi doğrudan canlı sisteme çekmek sorunlara yol açıyor, bu yüzden bundan kaçınmayı tercih ederim.

Bunu yapmanın bir yolu var mı ya da Canlı sistemi yönetmenin daha iyi bir yolu var mı (web siteleri bitmemiş şeyleri zorlamamaları konusunda eğitmek hariç).


git pull --allVarsayılan olarak edecektir değil canlı haline usta çekin, bu usta çekin ve usta ile birleştirme ve canlı çekme (sunucuda varolan varsa) canlı birleşmeye olacaktır. Onu denedin mi?
Tobias Kienzler

Sorununuz, dallanmadan önce sürüm kontrolü altında olmayan bir dosyadan kaynaklanıyor mu? Daha önce başıma gelenlerdi, genellikle bu dosyayı geçici olarak yeniden adlandırmak yeterliydi, ya da canlı olarak gerekmiyorsa git checkout -f, sorunu görmezden gelmek için kullan - ama bir yedekleme yap!
Tobias Kienzler

Yanıtlar:


21

Sen kullanabilirsiniz git stashusta kontrol ve çekerek önce ve canlı tekrar kullanımını kontrol ettikten sonra git stash pop(sizin git eskidir, eğer yoksa git stash applyve git stash clearbaşka varsayarsak saklanmış değil bir şey)


6
git pull --alltüm uzaktan kumandaları getirecek, ancak yine de bir şubeyi (veya varsayılan şubeyi) geçerli şubeyle birleştirmeyi deneyecek.
mipadi,

@mipadi evet, ancak ustayı kontrol etmeye çalışmadan ve çatışmaya neden olmadan, yalnızca o anki şubeyi kendi içine sokun, değil mi?
Tobias Kienzler

Hangi dalın otomatik olarak o andaki dalla birleştirilmesi için yapılandırılmışsa birleştirilir (eğer böyle bir dal yapılandırılmışsa).
mipadi,

1
@Superole Yalnızca tüm depoları değil aynı zamanda dalları da içeren "tüm uzaktan kumandaları al" olarak belgelenmiştir. git fetch --all
Rüzgârda

2
@ TobiasKienzler Git'e sadece yapılandırılmış tüm uzaktan kumandalardan alma talimatı verir. En yaygın durum, kökeni adlı tek bir uzaktan kumandaya sahip olmaktır. Şu anki durumunuzla aynı dalda birden fazla uzaktan kumandaya sahipseniz ve bunlar birbirleriyle hızlı bir ilişki içinde değillerse, --allseçeneği kullanmanız size dalın farklı versiyonlarının ahtapotla birleşimini geçerli hale getirecektir. ! Bu yüzden benim tavsiyem --allpeşinde olduğun şey olmadığı sürece uzak durmak , çünkü çoğu durumda sana hiçbir şey vermeyecek.
Superole

74

Ben değişiklikleri almasına başardı origin/masteriçine masterbu komutu kullanarak başka branşında çalışırken:

git fetch origin master:master

6
Müthiş! Tam olarak aradığım şey - bunun çok daha belirgin bir şekilde belgelenmesi gerekiyor ...
Markus Shepherd


fetch! =pull
D. Kovács

5

Önce sorunu çöz. Yapacakları işi olmayan bir şubeye gitmemeliler.

Ne soruyorsun gibi bir şey olurdu

git checkout live
git pull origin master

Bu, uzak ana ve canlı şubenizi birleştirmeye çalışır.


Sorun şu an sadece bir şubemiz var ve herkes SVN'ye çok alıştığından ve yeni bir şeyin avantajlarını öğrenmeye istekli olmadığından bunu değiştirmek gerçekten mümkün olmayacak. Yalnızca canlı dizinde yeni bir dal oluşturmak mümkün olacaktır. Remote master'i canlı şubeyle birleştirmek, hiç kimsenin hata ayıklama kodunu, tamamlanmamış işlevleri, sözdizimi hatalarını ve master'a başka bir şeyi itmesini engelleyemediğimden kaçınmak istediğim şey. Yine de öneriniz için teşekkürler.
Morfildur

2
@dbeme: Tarball'ları ve yamaları kullanabilirsiniz. ;) Git öğrenmeye istekli olmadıkça (ve dallanması ve birleşmesi zor değildir) sorun yaşarsınız.
Josh K,

0

Herkesin taahhüt etmesi için bir test git repo oluşturmanızı tavsiye ederim. Canlı web siteniz dahil tüm repolar test deposunun klonları olacaktır. Bu şekilde, herkes canlı web sitesine dokunmadan teste geçebilir. Birisinin canlı siteyi güncellemesi gerektiğinde, canlı siteyi git test deposundan çekebilirsiniz. Bu iş akışı SVN'ye oldukça benzer. Daha fazla esneklik için tanımladığınız "canlı" şubeyi kullanmanızı öneririm.

Özetlemek gerekirse, herkesin git repo testi repo klonudur. Canlı üretim alanı, test deposunun sadece bir kopyasıdır. Alternatif olarak, testler bir "git itme" nin her zaman üretime doğru hareket etmesi için bir canlı prodüksiyon klonu olabilir.

Bu düzenlemeye "canlı" dalın eklenmesi veya test ile üretim arasındaki "aşama" reposunun dahil olduğu diğer seçenekler. Ekstra güvenlik için, canlı git deposuna erişimi kısıtlamanızı ve insanları canlı üretime çekecek güvenli bir komut dosyası kullanmaya zorlamanızı öneririm.

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.