Tek geliştirici olarak (şimdilik) Git'i nasıl kullanmalıyım? [kapalı]


60

Git'te sonunda başkalarını getirmek istediğim birçok projem var. Ancak, şu an sadece ben ve Git ve GitHub'ı çok basit bir şekilde kullanıyorum: şubelerim yok ve temel olarak sadece yerel dosyalarıma yedek olarak komisyonları kullanıyorum. Bazen başvurmak için geri dönüp dosyalarımın önceki sürümlerine bakacağım, ancak ileride ihtiyacım olması gerektiğine inandığım için bu noktaya herhangi bir geri dönüş yapmam gerekmedi.

Tek geliştirici olarak, şu anda bana fayda sağlayacak olan hangi Git veya GitHub özelliklerinden faydalanabilirim? İş akışım nasıl olmalı?

Ayrıca, gelecekte projelerime başkalarını katma beklentisiyle yapmam gereken belirli uygulamalar var mı?


3
Diğerlerinin açıkladığı gibi Git, size çok fazla güç verir. Yine de tek bir geliştirici olarak, daha sonra takdir edeceğiniz en büyük şey, size yaptığınız değişiklikleri (birkaç dosyadaki değişiklikleri bir kümede gruplama), ne zaman ve neden yaptığınızla ilgili bir kayıt verirse! Aynı zamanda bir ekibin parçası olduğunuzda da harika bir uygulamadır.
Lider Geek

1
Kapalı çünkü ilginç. :)

@ user93458 her zaman olduğu gibi! Kapalı konular genellikle tam olarak aradığım şeydir.
Miroslav Popov

asla kapatılmaması gereken mükemmel bir soru.
cilt 1

Yanıtlar:


64

Ayrıca, gelecekte projelerime başkalarını katma beklentisiyle yapmam gereken belirli uygulamalar var mı?

Tabii ki. Şu anda bir ekibiniz olmasa bile kullanabileceğiniz basit ve iyi bir uygulama var: gelişim için ayrı bir şube oluşturun. Fikir, ana dalın yalnızca yayınlanmış kod sürümlerini veya büyük değişiklikleri içereceğidir. Bu, projenize katılan yeni geliştiriciler tarafından kolayca kabul edilebilir.

Ayrıca, dallanma yalnız çalışıyor olsanız bile yararlıdır. Örneğin, yeni bir özelliği kodlama sürecinde bir hata bulursunuz. Dalları kullanmazsanız her ikisini de yapmanız gerekir: yeni özellikler ekleyin ve hatayı aynı dalda düzeltin. Bu iyi değil: P Öte yandan, yeni özelliğinizi oluşturmak için yeni bir şube oluşturduysanız, geliştirme kolunu kontrol edebilir, hatayı düzeltebilir ve yeni özellik kolunu geri alabilirsiniz.

Bu, tek bir programcı olarak neler yapabileceğinize dair kısa bir örnektir. Daha iyi uygulamalar olması gerektiğine eminim.

Bu makaleyi şiddetle tavsiye ediyorum: Başarılı bir Git dallanma modeli


+1 - Bu mantıklı. Ben de bu makaleye yakından bakacağım, çok faydalı görünüyor.
VirtuosiMedia

Git uzmanı değilim, çoğunlukla Mercurial kullanıcı. Bu şube önerisi Mercurial için hala geçerli mi? Öyle görünüyor ama belki bazı farklılıklar bu durumda iyi bir fikir değil mi?
Klaim

2
Evet, tüm kaynak kontrolü için hemen hemen tutar. Aslında SVN ile geriye doğru yapıyorum; “Ana” bagaj, günlük veya daha sık kullanılan son gelişme için. Bir sürüm çağrıldığında, kod dondurulur ve bir dal kesilir. Bu dal, yalnızca önemli sürüm sorunlarını gidermek için küçük güncellemeler alır ve daha sonra dağıtılabilir, bundan oluşturulur. Bu şekilde, yayınlanan her sürümün arkasındaki kaynak kodun bir şubesine sahibim. Bu, etiketten sonra taahhütler gelirse, ancak serbest bırakılmadan önce, gerçekten dışlanıp bırakılmadıklarını bilmiyorsanız, b / c etiketlemekten veya etiketlemekten daha iyidir.
KeithS

Makale için +1; @Klaim - yup, hg için de harika çalışıyor. gerçekten "başarılı DCVS dallanma modeli" olarak adlandırılmalıdır
Wyatt Barnett

+1 bağlantı için teşekkürler, git ile çalışma biçimimi değiştirdi, aklımdan değil, ama söyledikleri gibi, her küçük yardımcı oluyor!
Newtopian

14

Tam olarak bu durumdayım ama Git'le daha karmaşık bir iş akışı olmasa da, biraz daha karmaşık olmayı tercih ettim.

İlk başta amaç, gidiş yolunu öğrenmek oldu, bu yüzden bir miktar keşif yaptım. daha sonra tarif ettiğiniz iş akışına geri döndü.

Bir süre sonra, bazı durumlar ortaya çıktığında çalışmak zorlaştı, aynı zamanda bir takıma katıldığımda kırılması zor olacak kötü alışkanlıklar verdi.

bu yüzden aşağıdakileri çözdüm:

  • Çalışmak için yerel depo.
  • Uygulama için sabit bir ana hat olarak ana dal
  • Her özellik / refraktör için bir dal, temelde yapılacak her büyük değişiklik için bir dal.
  • Dal stabil olduğunda ve tüm testler geçtiğinde tekrar bagaja birleştirilir.

