Git นั้นไม่ดีไปกว่าการโค่นล้ม แต่ก็ไม่ได้เลวร้ายยิ่งกว่า มันแตกต่าง.
ความแตกต่างที่สำคัญคือมันมีการกระจายอำนาจ ลองนึกภาพคุณเป็นนักพัฒนาบนท้องถนนคุณพัฒนาบนแล็ปท็อปของคุณและคุณต้องการควบคุมแหล่งที่มาเพื่อให้คุณสามารถย้อนกลับไปได้ 3 ชั่วโมง
ด้วยการโค่นล้มคุณมีปัญหา: ที่เก็บ SVN อาจอยู่ในตำแหน่งที่คุณไม่สามารถเข้าถึงได้ (ใน บริษัท ของคุณและคุณไม่มีอินเทอร์เน็ตในขณะนี้) คุณไม่สามารถกระทำได้ หากคุณต้องการทำสำเนารหัสคุณต้องคัดลอก / วางอย่างแท้จริง
ด้วย Git คุณไม่มีปัญหานี้ สำเนาโลคัลของคุณเป็นที่เก็บและคุณสามารถคอมมิตและรับประโยชน์ทั้งหมดของการควบคุมซอร์ส เมื่อคุณได้รับการเชื่อมต่อไปยังแหล่งเก็บข้อมูลหลักคุณสามารถยืนยันได้
สิ่งนี้ดูดีในตอนแรก แต่โปรดคำนึงถึงความซับซ้อนที่เพิ่มขึ้นของวิธีการนี้
ดูเหมือนว่า Git จะเป็น "สิ่งใหม่เงางาม" มันไม่ได้เลวร้ายอะไร (มีเหตุผลที่ไลนัสเขียนไว้สำหรับการพัฒนาเคอร์เนลลินุกซ์) แต่ฉันรู้สึกว่าหลาย ๆ คนกระโดดขึ้นรถไฟ "Distributed Source Control" เพียงเพราะมันใหม่และเขียนโดย Linus Torvalds โดยที่จริงแล้ว รู้ว่าทำไม / ถ้ามันจะดีกว่า
การโค่นล้มมีปัญหา แต่ Git, Mercurial, CVS, TFS หรืออะไรก็ตาม
แก้ไข:ดังนั้นคำตอบนี้มีอายุหนึ่งปีและยังสร้าง upvotes จำนวนมากดังนั้นฉันคิดว่าฉันจะเพิ่มคำอธิบายเพิ่มเติม ในปีที่แล้วนับตั้งแต่เขียนสิ่งนี้ Git ได้รับแรงผลักดันและการสนับสนุนเป็นจำนวนมากโดยเฉพาะอย่างยิ่งเมื่อไซต์ต่างๆอย่าง GitHub ถูกถอดออกจริงๆ ฉันใช้ Git และ Subversion ทุกวันนี้และฉันต้องการแบ่งปันข้อมูลเชิงลึกส่วนตัว
ก่อนอื่น Git อาจสร้างความสับสนในตอนแรกเมื่อมีการกระจายอำนาจการทำงาน รีโมตคืออะไร และวิธีการตั้งค่าพื้นที่เก็บข้อมูลเริ่มต้นอย่างถูกต้อง? เป็นคำถามสองข้อที่เกิดขึ้นที่จุดเริ่มต้นโดยเฉพาะอย่างยิ่งเมื่อเทียบกับ "svnadmin create" แบบง่าย ๆ ของ SVN, "git init" ของ Git สามารถใช้พารามิเตอร์ได้ - การแบ่งปันและ - แชร์ซึ่งดูเหมือนจะเป็นวิธีที่ "เหมาะสม" ในการตั้งค่าส่วนกลาง กรุ มีเหตุผลสำหรับสิ่งนี้ แต่เพิ่มความซับซ้อน เอกสารของคำสั่ง "checkout" นั้นสร้างความสับสนให้กับผู้คนที่เปลี่ยนไปมาก - วิธีที่ "เหมาะสม" ดูเหมือนจะเป็น "git clone" ในขณะที่ "checkout git" ดูเหมือนจะเปลี่ยนสาขา
Git ส่องแสงเมื่อคุณกระจายอำนาจ ฉันมีเซิร์ฟเวอร์ที่บ้านและแล็ปท็อปบนท้องถนนและ SVN ก็ทำงานได้ไม่ดีที่นี่ ด้วย SVN ฉันไม่สามารถควบคุมแหล่งข้อมูลท้องถิ่นได้หากฉันไม่ได้เชื่อมต่อกับที่เก็บข้อมูล (ใช่ฉันรู้เกี่ยวกับ SVK หรือวิธีคัดลอก repo) ด้วย Git นั่นคือโหมดเริ่มต้น มันเป็นคำสั่งพิเศษแม้ว่า (คอมไพล์คอมมิทกระทำการโลคัลในขณะที่ git push origin origin พุชสาขาหลักไปยังรีโมตชื่อ "origin")
ดังที่ได้กล่าวไว้ข้างต้น: Git เพิ่มความซับซ้อน สองวิธีในการสร้างที่เก็บข้อมูล, เช็กเอาต์กับโคลน, คอมมิชชันและพุช ... คุณต้องรู้ว่าคำสั่งใดที่ทำงานในพื้นที่และทำงานกับ "เซิร์ฟเวอร์" (ฉันสมมติว่าคนส่วนใหญ่ยังคงเหมือนศูนย์กลาง "master-repository") )
นอกจากนี้เครื่องมือยังไม่เพียงพออย่างน้อยใน Windows ใช่มี Visual Studio AddIn แต่ฉันยังใช้ git bash กับ msysgit
SVN มีข้อได้เปรียบที่ง่ายต่อการเรียนรู้มาก: มีพื้นที่เก็บข้อมูลของคุณการเปลี่ยนแปลงทั้งหมดที่มีต่อหากคุณรู้วิธีสร้างคอมมิทและชำระเงินและคุณพร้อมที่จะไป บน.
Git มีข้อได้เปรียบที่ว่าจะเหมาะกว่าหากนักพัฒนาบางคนไม่ได้เชื่อมต่อกับที่เก็บข้อมูลหลักเสมอไป นอกจากนี้มันเร็วกว่า SVN มาก และจากสิ่งที่ฉันได้ยินการสนับสนุนจากการรวมสาขาและการรวมกันนั้นดีกว่ามาก (ซึ่งคาดว่าจะเป็นเพราะนี่คือเหตุผลหลักที่เขียน)
สิ่งนี้อธิบายได้ด้วยว่าทำไมมันจึงได้รับความนิยมอย่างมากบนอินเทอร์เน็ตเนื่องจาก Git เหมาะอย่างยิ่งสำหรับโครงการโอเพ่นซอร์ส: เพียงแค่แยกมันกระทำการเปลี่ยนแปลงของคุณกับทางแยกของคุณแล้วขอให้ผู้ดูแลโครงการดั้งเดิมดึงการเปลี่ยนแปลงของคุณ ด้วย Git นี่ใช้งานได้ ลองใช้ Github จริง ๆ มันเป็นเวทย์มนตร์
สิ่งที่ฉันเห็นก็คือ Git-SVN Bridges: ที่เก็บส่วนกลางเป็น repo ที่ถูกโค่นล้ม แต่นักพัฒนาทำงานกับ Git และบริดจ์จากนั้นจึงผลักการเปลี่ยนแปลงของพวกเขาไปยัง SVN
แต่ถึงแม้จะมีการเพิ่มความยาวนี้ฉันยังคงยืนหยัดอยู่กับข้อความหลักของฉัน: Git ไม่ดีขึ้นหรือแย่ลงมันแตกต่างกัน หากคุณมีความต้องการ "การควบคุมแหล่งออฟไลน์" และความเต็มใจที่จะใช้เวลาเรียนรู้เพิ่มเติมมันยอดเยี่ยมมาก แต่ถ้าคุณมีการควบคุมแหล่งที่มาจากศูนย์กลางอย่างเคร่งครัดและ / หรือกำลังดิ้นรนที่จะแนะนำการควบคุมแหล่งที่มาตั้งแต่แรกเพราะเพื่อนร่วมงานของคุณไม่สนใจดังนั้นความเรียบง่ายและเครื่องมือที่ยอดเยี่ยม (อย่างน้อยใน Windows) ของ SVN