Öğrencileri programlamak için hangi DVCS (git veya hg) daha kolaydır? [kapalı]


25

Biraz bağlam: Üniversitenin 3. yılındayım. Öğrenciler 4 kişilik takımlara ayrılmıştır. Hemen hemen herkes pencere altında çalışacaktır (Linux'ta benim gibi olanları hariç). Okul müfredatının bir parçası olarak, yakında gerçek bir müşteri için bir proje üzerinde çalışmaya başlayacağız, ancak ben ve başka bir ekip kodumuzu birbirimizle paylaşmak için hangi yolun en iyi olacağını merak ediyoruz.

3 yıldır yarı zamanlı çalışıyorum ve farklı projelerde git ve mercurial'ı kullanma konusunda çok fazla deneyimim oldu, bu yüzden bir sistem veya diğerini kullanırken herhangi bir sorun yaşamadım. Ancak takım arkadaşlarımın hiçbiri daha önce bir sürüm kontrol sistemi kullanmamıştı. SVN'i kullanmayı deneyen, ancak büyük problemleri olan ve başka bir şey denemeyi tercih eden başka bir ekip daha var, bu yüzden fikrimi istediler.

Düşüncelerim: mercurial + TortoiseHg'nin pencereler altında daha iyi bir entegrasyona sahip olduğunu duydum, ancak anonim kafa kavramının onları açıklarsam bile kafasını karıştırıp karıştırmayacağını merak ediyorum. Öte yandan, git dallarının bir aceminin anlaması için daha kolay olduğunu düşünüyorum (her programcı için ayrı çalışma alanı) ancak pencerelerin altında da çalışmaz.


2
git varsayılan olarak etkin bir güce sahiptir, ancak mercurial demek için konuştuğum herkesin öğrenmesi daha kolay ve ikisini de kullanan deneyimlerime dayanarak aynı fikirdeyim. Ve evet, ticari araçların Windows'a git git eşdeğerleri ile kurulması daha kolaydır. Bu, insanlara rehberlik etmeyi ve onları ilk hafta (veya daha fazla…) derslerine yönlendirmeyi beklediğini söyledi.
wkl

1
Başlangıçta bir DVCS kullanmak, paralel olarak çalışan birden fazla katılımcının birleştirdiği katkıları yönetmenin en basit yolu olabilir. Anonim kafaları kafa karıştırıcı bulursanız, kullanmayın (mercurial branşlara adlandırılmış dallar).
Stephen C. Steel

2
Bu blog gönderisine bağlantı verme zamanı geldi mi? Git bir Harrier Jump Jet .
sbi

1
Bütün "öğrenmesi çok zor" neden önemli olduğunu asla anlamadım. Tamam, bu yüzden nasıl taahhüt ve şube ve 10'a karşı gibi öğrenmek için 20 dakika sürer ... Büyük anlaşma?
alternatif

1
Onlardan birinin hginit.com adresinden geçtiklerini ve tepkilerine göre harekete geçmelerini izleyin .
chelmertz

Yanıtlar:


49

Hiç şüphesiz, Mercurial.

Bu elbette öznel, özneldir ve bir kişiden diğerine sarsılır, ancak genel görüş, Mercurial'ın, özellikle VCS'ye yeni gelen birisine veya eski nesil VCS'lerden birinden gelen birine, buruşturmanın daha kolay olduğu yönündedir.

Elindeki puanlar:

  1. Mercurial, Windows düşünülerek geliştirildi ; Git taşındı. Bana ne söylemeye çalıştığı önemli değil, Git hala Windows'ta ikinci sınıf bir vatandaş. İşler son birkaç yıl içinde kesin olarak düzeldi, ancak hala Windows'ta * nix kutusunda olduğu gibi bir şeyin neden çalıştığını veya çalışmadığını düşünüyor. TortoiseHg çok iyi çalışıyor ve Visual Studio uygulamalarının iş akışınızı bozmadan kullanımı daha da kolay.

  2. Birisi "Git senden daha güçlü ..." tartışmasına başlarsa, o zaman hepsini söylüyor. Kullanıcıların% 95'i Mercurial daha sezgisel görünüyor. Endeks eksikliğinden başlayarak, daha sezgisel seçeneklerine (seçenek anahtarları uyumludur), SHA1 karmaları yerine yerel sipariş numaralarına (SHA1 karelerinin kullanıcı dostu olduğunu düşünen kim ??!)

  3. Mercurial'ın dalları Git'inkinden daha az güçlü değil. Bazı farklılıkları tanımlayan gönderi. Önceki bir revizyona geri dönmek, "eski revizyonu güncelle" kadar basittir. Oradan başlayarak; Sadece yeni bir taahhüt yap. Adlandırılmış dallar da kullanmak istenirse kullanılabilir.

Şimdi, bunların hepsinin ayrıntı olduğunu biliyorum, öğrenilebilirler ve her şey olabilir, ama sorun şu ki ... bunlar eklenir. Ve sonunda, biri diğerinden daha basit ve sezgisel görünüyor. Ve sürüm kontrol sistemi zaman öğrenmeye harcayan bir şey olmamalıdır - programlama öğrenmek için daha sonra da programlamak için oradasınız; VCS bir araçtır.

Sadece not etmek için; Günlük Git ve Mercurial'ı kullanıyorum. İkisinden birini kullanmakta zorluk çekmeyin. Ama birileri benden bir öneri istediğinde, her zaman Mercurial'ı öneririm. Yine de, ilk elime geldiğinde, çok sezgisel hissettiğini hatırlayın. Tecrübelerime göre Mercurial Git'ten daha az WTF / dakika üretiyor.


4
+ "VCS bir araçtır". "Küçük şeyleri" bir faktör olarak görmemiştim, ama burada küçük problemleri eklediğinizde ve orada gerçekten sıkıntı haline gelebilecekleri doğru.
Gregory Eric Sanderson

8
"Sürüm kontrol sistemi zaman öğrenmeye harcayan bir şey olmamalı." Bu bir saçmalık. Her zaman aletlerini öğrenmek için zaman harcamalısın. Derleyicinizi öğrenmek için zaman harcıyorsunuz; ancak VCS, programınız için derleyiciniz kadar kritik bir araçtır.
JesperE

9
+1. Özellikle “pencerelerde ikinci sınıf vatandaş” argümanı bu durumda kesinlikle önemlidir.
tdammers

"WTF (s) / dakika" için +1 ( osnews.com/story/19266/WTFs_m ). Bu çocuklar skillz'i öğrenmeliler :-)
Ross Patterson

1
@Mark sadece terminoloji farkının bir sonucu ... Git'teki bir şube gerçekten sadece bir isim.
alternatif

10

TortoiseHg UI'nin Windows'ta harika bir deneyim olduğunu öğrendim. Git ile geçmişte deneme yaparken, bunun yerine komut satırına geçtim. Ortalama bir kullanıcı için, iyi bir kullanıcı arayüzü komut satırından çok daha kolay erişilebilir. Bu yüzden Mercurial'ı kullanmanızı öneririm. (Tezgâh penceresinde de güzel bir dal grafiği bulunur. Temel dallanma zorluklarından herhangi birini gidermelidir.)

Bir şeyleri UI perspektifinden anladıktan sonra komut satırına gitmek veya el ile işlem yapmak için komut satırına gidebilirler - ancak buna gerek kalmazlar.


Kendimi bir "konsol bağımlısı" olarak daha önce hiç Tortoise {Svn, Git, Hg} uygulamalarını kullanmamıştım, bu yüzden TortoiseHg'nin bir dal grafiği olduğunu bilmiyordum. Bunu kontrol edeceğim
Gregory Eric Sanderson

4

Üçüncü bir seçenekle ilgileniyorsanız, fosil öneririm . Küçük projelerde harika kod çalışmaları paylaşmak için geçici bir web sunucusu oluşturma yeteneğini buluyorum. Fosil sadece çalıştırılabilir niteliktedir, bu nedenle onu ve kaynağınızı bir başparmak sürücüsüne yerleştirip herhangi bir üniversite bilgisayarından kullanabilirsiniz.

fossil uiDiğer öğrencilerinizin sizinle eşitlenmesini istediğiniz yerde geçici bir web sunucusu başlatmak için kullanın . Aynı zamanda size bir bilet sistemi, wiki ve şubeleri değiştirmek ve etiketlemek için web arayüzü kullanımı kolay verir.

Sadece hızlı başlangıç ​​kılavuzunu ve / veya kitabı okuduklarından emin olun . Son olarak, web kullanıcı arayüzünden daha kullanıcı dostu bir arayüz sağlamak için winFossil adlı bir proje var .


Fosil hakkında iyi şeyler duydum, fakat ne yazık ki yeni bir DVCS'yi tanımak için fazla zamanım yok. Alıştığım bir şeyi kullanmayı tercih ederim (eğer mümkünse) çünkü zaten en yaygın tuzaklarda nasıl çalışılacağını biliyorum. Ancak öneri için teşekkürler, zamanım olduğu zaman kesinlikle inceleyeceğim.
Gregory Eric Sanderson

+ 1; Fosil Az bilinen ama işe ve bu kendi kendine yeten (DVSC + wiki + bilet + web sunucusu), böylece çok kolay olduğu pistte hatta github bütün gerçek bir alternatif.
Javier,

Ancak fosiller, öğrencilerin özgeçmişlerinde git ya da hg kadar iyi görünmeyecektir, zira çok az kişi bu konuda zorlanmaktadır.
Ian

Mercurial, hg servis işlevselliği de sağlamıştır. Elbette bir hata izci ve wiki özlüyor. Ama sonra da bitbucket.com var
Johannes Rudolph

3

Ekiplerin sürüm kontrolünde yeni olduğu ve birçoğunun Windows kullandığı göz önüne alındığında, mercurial git git hakkında tavsiye ederim.

Git ve mercurial tarafından kullanılan versiyon kontrolünün kavramsal modeli çok benzerdir, bu yüzden bir tanesine hakim olduğunuzda, diğerini seçmek kolaydır (ve benzer nedenlerden dolayı, bir havuzu birinden diğerine dönüştürmek oldukça kolaydır) . Bu, daha sonra fikrinizi değiştirirseniz önemli değil demektir.

Bence mercurial, yeni kullanıcıların öğrenmesi için daha kolay. Basit şeyleri kolaylaştırır, tehlikeli olanları zorlaştırır. Git tehlikeli işlemleri kolaylaştırır (yapılması kolay, doğru şekilde yapılması gerekmez!).

Winodows için TortoiseHg arayüzü de çok hoş ve mercurial kullanmak lehine başka bir argüman.


2

Benim kişisel tercihim git içindir.

Bununla birlikte, bazı insanlar pencereleri kullanacak ve üstün hginit dersi mevcut olduğundan, onlara mercurial öğretmenizi tavsiye ederim.


Hginit'ten bahsettiğim için +1. Yine de, Pro Git de oldukça iyi.
Tamás Szelei

@ TamásSzelei, Teşekkürler, Pro Git'i daha önce görmemiştim.
dan_waterworth

0

Birçok kişinin öne sürdüğü gibi, Mercurial aracılığıyla TortoiseHg girişine çok düşük bir engel vardır.

Windows'takiler için, iki yükleyici yerine tek bir yükleyici (ve öğrenmek istemedikleri bir sürü şey) ve THg kullanıcı arabirimi TortoiseGit + Msysgit'ten çok daha parlaktır .

Anonim kafalar

Onların isimsiz kafalarla karıştığını düşünüyorsanız, onların kullanımını teşvik etmeyin. Çoğu hgkitap dengeli bir yaklaşım sergiler ve hem topolojik hem de adlandırılmış dalları öğretir ve okuyucunun hangisinin kullanımına en uygun olduğunu belirlemesini sağlar.

Adlandırılmış dallar

Ben bir şey gerçekten de özledim gitolduğunu hg'ın adında dallar bu bir seçenek yüzden. gitonlar üzerinde çalışırken şubeler gayet iyi, ancak o işi başka bir şubeyle birleştirdikten sonra, bu değişikliklerin içeriğinin çoğunu kaybedersiniz.

In hgsize denilen bir şube oluşturabilir Jira#1234ve her zaman bununla ilişkili revizyonlar tüm bulmak mümkün düzeltme . Gelen gitşube içinde birleştirilir ve ref silindi kez, sen revizyon ağacının Topolojiden düzeltmenin parçası olan revizyonlar anlaması gerekir. Ref'i silmeseniz bile, hala o dalın son taahhüdünü biliyorsunuzdur, atalarından hangisi o taahhüt zincirinin bir parçası değildi.

Yer imleri

Alternatif olarak, adlandırılmış dalları kullanmak istemiyorsanız ancak gitanonim şubelerinizle bir stil iş akışı oluşturmak istiyorsanız, bunun yerine yer imlerini kullanabilirsiniz .

Bu, her iki dünyanın da en iyisi olabilir - bir gitiş akışını öğrenirler , ancak daha basit hgkomutları kullanırlar.

Dizin / Önbellek / Hazırlama alanı

Şahsen, öğrencilerin gitindeks / önbellek / evreleme alanlarıyla karıştırılmasının çok daha muhtemel olduğunu düşünüyorum hg. hgBu gelişmiş işlevselliği komut satırında, gither zaman kullanmak istediğinizi / ihtiyaç duyduğunuzu varsayırken , isteğe bağlı hale getirmeyi tercih ederim .

Ayrıca, hazırlık alanının test edilmemiş ve hatta derlenmemiş olanları teşvik ettiğini düşünüyorum. Çalıştığım yerlerin birçoğu bir kuralı yerine getirmediği sürece hiçbir taahhütte bulunmadığından , şu an istemediğim değişiklikleri rafa koymak / sabitlemek , birim sınamalarını yeniden yapmak ve bir sürüm yapmak istiyorum. Ben derlemeler biliyorum.

Daha sonra hg bisect veya git bisect kullanarak bir hatayı bulmaya geldiğinizde , sadece derlemeleri değil, tüm revizyonları test edebileceğinize kendinize teşekkür edeceksiniz.


Yaptıktan sonra git şubesini silmek zorunda değilsiniz; bu sadece özel. Ayrıca indeksin yanlış yorumlanması için -1 - daha büyük bir dizi işlemin kısmi adımlarını yerleştirmek için onu kötü işlemlerin yapılması için kullanmazsınız . Genelde bu, geçmişinizi temizlediğiniz zaman yeniden yapılanma sırasında olur.
alternatif

@ mathepic - Şube adlarını silmezseniz ve tüm yerel 'fix' dallarınızı uzaktan kumandaya doğru iterseniz, çok sayıda ref ile bitirdiniz, tıpkı eski dalların bolluğu ile bitirin. svn Gelen hgonlara bakmak eğer sadece onları görmek bu yüzden bu şube adları hep topolojik yereldir.
Mark Booth,

@ mathepic - -1 için, söylediklerimi yanlış yorumladığını düşünüyorum. Neden birisinin kasıtlı olarak kötü bir taahhütte bulunduğunu hayal edemiyorum, ancak git ile kazayla yapmak kolaydır. Eğer bu dosya unutursanız cuygulayan dosyasında değiştirilmiş bir arayüz ive yanlışlıkla taahhüt iolmadan cDeğişikliklerinizden birisi çeker sizi işlemekle etrafında var önce o zaman cbaşarısız olur onların derleme. Bunun yerine stash / compile / commit iş akışını kullanırsanız, bu hata basitçe kendi yapınızın ilk önce kırılacağı gibi olmayacak. Yine de cevabımı daha açık hale getirmeye çalıştım.
Mark Booth,
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.