Ayrıca bagajı senkronize ettiğim bir git hub hesabı oluşturdum. Bu, farklı bilgisayarlarda kolayca çalışmaya başlamamı sağladı. Zorunluydu, ancak içinde bulunduğum çevreye bağlı diğer bilgisayarlarda bulunmayan hataları bulmama izin verdi. Bu yüzden şimdi farklı bir "bakire" sistemindeki bir projeyi en az bir kere denemeyi alışkanlık haline getiriyorum. Müşteriye dağıtma zamanı geldiğinde bana çok fazla sıkıntı kazandırıyor.

  • Onu serbest bırakılabilir bir sürüm olarak github'a dönüştüren her sürümü etiketliyorum.
  • Müşteriye serbest bırakılırsa, müşteri tarafından beyan edilen hata düzeltmeleri için ikinci bir sabit gövde oluşturmak için bu sürümden şube açacağım.

İlk başta olan çoklu dallar fazladan gözüküyor gibiydi, ancak GERÇEKTEN çok yardımcı oldu. Bir dalda bir fikir başlatabilir, bir süre üzerinde çalışabilirim ve daireler çizmeye başladığımda pes ettim ve başka bir şey üzerinde çalışmak için başka bir şubeye başladım. Daha sonra, yarı pişmiş şubeye geri dönüp bu fikri keşfedeceğim bir fikir geldi. Bu genel olarak, flaşları ve fikirleri çok hızlı bir şekilde yapabildiğim ve çalışıp çalışmadığını görebildiğim için daha üretken olmamı sağladı. Şubelerin GIT ile değiştirilmesinin maliyeti son derece düşük ve beni kod tabanımla oldukça çevrelendiriyor. Bu, tarihimi temizlemek için yeniden rebase kavramında ustalaşmam gerektiğini söyledi, ancak yalnız olduğum için gerçekten ihtiyacım olduğundan şüpheliyim. "Öğrenmesi güzel" olarak bastırdı.

Tüm dallanma karmaşıklaştığında, bir değişiklik ağacı çizmek ve hangi dalın nerede olduğunu görmek için log seçeneğini araştırdım.

Uzun lafın kısası, git SVN, CVS veya (brrr) TFS gibi değil. Dallanma çok ucuz ve işleri yok edecek hatalar yapmak oldukça zor. Sadece bir kere işimi kaybettim ve bunun nedeni, taahhütlerimi çok büyük kılmamdı (yukarıdaki kötü alışkanlıkları görün). Sık sık yaparsanız, küçük parçalar halinde git kesinlikle en iyi müttefikiniz olacak.

Git bana, kaynak kontrolünün gerçekte neyle ilgili olduğuna dair fikrimi açtı. Daha önce başka bir şey sadece onu elde etmeye teşebbüs ediyordu, git ilk, aklımda, onu aldı. Bununla birlikte, diğer DVCS'leri denemedim, muhtemelen bu açıklama bütün aileye yayılabiliyordu.

Son bir tavsiye, komut satırı senin arkadaşın. Grafiksel araçların iyi olmadığını söylemiyorum, tam tersi ama komut satırına girip kendimi denediğimde, gerçekten gitmiştim. Aslında çok iyi yapılmış, çok kapsamlı bir yardım sistemiyle takip etmesi kolay. En büyük sorunum, alternatifler bulana kadar pencerelerdeki ama çirkin konsola bağlı olmaktı.

Şimdi her ikisini de kullanıyorum, gerçek zamanlı olarak neler olup bittiğini görmek için Git ile Eclipse entegrasyonu yapıyorum ve farklı işlemler, bir dosya için tarihçeyi araştırmak, vb. Gibi bazı işlemler yapıyorum. . bazı temel komut dosyaları ve kaynak kontrolü konusunda hiç bu kadar verimli olmamıştım ve kaynağım üzerinde hiçbir zaman bu kadar kontrol sahibi olamadım.

İyi şanslar, bu yardımcı oldu umuduyla.


4

Çok yönlü ve çok yönlü dallanma modellerinde başarılıyım ve bazılarını işte kullanıyorum. Ancak, projeler üzerinde tek başıma çalıştığımda, şu anda yaptığınız şeyi tam olarak yapıyorum. Gerçeğe ihtiyacım olursa her zaman bir dal oluşturabilirim ama neredeyse hiç yapmam. Yalnız çalışarak, şu anki görevim bitinceye kadar bekleyemediğim hata düzeltmelerine nadiren rastlarım. Benim tavsiyem, bazı dallanma modellerine aşina olmak, fakat ihtiyacınız olana kadar işleri karmaşık hale getirmenin bir anlamı yok.


4

Daha basit bir model için GitHub'ın ne yaptığına bakabilirsiniz. "GitHub akışı" çok basittir ve burada mükemmel bir rehber vardır: https://guides.github.com/introduction/flow/index.html

Özet ( Scott Chacon'un blogundan ):

Peki, GitHub Akışı nedir?

  • Ana daldaki herhangi bir şey konuşlandırılabilir
  • Yeni bir şey üzerinde çalışmak için, efendiden tanımlayıcı olarak adlandırılmış bir dal oluşturun (yani: new-oauth2-scopes)
  • Yerel olarak o şubeye bağlı kalın ve çalışmalarınızı sunucudaki aynı şubeye yönlendirin
  • Geri bildirime veya yardıma ihtiyacınız olduğunda veya dalın birleşmeye hazır olduğunu düşünüyorsanız, bir çekme isteği açın
  • Özelliği başka biri gözden geçirip imzaladıktan sonra, bunu ana sistemde birleştirebilirsiniz.
  • Birleştirildikten ve 'ana' duruma getirildikten sonra, derhal konuşlandırmalısınız ve konuşmalısınız.
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.