DVCS (git หรือ hg) ใดที่เหมาะสำหรับการเขียนโปรแกรมนักเรียน [ปิด]


25

บริบท: ฉันอยู่ในชั้นปีที่ 3 ของวิทยาลัย นักเรียนแบ่งออกเป็นกลุ่มละ 4 คนเกือบทุกคนจะทำงานภายใต้หน้าต่าง (ยกเว้นบางคนที่อยู่บน linux) เป็นส่วนหนึ่งของหลักสูตรของโรงเรียนเราจะเริ่มต้นทำงานในโครงการสำหรับลูกค้าจริง แต่ฉันและทีมอื่นกำลังสงสัยว่าวิธีใดที่ดีที่สุดสำหรับการแบ่งปันรหัสของเรากับแต่ละอื่น ๆ

ฉันทำงานพาร์ทไทม์เป็นเวลา 3 ปีและมีประสบการณ์มากมายในการใช้ทั้งคอมไพล์และ Mercurial ในโปรเจคที่แตกต่างกันดังนั้นฉันจึงไม่มีปัญหาในการใช้ระบบใดระบบหนึ่งหรือระบบอื่น อย่างไรก็ตามเพื่อนร่วมทีมของฉันไม่เคยใช้ระบบควบคุมเวอร์ชันมาก่อน นอกจากนี้ยังมีทีมอื่นที่พยายามใช้ SVN แต่มีปัญหาใหญ่และอยากลองใช้อย่างอื่นดังนั้นพวกเขาจึงถามความคิดเห็นของฉัน

ความคิดของฉัน: ฉันได้ยินมาว่า Mercurial + TortoiseHg มีการรวมที่ดีขึ้นภายใต้ windows แต่ฉันสงสัยว่าแนวคิดของหัวหน้าที่ไม่ระบุชื่ออาจทำให้พวกเขาสับสนแม้ว่าฉันจะอธิบาย ในทางกลับกันฉันพบว่ากิ่ง git นั้นง่ายกว่าสำหรับผู้เริ่มต้นที่จะเข้าใจ (แยกการทำงานที่ชัดเจนสำหรับโปรแกรมเมอร์แต่ละคน) แต่ไม่สามารถทำงานได้ดีในหน้าต่าง


2
git มีการเปิดใช้งานพลังงานเป็นจำนวนมากโดยค่าเริ่มต้น แต่ทุกคนที่ฉันพูดจะบอกว่า Mercurial นั้นเรียนรู้ได้ง่ายกว่าและฉันก็เห็นด้วยที่จะเห็นด้วยกับประสบการณ์ของฉันที่ใช้ทั้งสองอย่าง และใช่แล้วเครื่องมือ Mercurial นั้นง่ายต่อการติดตั้งใน Windows เทียบกับระบบคอมไพล์ของพวกเขา ที่กล่าวว่าคาดว่าจะแนะนำผู้คนและชี้ไปที่แบบฝึกหัดสำหรับสัปดาห์แรก (หรือมากกว่า ... )
wkl

1
การใช้ DVCS จากการเริ่มต้นน่าจะเป็นวิธีที่ง่ายที่สุดในการจัดการการรวมการมีส่วนร่วมจากผู้มีส่วนร่วมหลายคนทำงานในแบบคู่ขนาน หากคุณพบว่ามีหัวหน้าที่ไม่ระบุชื่อเกิดความสับสนอย่าใช้มัน (Mercurial รองรับสาขาที่มีชื่อ)
สตีเฟ่นซี. เหล็ก

2
เวลาอีกครั้งเพื่อเชื่อมโยงไปยังโพสต์บล็อกนี้? Git เป็นกระต่ายกระโดดเจ็ต
sbi

1
ฉันไม่เคยเข้าใจว่าทำไมเรื่อง "ยากเกินกว่าจะเรียนรู้" ทั้งหมด ตกลงดังนั้นใช้เวลา 20 นาทีในการเรียนรู้วิธีผูกมัดและแยกสาขาและตรงข้ามกับ 10 ... เรื่องใหญ่เหรอ?
ทางเลือก

1
ดู (หนึ่งในนั้น) ผ่านhginit.comและดำเนินการตามปฏิกิริยาของพวกเขา
chelmertz

คำตอบ:


49

Mercurial ไม่ต้องสงสัยเลย

แน่นอนว่าเป็นเรื่องส่วนตัวและ vaires จากบุคคลหนึ่งไปสู่อีกคนหนึ่ง แต่ความเห็นโดยทั่วไปคือ Mercurial นั้นง่ายต่อการติดตามโดยเฉพาะกับคนที่เพิ่งรู้จักกับ VCS หรือคนที่มาจาก VCS รุ่นเก่า

