sürüm kontrolü nasıl kullanılır


19

Ben php localhost içinde bir web sitesi geliştiriyorum ve modülleri tamamlandığında, ben arkadaşlarım alfa test böylece bulut üzerine yükleyin.

Geliştirmeye devam ederken, çok sayıda dosyam var ve düzenlediğim veya değiştirdiğim vb. Parçaları kaybettim. Tüm bunları yönetmek için 'sürüm kontrolü' olarak bir şey duydum, ancak nasıl çalıştığından emin değilim.

Yani, sorum şu: Tüm düzenlemeleri / değişiklikleri / yeni dosyaları izlememin ve web sitesini geliştirirken dosyaları yönetmem için kolay bir yol / hizmet / uygulama var mı? Bir modülle işim bittiğinde, onu buluta yüklemek istiyorum (Amazon Cloud Service kullanıyorum). Yeni dosyalara bir şey olursa, eski dosyaya geri dönmek isteyebilirim. Ve belki, bir veya iki tıklamayla, son yüklediğimden beri düzenlediğim veya değiştirdiğim dosyaları görüyorum?


5
Hangi sürüm kontrol sisteminin kullanılacağı ve dürüst olmak gerekirse, hepsi mevcut "manuel" yolunuzdan daha iyidir.
Johan

Yanıtlar:


28

Sürüm Denetimi'nin parçası olduğu yazılım yapılandırma yönetimi , kesinlikle dosyalarda değişiklikleri izlemekten biraz daha karmaşıktır, ancak kesinlikle bununla başlayabilirsiniz. Ancak Joel Spolky'nin Mercurial öğreticisiyle yukarıda bağlantılı Wikipedia makalelerini okuyun .

