SORU
17 Mayıs 2010, PAZARTESİ


Neden git ileri varsayılan olarak birleştirir mi?

Mercurial gelen, dalları özellikleri düzenlemek için kullanıyorum. Doğal olarak, bu benim tarihte iş akışını görmek istiyorum.

Yeni projem git kullanmaya başladım ve bu benim ilk makalem bitti. Özelliği birleştirirken, git ileri kullanır fark ettim, yani mümkünse benim değişiklikler doğrudan ana şube için geçerlidir ve benim Şubesi hakkında unutur.

Geleceği düşünmek: bir tek bu proje üzerinde çalışıyorum. Eğer gıt varsayılan yaklaşım (hızlı ileri birleştirme) kullanırsam, benim tarih bir dev ana şube neden olur. Kimse sadece bu dev ana şube zorundayım çünkü sonuçta her özelliği için ayrı bir şube kullandım, biliyor. Bu amatör değil mi?

Bu sebeple, ileri birleştirme istemiyorum ve varsayılan neden göremiyorum. Onu bu kadar iyi yapan nedir?

CEVAP
17 Mayıs 2010, PAZARTESİ


Hızlı ileri birleştirilmesi mantıklı kısa ömürlü dalları, ama bir daha complex history non-hızlı ileri birleştirme yapabilir geçmişi daha kolay anlamak ve yapmak daha kolay döner bir grup taahhüt eder.

Uyarı: Non-hızlı ileri de potansiyel yan etkileri vardır. https://sandofsky.com/blog/git-workflow.html 'ff' "checkpoint" break sanatçı veya suçlama, ve master varsayılan yaklaşım olmalı iyi düşünün. taahhüt ile önlemek gözden geçirin

alt text
(nvie.com, Vincent Driessen, post "A successful Git branching model")

Bitmiş bir özelliği içeren geliştirmek

Bitmiş özellikler yakında çıkacak eklemek için şube geliştirmek birleştirilebilir:

$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop

Her zaman eğer birleştirme bile işlemek yeni bir nesne oluşturmak için birleştirme --no-ff bayrak neden bir ileri ile gerçekleştirilebilir. Bu arada bu özelliği ekledi şube ve grupların birlikte işleyen bir özellik, tarihsel bir varlık hakkında bilgi kaybını önler.

Jakub Narębski mentions config merge.ff:

Varsayılan olarak, Gıt geçerli soyundan olan tamamlama tamamlama tamamlama birleştirirken birleştirme fazladan oluşturmaz. Bunun yerine, mevcut şube ucu hızlı iletilir.
false olarak ayarlandığında, bu değişken Gıt birleştirme böyle bir durumda (komut satırından --no-ff opsiyon eşdeğer) taahhüt fazladan oluşturmak için söyler.
Set 'only', hızlı ileri, sadece bu tür birleştirir izin verilir (komut satırından --ff-only opsiyon eşdeğer).


Hızlı ileri sarma varsayılan çünkü:

  • kısa-ömürlü dalları ve Gıt oluşturmak çok kolaydır
  • kısa ömürlü olan özgürce o şube içinde yeniden organize edilebilir tamamlar
  • bu aslında ana dal parçası kaydeder: bir kez, yeniden, ana dal hızlı iletilen yer alıyor.

Ama eğer tahmin yinelemeli bir iş akışı üzerinde bir konu/özellik Dalı (örneğin, Birleştir, sonra ben geri dönmek için bu özelliği şube ve ekleyin biraz daha yaparsa), o zaman yararlıdır vardır sadece birleştirme ana şube yerine tüm ara iptalleri özelliğini şube.

Bu durumda, this kind of config file ayar sonunda

[branch "master"]
# This is the list of cmdline options that should be added to git-merge 
# when I merge commits into the master branch.

# The option --no-commit instructs git not to commit the merge
# by default. This allows me to do some final adjustment to the commit log
# message before it gets commited. I often use this to add extra info to
# the merge message or rewrite my local branch names in the commit message
# to branch names that are more understandable to the casual reader of the git log.

# Option --no-ff instructs git to always record a merge commit, even if
# the branch being merged into can be fast-forwarded. This is often the
# case when you create a short-lived topic branch which tracks master, do
# some changes on the topic branch and then merge the changes into the
# master which remained unchanged while you were doing your work on the
# topic branch. In this case the master branch can be fast-forwarded (that
# is the tip of the master branch can be updated to point to the tip of
# the topic branch) and this is what git does by default. With --no-ff
# option set, git creates a real merge commit which records the fact that
# another branch was merged. I find this easier to understand and read in
# the log.

mergeoptions = --no-commit --no-ff

OP yorum ekler:

[Kısa süreli] dalları için ileri bir anlamda görüyorum, ama varsayılan eylem yapma gıt... genellikle [kısa süreli] Şubesi varsayar anlamına gelir. Makul?

Jefromi cevap:

Şube ömrü kullanıcıdan kullanıcıya değişir bence. Deneyimli kullanıcılar arasında olsa da, muhtemelen çok daha kısa ömürlü Şubesi için bir eğilim var.

Benim içinkısa ömürlü bir şube belirli bir işlemi kolaylaştırmak için yarattımve sonra (rebasing, büyük olasılıkla, ya da hızlı yama ve test) işim bittikten sonra hemen sil.
Bu büyük olasılıkla anlamına gelirkonu dalını içine absorbe olmalıdır onu çatallıkonu şube bir şube olarak birleştirilmiş olacak. Kimse işleyen verilen özellik uygulamak dizi oluşturmak için dahili olarak ne yaptığımı bilmek istiyor.

Daha genel olarak, ben ekleyin:

gerçekten development workflow bağlıdır:

  • eğer doğrusal ise, bir şube mantıklı.
  • Eğer özellikleri izole etmek ve onlara iş uzun bir süre için ve tekrar tekrar onları birleştirmek için gerekiyorsa, birkaç dal mantıklı.

"When should you branch?"

Mercurial şube modeli göz önüne aldığınızda aslında, one branch per repository çekirdek anonymous heads, bookmarks and even named branches oluşturabilirsiniz olsa bile)
"Git and Mercurial - Compare and Contrast" bkz.

Mercurial, varsayılan olarak, terimleri olarak adlandırılan anonim hafif codelines, "kullanır". başları
Git hafif dalları adlı,-uzaktan izleme şube adları uzak depo Şubesi haritası adları için birebir eşleme ile kullanır.
Gıt "kuvvetleri" adı Şubeler (iyi, dışında bir tek adı açıklanmayan bir şube olan bir durum olarak adlandırılan bir "detached HEAD"), ama bence bu daha iyi çalışan ile şube-ağır iş akışları gibi konu şube iş akışı, anlamı birden fazla Şubesi bulunan tek bir depo paradigma.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • spyib

    spyib

    9 Ocak 2007
  • Top10Series

    Top10Series

    26 Kasım 2008