คะแนนในมือ:

  1. Mercurial ได้รับการพัฒนากับ Windows ในใจ ; Git ถูกย้ายแล้ว ไม่ว่าใครจะพยายามบอกฉัน Git ยังคงเป็นพลเมืองอันดับสองใน Windows สิ่งต่าง ๆ ได้รับการปรับปรุงอย่างแน่นอนในช่วงไม่กี่ปีที่ผ่านมา แต่คุณยังคงเห็นว่าการทะเลาะวิวาทว่าทำไมบางสิ่งบางอย่างทำงานได้ / หรือไม่ทำงานบน Windows เหมือนที่ทำในกล่อง * ระวัง TortoiseHg ทำงานได้เป็นอย่างดีและการใช้งาน Visual Studio นั้นใช้งานง่ายยิ่งขึ้นโดยไม่ทำให้เวิร์กโฟลว์ของคุณเสียหาย

  2. หากมีคนเริ่มการสนทนา "Git นั้นมีประสิทธิภาพยิ่งขึ้นหลังจากที่คุณ ... " แสดงว่าเขาพูดได้หมด สำหรับผู้ใช้ 95% Mercurial ดูเหมือนจะเข้าใจง่ายกว่า เริ่มจากการขาดดัชนีไปสู่ตัวเลือกที่ใช้งานง่ายขึ้น (สวิตช์ตัวเลือกมีความสอดคล้องกัน) ไปยังหมายเลขท้องถิ่นสำหรับคอมมิทแทนที่จะเป็นแฮช SHA1 (ใครเคยคิดว่าแฮช SHA1 เป็นมิตรกับผู้ใช้ ??!)

  3. กิ่งก้านของ Mercurial นั้นมีพลังไม่น้อยไปกว่า Git โพสต์อธิบายถึงความแตกต่างบางอย่าง การย้อนกลับไปยังการแก้ไขก่อนหน้านี้ทำได้ง่ายเพียงแค่ "อัปเดตการแก้ไขเก่า" เริ่มจากตรงนั้น เพิ่งทำคอมมิชชันใหม่ สาขาที่มีชื่อยังมีให้บริการหากต้องการใช้

ตอนนี้ฉันรู้ว่าทั้งหมดนี้เป็นรายละเอียดและพวกเขาสามารถเรียนรู้และทุกอย่างได้ แต่สิ่งนี้คือ ... สิ่งเหล่านี้เพิ่มขึ้น และในท้ายที่สุดดูเหมือนว่าจะง่ายและใช้งานง่ายกว่าที่อื่น และระบบควบคุมเวอร์ชันไม่ควรเป็นสิ่งที่ใช้เวลาในการเรียนรู้ - คุณอยู่ที่นั่นเพื่อเรียนรู้การเขียนโปรแกรมจากนั้นจึงเขียนโปรแกรม VCS เป็นเครื่องมือ

เพียงเพื่อทราบ; ฉันใช้ Git และ Mercurial ทุกวัน อย่ามีปัญหาในการใช้งานอย่างใดอย่างหนึ่ง แต่เมื่อมีคนถามฉันเพื่อขอคำแนะนำฉันมักจะแนะนำ Mercurial ยังจำได้ว่าเมื่อมันเข้ามาในมือของฉันครั้งแรกมันรู้สึกง่ายมาก จากประสบการณ์ของฉัน Mercurial สร้าง WTF / นาทีน้อยกว่า Git


4
+ สำหรับ "VCS เป็นเครื่องมือ" ฉันไม่ได้พิจารณาว่า "สิ่งเล็ก ๆ น้อย ๆ " เป็นปัจจัย แต่มันเป็นความจริงที่ว่าเมื่อคุณเพิ่มปัญหาเล็ก ๆ ที่นี่และที่นั่นพวกเขาสามารถกลายเป็นความรำคาญที่แท้จริง
Gregory Eric Sanderson

8
"ระบบควบคุมเวอร์ชันไม่ควรเป็นสิ่งที่เราใช้เวลาในการเรียนรู้" นี่เป็นภาระของอึ คุณควรใช้เวลาในการเรียนรู้เครื่องมือของคุณ คุณใช้เวลาในการเรียนรู้คอมไพเลอร์ของคุณ แต่ VCS นั้นเป็นเครื่องมือสำคัญสำหรับการเขียนโปรแกรมของคุณเหมือนกับคอมไพเลอร์ของคุณ
JesperE

