2009-09-05 7 views
32

Github'da barındırılan oldukça küçük bir açık kaynak projesine katkıda bulunuyor. Böylece diğer insanlar işimden faydalanabilir, Github'a kendi çatalımı yarattım. Github'un terminoloji seçimine rağmen, ana projeden tamamen ayrılmak istemiyorum. Ancak, tüm çalışmalarımın ana depoya kabul edilmesini beklemiyorum veya istemiyorum. Bununla birlikte, bir kısmı, ana depoya birleştirildi ve bunun devam etmesini bekliyorum. İçinde bulunduğum problem, iki ağacın, kodun aralarında kolayca paylaşılabildiği bir durumda nasıl saklanabileceğidir. Ben ya karşılaştı olacakAçık kaynak projelerinde git depoları için en iyi yöntemler

Bazı durumlar şunlardır:

  • Daha sonra ana depoya kabul edilir kodu işlemek. Bu depodan geldiğimde, benim taahhüt benim deposumda çoğaltılır.
  • Ana depoda asla kabul edilmeyen kodlar yapıyorum. Gelecekte bu depodan çektiğimde, iki ağaç birbirinden uzaklaştı ve sabit kaldı.
  • Başka bir kişi gelir ve çalışmalarını depoya dayandırır. Böylece, mümkünse, örneğin git rebase kullanarak ittiğim işleri değiştirmekten kaçınmalıyım.
  • Kodunu ana depoya göndermek istiyorum. İdeal olarak, değişikliklerim, ana depoya doğrudan ve temiz bir şekilde uygulanabilen yamalar haline dönüştürülebilmelidir (ideal olarak git biçimini kullan).

Bildiğim kadarıyla iki veya özellikle iyi çalışan hiçbiri bu işlemek için muhtemelen üç yolu vardır söyleyebilirim:

  • Sıkça baş dışına göre benim değişiklikleri tutmak için rebase budala çalıştırmak yukarı akış deposu. Bu şekilde, yinelenen işlemleri kaldırabilirim, ancak çoğu zaman geçmişi yeniden yazmak zorunda kalıyor ve bu da işlerini benimkilerden çıkarmak isteyen insanlar için sorunlara neden oluyor.
  • Sıklıkla üst bilgi havuzu değişikliklerini benimkiyle birleştir. Bu benim için tamam çalışıyor, ancak kodumu yukarı akış havuzuna göndermeyi kolaylaştırıyor gibi görünmüyor.
  • Bunların bazı kombinasyonlarını kullanın ve bazı şeyleri sırayla tutmak için muhtemelen kiraz toplama özelliğini kullanın.

Bu durumda başkaları ne yapmış? Durumumun, çeşitli çekirdek katılımcılar ve Linus'un ana deposu arasındaki ilişkiye benzediğini biliyorum. Bu yüzden, bununla başa çıkmanın iyi yolları olduğunu umuyorum. Gitmek için oldukça yeni oldum, bu yüzden tüm nüansları ustalamadım. Son olarak, özellikle Github nedeniyle, terminolojim tamamen tutarlı veya doğru olmayabilir. Beni düzeltmek için çekinmeyin.

+0

Not: Yeniden yapılandırılmış değişikliklerinizi zorladığınız (zorla) bile, diğer kişilerin de güncellemek için kolayca rebase ile çekebileceğini unutmayın. Tarihin sürekli olarak yeniden yazıldığı başka bir atölye. Bunun üzerine, her şeyi silebilmek için zorlama kuvvetinden biraz daha dikkatli olmanız gerekir :) – rubenvb

cevap

17

Ben benzer bir durum öğrendiğim bazı ipuçları:

  • memba yazarın işlerinin uzak izleme dalı var.
  • Bu izleme dalındaki değişiklikleri sık sık ana dalınıza çekin.
  • Üzerinde çalıştığınız konuların her biri için yeni bir şube oluşturun. Bu şubeler genellikle yalnızca yerel olmalıdır. Üst akıştan ana sayfaya geçiş yaptığınızda, konu başlıklarınızı bu değişiklikleri yansıtacak şekilde yeniden oluşturun.
  • Bazı konu çalışması ile işiniz bittiğinde, ana birleştirme yapın.Böylelikle, sizden çalışma yapan insanlar, yerel konu dallarınızda yeniden oluşma meydana geldiğinden, çok fazla yeniden yazılan tarih görmeyeceklerdir.
  • Değişikliklerin gönderilmesi: Ana şubeniz temel olarak bir kısmı üst akış ile aynı olan bir dizi işlem olacaktır, geri kalanlar sizin olacaktır. İsterseniz ikinci olarak yamalar olarak gönderilebilir.

Elbette, şube adları ve uzaktan kumandalarınız sizin tercihinizdir. Bunların senaryo için kapsamlı olduğundan emin değilim, ancak engellerimin çoğunu kapsamaktadır.

+0

Bu soruyu sorduğumdan beri, Git ile çok daha fazla tecrübe kazandım ve buna yaklaşık olarak karar verdim. en iyi cevap olarak. Gelişim altında değişikliklerin sadece yerel taahhütler olarak tutulması anahtardır. Kesinlikle çok iyi bir ipucu. Teşekkürler. – orangejulius

+0

Hiç bir konu dalında birden fazla bilgisayarda çalıştınız mı? Eğer öyleyse, sen ne yaptın? –

+1

Hayır, bilgisayarlarda konu dallarında çalışmadım, ancak "bilgisayarlar arası" kısım zor değil. Bu "insanlar arasında" yani. Konu şubelerinizi sunucuya kolayca aktarabilirsiniz, böylece _you_ onunla çalışabilir. – sykora