İtme kuvveti kollarına git yanlış mı?


11

Bir özellik dalı üzerinde çalışırken, işlerim incelenmeden ve ana şubeye entegre edilmeden önce şubedeki taahhütleri interaktif bir taban kullanarak temizlemek isteme eğilimindeyim .

Bu özelliğin geliştirilmesi sırasında, ara çalışmamı bir yedek önlem olarak uzak depoya aktarmak istiyorum. Yani sabit diskim çöktüğünde, tüm özellik dalımın kaybolmasını istemiyorum.

Bununla birlikte, bu genellikle git push --forcebir rebase'den sonra uzak depoya genellikle bir şey yapmak zorunda olduğum gerçeğine yol açar , genellikle kaşlarını çatmış bir eylem. Veya bağlantılı github sayfasının dediği gibi:

Taahhüt geçmişinizi değiştirmek, depoyu kullanan herkes için işleri zorlaştırabileceğinden, zaten bir depoya ittiğinizde taahhütleri yeniden oluşturmak kötü bir uygulama olarak kabul edilir.

Bu çatışmayı çözen (genel olarak kabul gören) bir politika var mı?

Bu neden git "Rebasing'in Altın Kuralı" nın bir kopyası değil mi?

Bir politika isteyen arasındaki çatışmayı çözmek için Sorum burada sorar uzak depoda yedekleme işinizi ve işinizi rebasing diğer soru bir çatışma ve bazı insanlar çatışma hiç varlığına inanıyor neden sorar inkar etmeye çalışır iken, ve böylece kuvvet temellerini zorlamamanın neden "gerekli" olduğunu sorar.



1
@gbjbaanb Eğer Devam Eden Çalışma taahhütleri yaparsanız, bir rebase, tek bir günlük iş için birçok işlem yapmamak için çok kullanışlıdır. Sık sık küçük değişiklikler için taahhütte bulunuyorum, bu yüzden gerekirse "hatırladığım bir duruma geri dön" seçeneğim var - bunların çoğu repo'nun ana tarihiyle alakasız / gürültü (bu yüzden rebase çok yararlı).
enderland

1
@gbjbaanb Sanırım bu bir görüş meselesi. Birçok takım, tarihlerini temiz tutmak için bir yeniden temellendirme stratejisi kullanır.
Chiel ten Brinke

1
@enderland herkes güzel bir tarih istiyor, hala bağlantıda gösterildiği gibi yapmak yanlış (ve tehlikeli) şey. Torvalds asla takmamalıydı, bunun yerine komisyonların ekranda "sıkıştırılmasına" izin vermeliydi.
gbjbaanb

1
@gbjbaanb ama ... yapmadı, ve sahip olduğumuz şeyle çalışmak zorundayız. Benim için, ana dalda her özellik dalından 30'dan fazla bireysel ve artımlı taahhüt yerine tek bir taahhüt yapmak çok daha yararlıdır. Ama herkesin farklı bir iş akışı olacak, sanırım ...
enderland

Yanıtlar:


5

Kendinize sormanız gereken kilit soru:

  • Ana dalınızı birleştirdikten sonra uzak dalınızı tutuyor musunuz?

Ana özellik ile birleştikten sonra uzak özellik dalınızı silerseniz, zaten geçmişi kaybediyorsunuzdur. Birleştirme / PR'nizi yapmadan önce şubeyi ezdiğinizi / yeniden pazarladığınızı varsayarsak, bu geçmişi kaybedersiniz. Bu durumda tüm itme gücünüz github'ı yedek olarak kullanmanıza izin veriyor.

Tarihi zorlamak değil, geçmişi tutmak isteyeceğiniz durum, uzak şubenizin birleştirildikten sonra da devam etmesi ve sadece geçici bir süre için var olmamasıdır.

Sanırım dayanaksız dalı tutup tutmayacağımı mı soruyorsun? Hayır, AFAIC. Yine de, bunu zorlamak, teorik olarak aynı şubeye iten diğer kullanıcıların taahhütlerinin kaybedilmesine neden olabilir

Bu şubeye aynı anda iten birden fazla insan olduğu anlaşılıyor. Eğer bu araçlar yapmak dalında tarihinin önemsiyorum.