9
+1 โดยเฉพาะอย่างยิ่งอาร์กิวเมนต์ 'พลเมืองชั้นสองบน windows' มีความสำคัญอย่างยิ่งในสถานการณ์นี้
tdammers

+1 สำหรับ "WTF (s) / นาที" ( osnews.com/story/19266/WTFs_m ) เด็กเหล่านี้ต้องเรียนรู้ skillz :-)
Ross Patterson

1
@ มาร์คนั่นเป็นผลมาจากความแตกต่างของคำศัพท์ ... สาขาใน Git เป็นเพียงชื่อ
ทางเลือก

10

ฉันพบว่า TortoiseHg UI เป็นประสบการณ์ที่ยอดเยี่ยมสำหรับ Windows เมื่อทำการทดลองกับ Git ในอดีตฉันก็ไปที่บรรทัดคำสั่งแทน สำหรับผู้ใช้เฉลี่ยของคุณ UI ที่ดีนั้นเข้าถึงได้ง่ายกว่าบรรทัดคำสั่ง ดังนั้นฉันขอแนะนำให้ใช้ Mercurial (มันมีกราฟสาขาที่ดีในหน้าต่าง workbench ด้วยเช่นกันมันควรจะอธิบายปัญหาพื้นฐานของการแตกแขนงใด ๆ )

เมื่อพวกเขาเข้าใจสิ่งต่าง ๆ จากมุมมองของ UI พวกเขาอาจไปที่บรรทัดคำสั่งเพื่อเขียนสคริปต์หรือดำเนินการด้วยตนเอง - แต่พวกเขาไม่จำเป็นต้องทำ


การเป็น "คอนโซลขี้ยา" ด้วยตัวเองฉันไม่เคยใช้แอป Tortoise {Svn, Git, Hg} มาก่อนดังนั้นฉันจึงไม่รู้ TortoiseHg มีกราฟสาขา ฉันจะต้องไปตรวจสอบว่า
Gregory Eric Sanderson

4

หากคุณกำลังสนใจในตัวเลือกที่สามผมขอแนะนำฟอสซิล ฉันพบความสามารถในการสร้างเว็บเซิร์ฟเวอร์ชั่วคราวเพื่อแชร์รหัสใช้งานได้ดีในโครงการขนาดเล็ก ฟอสซิลเป็นเพียงไฟล์ปฏิบัติการดังนั้นคุณสามารถใส่มันและแหล่งที่มาของคุณลงในไดรฟ์หัวแม่มือและใช้มันจากคอมพิวเตอร์ทุกเครื่องในมหาวิทยาลัย

ใช้fossil uiเพื่อเริ่มเว็บเซิร์ฟเวอร์ชั่วคราวทุกที่ที่คุณต้องการให้เพื่อนนักเรียนซิงค์กับคุณ นอกจากนี้ยังให้ระบบตั๋ววิกิและเว็บอินเตอร์เฟสที่ใช้งานง่ายสำหรับการเปลี่ยนสาขาและการติดแท็ก

เพียงให้แน่ใจว่าพวกเขาอ่านคู่มือการเริ่มด่วนและ / หรือหนังสือ ในที่สุดมีโครงการที่เรียกว่าwinFossilเพื่อให้ส่วนต่อประสานกับผู้ใช้ที่เป็นมิตรกว่าเว็บ ui


ฉันได้ยินสิ่งดีๆเกี่ยวกับฟอสซิล แต่น่าเสียดายที่ฉันไม่มีเวลามากพอที่จะทำความคุ้นเคยกับ DVCS ใหม่ ฉันชอบที่จะใช้สิ่งที่ฉันคุ้นเคย (ถ้าเป็นไปได้) เนื่องจากฉันรู้วิธีรับมือกับข้อผิดพลาดที่พบบ่อยที่สุดแล้ว แต่ขอบคุณสำหรับคำแนะนำฉันจะตรวจสอบมันอย่างแน่นอนเมื่อฉันมีเวลา
Gregory Eric Sanderson

+1; ฟอสซิลเป็นที่รู้จักกันน้อย แต่มันก็ง่ายที่จะทำงานและมีอยู่ในตัวเอง (dvsc + wiki + tickets + webserver) ว่ามันเป็นทางเลือกที่แท้จริงของแทร็กทั้งหมดหรือแม้กระทั่ง gitub
Javier

