Git'te 'sahne' ne anlama geliyor?


315

Eylemlerde kullanılan kelimelerin anlamlarını bulamadığım için gitmeyi zor buluyorum. Sözlüğü 'sahne' için kontrol ettim ve anlamların hiçbiri kaynak kontrol kavramları ile ilgili değildi.

'Sahne', git bağlamında ne anlama geliyor?



11
Git'in gerçekten kendi sözlüğü var. Her öğretimin özel bir kelime haznesinde formüle edildiğinden başlamak zor. "Aşama" yapmak git add file.ext, belirli bir dosya için yapmak ya da git add .tüm değiştirilmiş ve takip edilmemiş dosyaları etkilemektir. Bu şekilde eklenmiş olan dosyaların "aşamalı" olduğu söylenir ve bir sonraki "işleme" dahil edilirler. Taahhüt, örneğin yarattığınız çalışmanın bir anlık görüntüsüdür git commit -m "I wrote something".
Jonatan Öström

11
Git'i anlamak zor çünkü dışarıda kavramsal bir eğitim yok. Hepsi gereksiz ayrıntılardan geçer.
Xaqron

2
"Terminoloji" etiketini bu sorudan kaldırmak mı istediniz? Bana göre mükemmel bir etiket gibi görünüyor.
Philip Kendall

Bazı nedenlerden dolayı, evrelemenin önemini anlayabilmemin en iyi yolu Quora’daki
Lamar

Yanıtlar:


310