Bunun yerine ara işleriniz için yapabileceğiniz şey, o dalın çatalını oluşturmaktır. Bunu zorlayabilir ve daha sonra birleştirmeden önce tüm taahhütlerinizi tek bir taahhütte yeniden temellendirebilirsiniz, böylece bunları özellik dalınıza birleştirdiğinizde yalnızca 1 taahhüdünüz olur (tüm şubenizin yeniden temelli geçmişi ile).


"Uzak dalınızı ustaya geri döndükten sonra mı tutuyorsunuz?" Sanırım dayanaksız dalı tutup tutmayacağımı mı soruyorsun? Hayır, AFAIC. Yine de, bunu zorlamak, teorik olarak aynı şubeye iten diğer kullanıcıların taahhütlerinin kaybedilmesine neden olabilir.
Chiel ten Brinke

@ChieltenBrinke Bu konuda biraz düzenleme yaptım. FYI
enderland

Bence zorlama yaparken yok etmeyi önlemenin bir ölçüsü olmanın aslında çok iyi bir öneri olduğunu düşünüyorum. Ancak AFAIK gerçekten bir git konsepti değildir ve bunu yapmak için (github gibi) bir servis sarmalayıcısına ihtiyacınız vardır. Bu konuda doğru muyum? Ya da sadece ayrı bir dal oluşturmak için "çatal" terimini kullanımınızla karıştırıyorum?
Chiel ten Brinke

@ChieltenBrinke de aynı şeyi çeşitli şekillerde gerçekleştirebilirsiniz. Özellik dalınız uzak depodaysa, depoyu çatallayabilir ve o dalın sürümüne sahip olabilirsiniz. Ve sonra ezme işleminden sonra bu dalı uzak şubenize birleştirin. Ya da sadece farklı bir yerel şube (belki featurebranch-local) oluşturabilir ve daha sonra bu dalda istediğiniz kadar taahhütte bulunarak aktif geliştirici yapabilirsiniz. Birleştirmek istediğinizde, bu taahhütleri ezin ve daha sonra bu özelliği birleştirin. Temel olarak sadece gerçek bir geçici dalda dev yapmak ve daha sonra özelliğinizde ezmek / birleştirmek.
enderland

Bir repo çatallamanın seçenek dışında olduğunu varsayarsak, biri github kullanmazsa, bir "özel" develop-featuredal ile çalışırdık . Elbette, ayrıcalık yalnızca sözleşmeyle yapılır ve hiçbir şey tarafından uygulanamaz, ancak özellikle bunun için belirli şube adlandırma sözleşmeleri getirilirse, bir politikanın parçası haline getirilebilir. (Belki de şu anda çok endişeliyim, belki de değilim :) ile diğer kombinasyonumda da belirtildiği gibi --force-with-lease, kombinasyon zarar görmemeli.
Chiel ten Brinke

3

Burada aklımdan geçen bazı olasılıkları listeliyorum.

Her zaman yeni bir dalda yeniden taban

Dağınık bir dalı olduğunda some-feature, yeni bir dalda yeniden temellendirin. Örneğin

$ git checkout -b some-feature-rebase
$ git rebase -i master # etc..

Sonra some-feature-rebasegözden geçirip entegre ettiler .

Sorun: Burada büyük bir dezavantaj, kesinlikle, her rebase için yeni bir şubeye ihtiyacınız var. (Örneğin, bir kod incelemesinden sonra değişiklik yaparsanız birden fazla yeniden basmanız olabilir)

kullanım git push --force-with-lease

Sadece öğrendim git push --force-with-leasealternatifgit push --force , hangi

beklediğimiz durum olmadığı sürece bir şubeyi güncellemeyi reddediyor; yani hiç kimse şubeyi yukarı yönde güncellemedi.

Sorun : Bu --force, sadece kullandığımız duruma göre doğrudan iyileşiyor gibi görünüyor , ancak yine de bazı uyarıları var, en önemlisi a git fetchyerine git pullyaptığımda, yerel yukarı akış dallarımızı güncelleyen --force-with-leaseve uzaktan kumandada herhangi bir değişiklik yapılmadığını düşünerek kandırma dalı.

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.