แต่ฟอสซิลจะไม่ดูดีสำหรับ CV ของนักเรียนในฐานะคอมไพล์หรือ hg เนื่องจากมีกวีน้อยมากที่เข้าใจยาก
เอียน

Mercurial ได้สร้างฟังก์ชันการทำงาน hg สำหรับใช้งานด้วยเช่นกัน มันพลาดการติดตามบั๊กและวิกิแน่นอน แต่แล้วยังมี bitbucket.com ด้วย
Johannes Rudolph

3

เนื่องจากทีมนั้นใหม่ต่อการควบคุมเวอร์ชันและหลายคนใช้ Windows ฉันขอแนะนำ Mercurial ให้กับ git

รูปแบบแนวคิดของการควบคุมเวอร์ชันที่ใช้โดย git และ mercurial นั้นคล้ายกันมากดังนั้นเมื่อคุณเชี่ยวชาญแล้วคุณก็สามารถหยิบอีกอันได้ง่าย (และด้วยเหตุผลที่คล้ายกันมันค่อนข้างง่ายในการแปลงที่เก็บจากที่หนึ่งไปอีกที่หนึ่ง) . นี่หมายความว่าไม่ใช่เรื่องใหญ่หากคุณเปลี่ยนใจในภายหลัง

ในความคิดของฉัน Mercurial นั้นง่ายสำหรับผู้ใช้ใหม่ในการเรียนรู้ มันทำให้สิ่งง่าย ๆ ง่าย ๆ และเป็นอันตรายอย่างหนัก Git ทำให้การดำเนินงานที่เป็นอันตรายนั้นง่าย (ทำได้ง่ายไม่จำเป็นต้องทำง่าย ๆ !)

ส่วนต่อประสาน TortoiseHg สำหรับ Winodows ก็ดีเหมือนกันและก็เป็นอีกเหตุผลหนึ่งที่ใช้ Mercurial


2

การตั้งค่าส่วนตัวของฉันสำหรับคอมไพล์

อย่างไรก็ตามเนื่องจากบางคนจะใช้ windows และมีการสอนhginit ที่ยอดเยี่ยมอยู่แล้วฉันขอแนะนำให้สอนพวกเขาด้วยความเมตตา


+1 สำหรับการกล่าวถึง hginit ถึงแม้ว่าPro Gitก็ค่อนข้างดีเช่นกัน
Tamás Szelei

@ TamásSzeleiขอบคุณฉันไม่เคยเห็น Pro Git มาก่อน
dan_waterworth

0

ดังที่หลายคนแนะนำMercurialผ่านTortoiseHgมีอุปสรรคในการเข้าน้อย

สำหรับผู้ใช้ Windows ก็ติดตั้งเดียวมากกว่าสองติดตั้ง (และโหลดทั้งของสิ่งที่พวกเขาอาจจะไม่ต้องการที่จะเรียนรู้เกี่ยวกับ) และอินเตอร์เฟซผู้ใช้ THG ขัดมากขึ้นกว่าTortoiseGit + msysgit

หัวนิรนาม

หากคุณคิดว่าหัวที่ไม่ระบุชื่อจะสับสนพวกเขาก็ไม่ควรสนับสนุนให้ใช้ hgหนังสือส่วนใหญ่ใช้วิธีการที่สมดุลและสอนทั้งสาขาโทโพโลยีและชื่อและให้ผู้อ่านพิจารณาว่าหนังสือเล่มไหนเหมาะสมที่สุดสำหรับการใช้งาน

กิ่งไม้ที่มีชื่อ

สิ่งหนึ่งที่ผมจริงๆพลาดในการgitเป็นhg's ชื่อสาขาเพื่อให้เป็นทางเลือกหนึ่ง gitสาขานั้นใช้ได้ในขณะที่คุณกำลังทำงานอยู่ แต่เมื่อคุณรวมงานนั้นเข้ากับสาขาอื่นคุณจะสูญเสียบริบทส่วนใหญ่สำหรับการเปลี่ยนแปลงเหล่านั้น

ในhgคุณสามารถสร้างสาขาที่เรียกว่าJira#1234และสามารถค้นหาการแก้ไขทั้งหมดที่เกี่ยวข้องกับการแก้ไขนั้นได้เสมอ ในgitเมื่อสาขาของคุณถูกรวมเข้ากับการอ้างอิงที่ถูกลบคุณจะต้องอนุมานว่าการแก้ไขใดเป็นส่วนหนึ่งของการแก้ไขจากโทโพโลยีของทรีการแก้ไข แม้ว่าคุณจะไม่ลบการอ้างอิง แต่คุณก็รู้ได้ว่าการกระทำครั้งสุดท้ายในสาขานั้นไม่ใช่บรรพบุรุษของมันที่เป็นส่วนหนึ่งของการกระทำนั้น