Başlamak için, Mercurial, GIT veya Bazaar'dan birini bu sırayla seçin ve IDE'niz ve işletim sisteminiz için araçlar ile birlikte yükleyin (Eclipse için HGE'li Mercurial'ı tercih ederim).

  1. Çalışma dizininizden bir havuz başlatın ( Mercurial ile hg init ).
  2. Hangi dosyaları ve dizinleri izlemek istediğinizi, hangilerini izlemek istemediğinizi belirleyin. Genel kural, derleyiciler ve diğer araçlar tarafından oluşturulan dosyaları izlemek değildir.
  3. Depoya dosya ve dizin eklemek için bu komutu kullanın ( Mercurial için hg add ).
  4. Araca, izlemek istemediğiniz dosyaların kalıpları hakkında bilgi verin ( Mercurial için .hgignore'u düzenleyin ).
  5. Orijinal sürümleri ( hg ci ) takip etmek için bir taahhütte bulunun .
  6. Küçük olsa bile, her mantıksal aşamadan sonra bir taahhüt gerçekleştirin.
  7. Yeni dosyaları oluştururken ekleyin.
  8. Son ikisini tekrarlayın.
  9. Çalışma dizininizi ve deponuzu makul sıklıkta yedekleyin.

Havuzdaki dosyalarınızla, bir dosyanın veya dizinin herhangi iki sürümü veya tüm proje ( hg diff ) arasındaki farkları bilebilir, değişikliklerin geçmişini ( hg hist ) görebilir ve değişiklikleri geri alabilirsiniz ( hg up -r ).

Kodunuzu yayınlamadan önce havuzu etiketlemek ( hg etiketi ) iyi bir fikirdir, bu nedenle değişiklikler veya karşılaştırmalar için tam olarak yayınladığınıza geri dönmenin kolay bir yolu vardır.

Farklı bir geliştirme çizgisi ile denemek istiyorsanız, ana depoyu ( hg klonu ) klonlayarak ve deney sonuçlanıncaya kadar geri itmeyerek basit bir dalda yapın . Deney için farklı bir çalışma dizinine sahip olmak kadar kolaydır.

Deneme yeni, yükseltilmiş bir sürüm içinse, klonlayın ve sonra dallayın ( hg dalı ), böylece bir deney diğerine müdahale etmeden depoların tüm kopyalarını güncel tutabilirsiniz.

Linus Torvalds (projelerinde on binlerce dosya ve milyonlarca kod satırı ile ilgilenen) Google'da aracın neden CVS, SVN veya çevresindeki birçok ücretsiz ve ticari dosyadan biri olamayacağı hakkında bir konuşma yaptı. ; izlemeye değer.


1
Mercurial'ı da tercih ederim. Netbeans desteğini seviyorum çünkü kodlama sırasında size son taahhüdünüzden bu yana değişen her satırı gösteriyor. Ayrıca ürün ağacındaki yeni / değiştirilmiş / değiştirilmemiş dosyaları renklendirir. Hangi sesler o OP için yararlı olacaktır istiyorum: I lose track of which file I've edited or changed. HGE bunu da yapabilir, ben kullanmadım.
JD Isaacks

1
Süreci açıklamak için +1 ve bunun için araçların nasıl kullanılacağının bir parçası.
Donal Fellows

Bir yan soru olarak, .xcodeprojXcode'un iOS projeleri için kullandığı dosya Mercurial'a görmezden gelmesini söyleyen bir şey olarak mı düşünülecek yoksa dosyayı senkronize tutmak önemli mi?
Kevin Yap

1
@Kevin Xcode hakkında bir bilgim yok, ancak en yeni IDE'lerin ve araçların genel proje öğeleri (dil ve kütüphane sürümleri, kod biçimlendirme kuralları, bağımlılıklar vb.) Ve kullanıcı tercihleri ​​(şeyler yerleştirdiğim dizinler, panel) için ayrı yapılandırma dosyaları var düzen, kaplamalar, yazı tipi boyutu, kişisel imza). Birincisi, ekip kabul ederse depoya dahil edilebilir. Bunlardan ikincisi dahil edilmemelidir, çünkü havuzdaki bir güncelleme, başkalarının tercihleri ​​üzerine yazacaktır ve bu hızla sinir bozucu ve üretken hale gelir.
Apalala

1
@John: NetBeans bunu desteklediği her VCS için yapar. Bu noktada, IDE'lerin sadece temel bir özelliği.
Mike Baranczak

13

Git tavsiye ederim. Buradan bilgi edinin: https://lab.github.com/

Git'i sevmiyorsanız, başka sürüm kontrol çözümleri de var. SVN'ye göz atabilirsiniz.


1
Git'in günlük bir kullanıcısı olarak, temel komutları almanın son derece kolay ve sezgisel olduğunu eklemek isterim. Ve bunun desteği harika, bu yüzden yardım aradığınızda kaybolmayacaksınız. SVN kullandım ama benim için kolay değildi ama birçok kullanıcı için uygun olabilir.
Muhammed Usman

1
+1 Ayrıca şunu da düşünün: insanlar svn'den (a VCS) git'e (DVCS - d = dağıtılmış) geçmeyi tercih ederler fakat GIT'den SVN'ye (seçim yoluyla) geçemezler.
Michael Durrant

7

Sadece sen misin?, Bir DVCS kullan

Göründüğü kadar karşı sezgisel olarak, Dağıtılmış Sürüm Kontrol Sistemi (mercurial, git, bazaar) ile başlamak merkezi bir sistemden (svn, cvs) daha iyidir. Neden ?, makinenize kurar ve deponuzu yerel olarak çalıştırırsınız ve hepsi bu kadar. Svn gibi merkezi bir sistemde istemcinizi ve sunucunuzu ayarlamanız gerekir ... ve sonra değişikliklerinizi saklamak için bir sunucuya bağlanmanız gerekir.

Bir DVCS ile siz, yerel depo ve isterseniz, bitbucket.org veya github.com gibi bir hizmeti kullanabilirsiniz.

IMHO, mercurial başlangıçta dostça ve eşit derecede yetenekli bir DVCS.

Başkaları var mı?, Bir DVCS kullanın!

Bir ekiple çalışmak için bir DVCS kullanmanın sayısız avantajı vardır, merkezi bir sistemin aksine en önemlisi, taahhüt yarışlarının olmamasıdır ve bunun nedeni, teknik olarak, her bireyin deposunun bir dal olması ve bu dallar sizin için birleştirilir ve fark etmezsiniz, yani bunun gibi bir sürüm geçmişine sahip olmak yerine, insanların çalışmalarını düz bir çizgide hunladığı:

resim açıklamasını buraya girin

Sonuç olarak, herkesin geçici olarak işlediği böyle bir şey elde edersiniz:

resim açıklamasını buraya girin

Her biri sadece kendi çalışmaları hakkında endişeleniyor (yani taahhüt etmek için yarışmıyor) ve sadece taahhüt etmek için bir sunucu bağlantısı hakkında endişelenmiyor.

İyi şanslar


1
+1 Çok güzel örnekler! Modern araçlarla karmaşık birleştirme ağaçlarında eksik acıyı vurgulamak için düzenlemelisiniz.
Apalala

5

Kısa olmak gerekirse, Subversion (SVN) ve Git'in en popüler göründüğü (böylece web'de çözüm bulmak en kolay) birçok alternatif var.

İkisi de farklı. SVN daha basittir, ancak Git başlangıç ​​için sunucunuz olmasını gerektirmez - sürümü yerel olarak kontrol edebilirsiniz.

Linux'unuz olduğunu ve Git'i kullanmaya başlamak istediğinizi varsayarsak:

  1. Git'i yükle
  2. Dizine gidin ve 'git init' komutunu yürütün
  3. Dosyaları nasıl ekleyeceğinizi, değişiklikleri nasıl inceleyeceğinizi, nasıl uygulayacağınızı öğrenin ...
  4. ... ve daha gelişmiş şeyler yapmak (günlükleri gözden geçirmek, değişiklikleri geri almak, dosyaları yok saymak, dallar oluşturmak, bunları birleştirmek, uzaktan kumandalar oluşturmak ve kullanmak, alt modülleri kullanmak, SVN desteği kullanmak vb.).