To sahne bir dosya bir taahhüt için ince hazırlamak için basitçe. Git, dizini ile, son işlemden bu yana yaptığınız değişikliklerin yalnızca belirli kısımlarını işlemenizi sağlar. İki özellik üzerinde çalıştığınızı söyleyin - biri bitti ve diğeri hala biraz çalışmaya ihtiyaç duyuyor. Bir taahhütte bulunmak ve eve gitmek (nihayet saat 5'de!) Ama ikinci özelliğin henüz yapılmayan kısımlarını yapmak istemezsin. Bildiğiniz kısımları sahneye atarsınız ve ilk özelliğe aittir. Şimdi sizin taahhüdünüz, ilk işin yapıldığı projenizdir, ikincisi ise çalışma dizininizde devam etmektedir.


5
İyi açıklama. Dağıtılmakta olan git'in, yerel (ilk başta) olduğu için her iki özelliği de yerine getirmenize izin verdiğini unutmayın . Yine de, değişiklikleri özellik başına tek bir işleme bölmek isteyebilirsiniz ve yine evreleme işe yarar.
sleske

77
Bunun için neden sahneleme ihtiyacınız olduğunu anlamıyorum. Bunu sadece ilgili dosyaları işleyerek HG ve hatta SVN ile yapabilirim. Bu özellik öncelikli olarak, ne işlediğinizle ilgili kutuları işaretlemenin zor olduğu komut satırıyla çalışmak için ısrar eden kişilere yardımcı olmak için tasarlanmıştır.
jiggy

78
@jiggy git bir dosyanın bir bölümünü düzenlemenizi sağlar . Ayrıca bir dosyayı aşamalı hale getirebilir, daha fazla değişiklik yapabilir, ardından aşamada olduğu durumu onaylayabilirsiniz. Bunu yıkımda yapamazsın.
Izkata

4
jiggy SVN'de, hangi dosyaların / parçaların yükleneceğini seçeceğiniz zaman ve onay mesajınızı yazmayı tamamladığınızda, hangi dosyaları / parçaların yükleneceğini kaydeden bir şey vardır. Asla açıkça belirtilmeyebilir, havuzun gerçek bir parçası yerine SVN istemcisine uygulanabilir, sadece bellekteki bazı bayraklar olabilir, ama bu SVN'nin aşamasıdır. HG'ye bakmadım ama aynı şeyi yaptığından şüpheleniyorum. Git ile olan fark, git'in bir şey olduğunu kabul etmesi, diske kaydetmesi ve kullanıcının doğrudan erişmesine izin vermesidir.
08:

7
Şekildeki ikinci ok "sahne dosyaları" yanıltıcı olabilir. "sahne parçaları" daha doğru olabilir mi?
Ida

137

Şimdiye kadar herkes bunu "resmi" bir şekilde yanıtladığından, bunu metaforların gücü ile öğrenmeyi geliştirmek için alternatiflerle yapmama izin verin.

Yani evreleme alanı şöyle:

  • taahhüt etmek istediğiniz bir dosya önbelleği
  • bir seri tüp değil, aslında bir damperli kamyon, yüklediğiniz işi depoya taşımak için hazır
  • sihirbazlığınızla seçilen dosyaların taşa dönüştürüleceği ve hevesinizdeki depoya sihirli bir şekilde taşınabileceği büyülü bir yer
  • dosyalar için sarı tuğlalı yol, depoya mutlu bir şekilde gidebilir (veya geri dönmek istiyorsanız
  • deniz limanındaki dosyaların bir çift çimento ayakkabısı aldığı ve daha sonra depo denizine atıldığı kurgusal yer
  • kütüphanedeki resepsiyonlar masası, kütüphanecinin kütüphaneye doldurması için hazırladığı dosyaları koyarsınız.
  • yatağınızın altına sokmadan önce eşyaları koyduğunuz bir kutu, yatağınızın daha önce içine koyduğunuz bir kutu deposudur.
  • güç yükleyici ile depoya gitmeden önce dosyaların yerleştirilmesi
  • Elektrikli kahve makinesinin filtresi, dosyalar kahve tozu gibiyse, o zaman işlenen dosyalar demlenmiş kahvedir.
  • tonozun yanındaki Scrooge McDuck'ın ofisi, dosyalar devasa Para Bininin kasasına girmeden önce paralar gibidir
  • evcil hayvan mağazası, bir kez eve evcil hayvan getirmek

Bu büyülü !


Analojileri seviyorum; tomurcuk gitmenin yolu ^ _ ^
Musa Al-hassy

Son analojiyi seviyorum.
meTchaikovsky

35

Evreleme, git'teki işlemden önceki bir adımdır. Diğer bir deyişle, git'te bir taahhüt iki adımda gerçekleştirilir: evreleme ve gerçek bir taahhüt.

Bir değişiklik kümesi hazırlama alanında olduğu sürece, git, istediğiniz gibi düzenlemenizi sağlar (aşamalı dosyaları diğer aşamalı dosyaların diğer sürümleriyle değiştir, değişiklikleri aşamalı olarak kaldır, vb.).

Bozuk metafor zamanı:

Eski dairenizden yeni dairenize eşyalarınızı almak için nakliyecileri çağırdığınız bir senaryo düşünün. Bunu yapmadan önce, eşyalarını gözden geçirecek, neye ne götüreceğine ve ne fırlatıp atılacağına karar vereceksin, çantaları paketleyecek ve ana koridorda bırakacaksın. Taşıyıcılar basitçe gelir, (zaten paketlenmiş) çantaları koridordan alır ve taşınır. Bu örnekte, nakliyeciler eşyalarınızı alana kadar her şey evrimleşiyor: nereye nereye gideceğinize, nasıl paketleyeceğinize vb. Karar veriyorsunuz (örneğin eşyalarınızın yarısının, taşıyıcılar oraya gitmeden önce atılacağına karar verebilirsiniz - bu kısım sahneleme).

Teknik bakış açısından, evreleme, tüm işlemleri neyin başarısız olabileceği (evreleme) ve neyin başarısız olamayacağı (taahhüt) olarak ayırarak işlem taahhütlerini de destekler:

Git'teki taahhüt işlem aşamasından sonra başarılı bir şekilde gerçekleştirilir. Aşamalandırmadaki birkaç adım başarısız olabilir (örneğin, onaylamanız gerekir, ancak HDD'niz% 99,9999 doludur ve git bir işlem yapmak için boş alana sahip değildir). Bu işlem aşamalandırmada başarısız olur (havuzunuz kısmi bir taahhütle bozulmaz) ve hazırlık süreci işlem geçmişinizi etkilemez (bir hata durumunda havuzunuzu bozmaz).


... ve şimdiye kadar çok az oy.
ojonugwa ochalifu

26

Bir dosyayı sahnelemek, bir taahhüt için hazırlamaktır. Git, bu eylemi kullanıcıların denetimine maruz bıraktığından, kısmi taahhütler oluşturmanıza veya bir dosyayı değiştirmenize, onu aşamalı hale getirmenize, yeniden düzenlemenize ve yalnızca orijinal değişikliği kabul etmenize veya geri almanıza izin verir.

Aşama, sürüm kontrolüne tam olarak nasıl yaklaşmak istediğinizi daha iyi kontrol etmenizi sağlar .


19

Diğer mükemmel cevaplara eklemek için, işte "stage" adının geldiği yer:

Sözlüğü sahne anlamı için kontrol ettim ve anlamların hiçbiri kaynak kontrol kavramları ile ilgili değildi.

İngilizce’de "sahne" demek

düzenlemek ve katılmak (halka açık bir etkinlik): UDF destekçileri Sofya'da bir gösteri düzenlediler

( http://oxforddictionaries.com/definition/stage adresinden )

Git özelliği için "evreleme" adı şu anlama gelir: Evreleme sırasında bir taahhüt hazırlar ve düzenlersiniz. Tabii taahhüt bir bir performansla aynı değil, ama olan bir VCS :-) önemli bir olay.



Aynen. Ayrıca, "bir süreçte veya gelişmede bir nokta, periyot veya adım."
Darien

Ayrıca 'evreleme sunucusu', geliştirme ve üretim arasındaki bir sunucuyu tanımlamak için kullanılan oldukça yaygın bir terimdir.
Ebedi21

4

Diğer birçok sürüm kontrol sisteminde, verileri depolamak için 2 yer vardır: çalışan kopyanız (şu anda kullanmakta olduğunuz klasörler / dosyalar) ve veri deposu (sürüm kontrolünün değişikliklerinizi nasıl paketleyip paketleyeceğinize karar verdiği). Git'te üçüncü bir seçenek var: hazırlama alanı (veya indeks). Temel olarak hangi değişikliklerin gönderileceğini belirlediğiniz bir yükleme istasyonu.

kaynak: http://gitready.com/beginner/2009/01/18/the-staging-area.html


1
bu önceki 6
cevapta

İndeksten bahseder. Ve çok kapsamlı bir makaleye referanslar. Upvoting. Btw, yukarıdaki bazı cevaplar sadece şakalar.
Gangnus

1

"Aşama", bir dosyada kontrol etme, yani depoya eklenecek değişiklikleri toplama sürecinde teknik olarak gerekli bir ara adımdır. Git'in yazarları, bu adımı diğer VCS'nin taahhüt işleminin geçici bir parçası yaptığı yerlerde görünür ve kalıcı kılmayı seçti. Bu sadece git'in size vereceği bir seçenek çünkü bunu yapabiliyor, neden olmasın?

Gördüğüm gibi git git "stage" ın asıl amacı, diğer VCS’lerin yapmadığı bir dosyayı kontrol etmek için kullanabilmenizdir. Etkili bir şekilde isimlendirilmemiş, açıklanamayan yerel bir taahhüt, size tüm işlerinizle bitirme ve kalıcı olarak depoya teslim etme ile yerel deponuzda hiçbir şey kaydetmeme arasında bir adım atmanızı sağlar.

Örneğin, kısmen bitirilmiş bir özelliğiniz olduğunu varsayalım. Kararlı bir durumda, tüm testleri geçiyor ve üretime girebiliyor, ancak bunun için daha fazla işiniz var. Tüm değişikliklerinizi yapabilir ve daha sonra özellik üzerinde çalışmaya devam edebilirsiniz.

Daha sonra, yalnızca ne yaptığınızı işleme koyma (ve bu işlemi uzak havuza itme) ya da yeni değişikliklerinizi hazırlama alanınıza ekleme ve sonra hepsini bir kerede tamamlama ya da yalnızca yeni değişikliklerinizi geri alma seçeneğine sahip olacaksınız. çalışma dizininizi, değişikliklerinizi hazırladığınızdaki durumuna geri döndürün.

Hazırlık alanını tamamen pratik olarak atlamak tamamen mümkündür ve aşama alanını yararlı bir konsept bulamazsanız -aseçeneği kullanın git commit. Birçok insan evreleme işlemini atlar ve GUI araçları da buna izin verir.


"diğer VCS yok" - seni böyle düşündüren ne? Performance'ta raf yapmak tarif ettiğiniz şeyi yapıyor, hatta birkaç ek çan ve ıslık bile olsa
gnat

1
@gnat evet, elbette diğer birçok VCS size evreleme gibi bir şey veriyor. "Diğer VCS" ile, Git'in sahnesine benzeyen başka bir VCS'yi kastediyorum, çünkü OP'nin bahsettiği şey buydu.
Eski Pro

Ben Evreleme hiç neden var (varlık açıklık tek kişi o yana, her şeyden daha gayet iyi olmak için bu cevabı buldum teknik olarak gerekli ), onun kökenli bir açıklama ( seyahatseverlerin Git yazarları bu adım görünür ve kalıcı kılmak için seçti ekleyerek) şahsen bunun için iyi bir tanım olarak bulduğum şey ( bir ara, isimsiz, yorumlanmamış yerel taahhüt ). Bununla birlikte, Aşama'nın kökeni hakkındaki açıklama için bir kaynaktan alıntı yapılmasıyla daha da geliştirilebileceğini düşünüyorum ve teknik olarak neden gerekli olduğu konusunda biraz daha ayrıntılı bilgi verin . @OldPro
alexlomba87

-1

Anladığım kadarıyla, giriş özelliği geliştirdiğimi ve tamamlamak için 5 ardışık adım gerekli olduğunu varsayalım. Bu yüzden burada evreleme,
1. aşamadaki gibi adımlar üzerinde çalışmanıza yardımcı olacaktır .
adım 2 ile yapılan, şimdi adım 1 ve adım 2 her ikisi de doğru aşamada.
adım 3 ile uğraşmak sorun yok çıkış son aşamalı adım olan bu adım 2 ile
aynı şekilde tamamlandıktan sonra 5 adımda tamamladığınız anlamına gelir;


Bu, önceki 9
cevapta

evet haklısın, sadece basit ve tatlı bir açıklama yapmaya çalıştım
palash140

Ve bu kavramı pratik olarak kullanmak için ne hissettiğimi pratikte açıklamaya çalıştım
palash140

Buradaki tartışmaya göz atmayı düşünün: İkinci TL; DR cevapları kabul edilebilir mi? (Önceki cevaplara göre FWIW bu bana basit ya da tatlı görünmüyor)
gnat

teşekkür ederim bayım, sormam gereken bir sorum var. Pek çok cevapla karşılaştım ve çoğu çok karmaşık, evet bunlar doğru ama bir seferde sindirimi zor, basit bir şekilde herhangi bir şeyi açıklayamazsanız, doğru bir şekilde öğrenemediğiniz veya nasıl bilmediğinize inanıyorum. kullanmak için. Yani şimdi cevaplamak için özeti ya da basit bir yol koymak kötü mü ??
palash140
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.