ที่คั่น

หรือหากคุณไม่ต้องการใช้สาขาที่ตั้งชื่อ แต่ต้องการgitเวิร์กโฟลว์สไตล์กับสาขาที่ไม่ระบุชื่อของคุณคุณสามารถใช้บุ๊กมาร์กแทน

นี่อาจเป็นสิ่งที่ดีที่สุดของทั้งสองโลก - พวกเขาได้เรียนรู้gitขั้นตอนการทำงาน แต่ใช้hgคำสั่งที่ง่ายกว่า

ดัชนี / แคช / พื้นที่การจัดเตรียม

โดยส่วนตัวแล้วฉันคิดว่านักเรียนมีแนวโน้มที่จะสับสนกับgitดัชนี / แคช / พื้นที่การแสดงละครมากกว่าโดยhgหัวที่ไม่ระบุชื่อ ฉันชอบที่hgจะให้ฟังก์ชันการทำงานขั้นสูงนี้เป็นตัวเลือกในบรรทัดคำสั่งซึ่งgitจะถือว่าคุณต้องการ / จำเป็นต้องใช้เสมอ

ฉันยังคิดว่าพื้นที่การแสดงละครส่งเสริมให้เกิดการผูกมัดซึ่งยังไม่ได้ทดสอบหรือเรียบเรียง เนื่องจากสถานที่หลายแห่งที่ฉันเคยทำงานไม่ได้ทำผิดกฎถ้าไม่ได้รวบรวมกฎฉันจะค่อนข้างเปลี่ยนชั้น / ซ่อนการเปลี่ยนแปลงที่ฉันไม่ต้องการในตอนนี้ทำการทดสอบหน่วยอีกครั้งและยอมรับรุ่นที่ ฉันรู้ว่ารวบรวม

เมื่อคุณมาติดตามข้อผิดพลาดโดยใช้hg bisectหรือgit bisectคุณจะต้องขอบคุณตัวเองที่คุณสามารถทดสอบการแก้ไขทั้งหมดได้ไม่ใช่แค่การรวบรวม


คุณไม่จำเป็นต้องลบสาขา git หลังจากคุณทำเสร็จแล้ว มันเป็นแบบกำหนดเองเท่านั้น นอกจากนี้ -1 ตีความความหมายของดัชนี - คุณไม่ได้ใช้มันสำหรับการแสดงละครการกระทำที่ไม่ดีคุณจะใช้มันสำหรับการแสดงละครขั้นตอนบางส่วนของชุดขนาดใหญ่ของกระทำ โดยปกติจะเกิดขึ้นในระหว่างการรีบูตเมื่อคุณล้างประวัติของคุณ
ทางเลือก

@mathepic - หากคุณไม่ลบชื่อสาขาและผลักดัน 'แก้ไข' สาขาในพื้นที่ของคุณทั้งหมดให้ห่างไกลคุณจะต้องจบลงด้วยการอ้างอิงจำนวนมากเช่นเดียวกับที่คุณจบด้วยสาขาเก่า ๆ มากมาย ใน svn ในhgชื่อสาขาเหล่านี้มักมีโลคอลโลคอลอยู่เสมอดังนั้นคุณจะเห็นได้เฉพาะเมื่อคุณค้นหา
Mark Booth

@mathepic - สำหรับ -1 ของคุณฉันคิดว่าคุณตีความสิ่งที่ฉันพูดผิดไป ฉันไม่สามารถจินตนาการได้ว่าทำไมทุกคนจะตั้งใจทำผิด แต่ด้วยความสามารถในการทำมันโดยง่ายโดยไม่ตั้งใจ หากคุณลืมว่าไฟล์นั้นcใช้ส่วนต่อประสานที่ถูกแก้ไขในไฟล์iและตั้งใจกระทำiโดยไม่ได้ตั้งใจcถ้ามีคนดึงการเปลี่ยนแปลงของคุณก่อนที่คุณจะไปถึงเพื่อcคอมไพล์คอมไพล์ของพวกเขาจะล้มเหลว หากคุณใช้ stash / compile / commit เวิร์กโฟลว์แทนความผิดพลาดนี้จะไม่เกิดขึ้นเพราะงานสร้างของคุณจะแตกก่อน ฉันพยายามทำให้คำตอบชัดเจนขึ้น
Mark Booth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.