Umarım bu başlamanıza yardımcı olur.


1
SVN bir sunucu gerektirmez, ancak havuzun çalışandan farklı bir dizinde olmasını gerektirir. SVN ve CVS genellikle günlük işler için ağ bağlantısı gerektirmeyen ve işbirlikçi ve dağıtılmış yazılım geliştirme için merkezi bir depo gerektirmeyen GIT ve Mercurial gibi araçlar lehine onaylanmamıştır.
Apalala

Bunun localhost üzerinde SVN depo sunucusu oluşturmakla aynı olduğunu düşünmüyor musunuz? İhtiyacınız olan şey, merkezi havuzu yapılandırmak ve bakımını yapmaktır ve dosyalarınızı taşıdığınızda SVN deposunun hala erişilebilir olduğundan emin olun (dosyaları her farklı makineye taşıdığınızda tüm merkezi havuzu kopyalamayı düşünmeyin). Ayrıca Subversion'un kullanımdan kaldırıldığını düşünmüyorum (CVS'den bahsetmiyorum) - sadece merkezi ve bazı durumlarda merkezileştirmeyi uygulamak daha iyi bir fikir olurdu.
Tadeck

Apalala, bazı soru: Mercurial, kullanıcının belirli bir değişikliği yazdığı bilgileri nasıl işler? Git'te bunu değiştirebilir ve başka biri olarak değişiklik yapabilirsiniz, böylece biraz karışıklık yaratabilirsiniz (komiteyi göndericiden ayırmak için bir özellik vardır, ancak yeterince açık değildir). Mercurial bu dağıtılmış sürüm kontrolü ile ilgili sorunu çözdü mü?
Tadeck

2
@Tadeck Benim anlayışımda Mercurial ve GIT bu şekilde çalışmaz. Bunlarda, tek bir kişi, ister depoya, çekmeye, ya da yamalara göre olsun, bir depoya girenlerden sorumludur. Dağıtılmış depolarda, birinin itme ayrıcalıkları varsa, o zaman onlara tüm kalbinizle güvenirsiniz. Linus Torvalds bu konuşmada iyi açıklıyor: youtube.com/watch?v=4XpnKHJAok8
Apalala

@Tadeck SVN ile ilgili olarak, çok kullandım ve CVS (en azından düz ASCII depolarına sahip ve onları asla bozmayacak kadar olgun) üzerinde bir gelişme olmadığını düşündüm. Torvalds, daha önce bağladığım videoda bunu iyi açıklıyor. Çevrimdışı çalışamama ve birleştirilememesi eski SCM araçlarını kullanımdan kaldırır.
Apalala

2

Apalala ettiğim gibi, dışarı ödeme tavsiye hginit . Sürüm kontrolüne yeni başladığınız için ilk sayfayı atlayabilirsiniz. Bu size iyi bir giriş sunmalıdır, daha sonra belirli sorularınız varsa SO'ya gönderebilirsiniz .


0

Çoğunluk görüşüne karşı çıkacağım ve Subversion'u tavsiye edeceğim. Subversion kullanımı kolaydır ve bireylerin ve küçük ekiplerin ihtiyaç duyduğu her şeyi yapar. Bu olgun bir ürün, bu yüzden dışarıdaki her IDE bunun için iyi bir desteğe sahip. Evet, Git'in tüm özelliklerine sahip değil. (Daha önce Mercurial kullanmadım, bu yüzden bunun hakkında konuşmayacağım.) Ancak çoğu geliştiricinin aslında bu ek özelliklere ihtiyacı yoktur.

Birden fazla depo mu? Eminim bunlar için bazı meşru kullanımlar vardır, ama asla bunlarla karşılaşmadım.

Ağ erişimi olmadan yerel taahhütler yapabiliyor musunuz? Birkaç ayrık değişiklik yapıyorsanız ve depo sunucusuna erişemiyorsanız - ama dürüst olmak gerekirse, bu ne sıklıkta oluyor?

Git, dallanma ve birleşme ile başa çıkmayı kolaylaştırır. Ancak tek kişilik bir ekip için bu çok da önemli değil.

Linux çekirdeği ölçeğinde bir şey için - evet, Git'i kullanın. Geri kalanımız için Subversion yeterince iyi.


Downvoting. Git'in SVN'de olmayan özellikleri (hafif dallanma ve kolay birleştirme gibi), büyük projelerde olduğu kadar küçük projelerde de belki de çok önemlidir.
Marnen Laibow-Koser

1
@ MarnenLaibow-Koser Evet, o zamanlar benim fikrimdi, ama Git'i profesyonel olarak birkaç yıl kullandıktan sonra seninle aynı fikirde olmalıydım.
Mike Baranczak

Mükemmel! Asimile olacaksın. : D
Marnen Laibow-Koser

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.