หมายเหตุ: โปรดดู"แก้ไข"สำหรับคำตอบของคำถามปัจจุบัน
ก่อนอื่นอ่านการโค่นล้ม Re-educationโดย Joel Spolsky ฉันคิดว่าคำถามส่วนใหญ่ของคุณจะได้รับคำตอบที่นั่น
ข้อเสนอแนะอื่น Linus Torvalds' พูดคุยเกี่ยวกับ Git: http://www.youtube.com/watch?v=4XpnKHJAok8 อีกคนหนึ่งอาจตอบคำถามส่วนใหญ่ของคุณและเป็นคำถามที่ให้ความบันเทิง
BTW สิ่งที่ฉันคิดว่าค่อนข้างตลก: แม้แต่ Brian Fitzpatrick และ Ben Collins-Sussman ผู้สร้างการโค่นล้มดั้งเดิมสองคนกล่าวใน Google Talk ครั้งเดียวว่า "ขอโทษที่" หมายถึงการโค่นล้มด้อยกว่า Mercurial (และ DVCSs โดยทั่วไป)
ตอนนี้ IMO และโดยทั่วไปพลวัตของทีมพัฒนาขึ้นอย่างเป็นธรรมชาติด้วย DVCS ใด ๆ และผลประโยชน์ที่โดดเด่นคือคุณสามารถส่งแบบออฟไลน์ได้เพราะมันหมายถึงสิ่งต่อไปนี้:
- คุณไม่ได้พึ่งพาเซิร์ฟเวอร์และการเชื่อมต่อซึ่งหมายถึงเวลาที่เร็วกว่า
- ไม่เป็นทาสของสถานที่ที่คุณสามารถเข้าถึงอินเทอร์เน็ต (หรือ VPN) เพียงเพื่อให้สามารถกระทำการ
- ทุกคนมีการสำรองข้อมูลทุกอย่าง (ไฟล์ประวัติ) ไม่ใช่แค่เซิร์ฟเวอร์ ความหมายทุกคนสามารถเป็นเซิร์ฟเวอร์
- คุณสามารถกระทำจูงใจหากคุณต้องการโดยไม่ต้อง messing รหัสอื่น ความมุ่งมั่นเป็นของท้องถิ่น คุณไม่ได้เหยียบนิ้วเท้าของกันและกันขณะที่กระทำ คุณจะไม่ทำลายงานสร้างหรือสภาพแวดล้อมของผู้อื่นโดยการทำ
- ผู้ที่ไม่มี "กระทำการเข้าถึง" สามารถกระทำ (เนื่องจากการยอมรับใน DVCS ไม่ได้หมายความถึงการอัปโหลดรหัส) การลดอุปสรรคสำหรับการมีส่วนร่วมคุณสามารถตัดสินใจที่จะดึงการเปลี่ยนแปลงของพวกเขาหรือไม่ในฐานะผู้รวม
- มันสามารถเสริมกำลังการสื่อสารตามธรรมชาติได้เพราะ DVCS ทำให้สิ่งนี้สำคัญ ... ในการโค่นล้มสิ่งที่คุณมี แต่เป็นการแข่งขันซึ่งบังคับให้สื่อสาร แต่โดยการขัดขวางการทำงานของคุณ
- ผู้ร่วมให้ข้อมูลสามารถรวมทีมและจัดการการผสานของตัวเองซึ่งหมายถึงการทำงานที่น้อยลงสำหรับผู้รวมระบบในท้ายที่สุด
- ผู้มีส่วนร่วมสามารถมีสาขาของตัวเองโดยไม่กระทบต่อผู้อื่น (แต่สามารถแบ่งปันได้หากจำเป็น)
เกี่ยวกับคะแนนของคุณ:
- การรวมนรกไม่มีอยู่ใน DVCSland; ไม่จำเป็นต้องได้รับการจัดการ ดูจุดถัดไป
- ใน DVCS ทุกคนหมายถึง "สาขา" ซึ่งหมายถึงมีการรวมการเปลี่ยนแปลงทุกครั้งที่มีการดึง กิ่งไม้ที่มีชื่อเป็นอีกสิ่งหนึ่ง
- คุณสามารถใช้การรวมอย่างต่อเนื่องหากคุณต้องการ ไม่จำเป็นต้องมี IMHO ทำไมต้องเพิ่มความซับซ้อนให้ทำการทดสอบเป็นส่วนหนึ่งของวัฒนธรรม / นโยบายของคุณ
- Mercurial นั้นเร็วกว่าในบางสิ่ง git นั้นเร็วกว่าในบางสิ่ง ไม่ได้ขึ้นอยู่กับ DVCS โดยทั่วไป แต่สำหรับการใช้งานเฉพาะ AFAIK
- ทุกคนจะมีโครงการเต็มรูปแบบไม่เพียง แต่คุณเท่านั้น สิ่งที่แจกจ่ายเกี่ยวข้องกับการที่คุณสามารถคอมมิท / อัพเดตโลคัลการแชร์ / การรับจากภายนอกคอมพิวเตอร์ของคุณเรียกว่าการกด / การดึง
- อ่านการโค่นล้มการศึกษาอีกครั้ง DVCS นั้นง่ายกว่าและเป็นธรรมชาติมากกว่า แต่ก็แตกต่างกันอย่าพยายามคิดว่า cvs / svn === ฐานของเวอร์ชันทั้งหมด
ฉันบริจาคเอกสารบางส่วนให้กับโครงการ Joomla เพื่อช่วยเทศนาการโยกย้ายไปยัง DVCS และที่นี่ฉันทำไดอะแกรมเพื่อแสดงให้เห็นถึงการรวมศูนย์กับการกระจาย
ส่วนกลาง
เผยแพร่ในทางปฏิบัติทั่วไป
แจกจ่ายให้เต็มที่
คุณเห็นในแผนภาพยังมี "พื้นที่เก็บข้อมูลส่วนกลาง" และนี่คือหนึ่งในข้อ จำกัด ที่แฟน ๆ ชอบ: "คุณยังคงเป็นศูนย์กลาง" และไม่คุณไม่ได้เพราะพื้นที่เก็บข้อมูล "ส่วนกลาง" เป็นเพียงพื้นที่เก็บข้อมูลของคุณ ทั้งหมดเห็นด้วยกับ (เช่นตัวแทน GitHub อย่างเป็นทางการ) แต่สิ่งนี้สามารถเปลี่ยนแปลงได้ตลอดเวลาที่คุณต้องการ
ตอนนี้เป็นเวิร์กโฟลว์ทั่วไปสำหรับโครงการโอเพนซอร์ส (เช่นโครงการที่มีการทำงานร่วมกันจำนวนมาก) โดยใช้ DVCS:
Bitbucket.orgค่อนข้างคล้าย GitHub สำหรับ Mercurial รู้ว่าพวกเขามีที่เก็บส่วนตัวไม่ จำกัด พร้อมพื้นที่ไม่ จำกัด หากทีมของคุณมีขนาดเล็กกว่าห้าคุณสามารถใช้งานได้ฟรี
วิธีที่ดีที่สุดที่คุณสามารถโน้มน้าวตัวเองในการใช้งาน DVCS คือการทดลองใช้ DVCS นักพัฒนา DVCS ที่มีประสบการณ์ทุกคนที่ใช้ svn / cvs จะบอกคุณว่ามันคุ้มค่าและพวกเขาไม่รู้ว่าพวกเขารอดชีวิตมาได้ตลอดเวลาโดยปราศจากมัน
แก้ไข : เพื่อตอบการแก้ไขครั้งที่สองของฉันฉันสามารถย้ำว่าด้วย DVCS คุณมีเวิร์กโฟลว์ที่แตกต่างกันฉันขอแนะนำให้คุณไม่มองหาเหตุผลที่จะไม่ลองเพราะการปฏิบัติที่ดีที่สุดมันรู้สึกเหมือนเมื่อผู้คนโต้แย้งว่า OOP ไม่ใช่ จำเป็นเนื่องจากสามารถใช้รูปแบบการออกแบบที่ซับซ้อนกับสิ่งที่พวกเขาทำกับกระบวนทัศน์ XYZ เสมอ คุณสามารถได้รับประโยชน์อย่างไรก็ตาม
ลองคุณจะเห็นว่าการทำงานใน "สาขาส่วนตัว" เป็นตัวเลือกที่ดีกว่าจริง ๆ เหตุผลหนึ่งที่ฉันสามารถบอกได้ว่าทำไมสิ่งสุดท้ายถึงเป็นจริงก็คือคุณสูญเสียความกลัวที่จะกระทำทำให้คุณสามารถกระทำได้ตลอดเวลาที่คุณเห็นว่าเหมาะสมและทำงานอย่างเป็นธรรมชาติมากขึ้น
เกี่ยวกับ "การรวมนรก" คุณพูดว่า "เว้นแต่ว่าเรากำลังทดลอง" ฉันพูดว่า "แม้ว่าคุณกำลังทดลอง + การบำรุงรักษา + ทำงานใน v2.0 ที่ปรับปรุงใหม่ในเวลาเดียวกัน " อย่างที่ฉันพูดก่อนหน้านี้การรวมนรกไม่มีอยู่เพราะ:
- ทุกครั้งที่คุณยอมรับว่าคุณสร้างสาขาที่ไม่มีชื่อและทุกครั้งที่การเปลี่ยนแปลงของคุณตรงตามการเปลี่ยนแปลงของบุคคลอื่นจะเกิดการรวมที่เป็นธรรมชาติ
- เนื่องจาก DVCSs รวบรวมข้อมูลเมตาเพิ่มเติมสำหรับแต่ละการกระทำความขัดแย้งเกิดขึ้นน้อยลงระหว่างการรวม ... ดังนั้นคุณจึงอาจเรียกได้ว่า "การผสานอัจฉริยะ"
- เมื่อคุณชนเข้ากับความขัดแย้งผสานนี่คือสิ่งที่คุณสามารถใช้:
ขนาดของโครงการก็ไม่สำคัญเมื่อฉันเปลี่ยนจากการโค่นล้มฉันจริง ๆ แล้วเห็นประโยชน์ในขณะที่ทำงานคนเดียวทุกอย่างก็รู้สึกถูก เซ็ตการแก้ไข (ไม่ใช่การแก้ไข แต่ชุดการเปลี่ยนแปลงเฉพาะสำหรับไฟล์เฉพาะที่คุณมีการคอมมิชชันแยกจากสถานะของ codebase) ช่วยให้คุณเห็นภาพสิ่งที่คุณตั้งใจทำโดยการทำสิ่งที่คุณทำกับกลุ่มของไฟล์ ไม่ใช่ codebase ทั้งหมด
เกี่ยวกับการทำงานของเซ็ตการแก้ไขและการเพิ่มประสิทธิภาพ ฉันจะพยายามที่จะแสดงให้เห็นว่ามันมีตัวอย่างผมชอบที่จะให้: สวิทช์โครงการ MooTools จาก SVN ของพวกเขาแสดงในกราฟเครือข่าย GitHub
ก่อน
หลังจาก
สิ่งที่คุณเห็นคือนักพัฒนาสามารถจดจ่อกับงานของตัวเองในขณะที่ให้คำมั่นโดยไม่กลัวการทำลายรหัสของผู้อื่นพวกเขากังวลเกี่ยวกับการทำลายรหัสของผู้อื่นหลังจากการกด / ดึง (DVCSs: กระทำครั้งแรกแล้วกด / ดึง ) แต่เนื่องจากการผสานกันอย่างชาญฉลาดที่นี่พวกเขามักจะไม่ทำ ... แม้ว่าจะมีความขัดแย้งผสาน (ซึ่งหายาก) คุณใช้เวลาเพียง 5 นาทีหรือน้อยกว่าในการแก้ไข
คำแนะนำของฉันสำหรับคุณคือมองหาคนที่รู้วิธีใช้ mercurial / git และบอกให้เขาอธิบายให้คุณฟัง ด้วยการใช้เวลาประมาณครึ่งชั่วโมงกับเพื่อน ๆ ในบรรทัดคำสั่งในขณะที่ใช้งาน Mercurial กับเดสก์ท็อปและบัญชี Bitbucket ของเราแสดงให้พวกเขาเห็นว่าจะผสานได้อย่างไรแม้จะสร้างความขัดแย้งให้พวกเขาเห็นวิธีแก้ไขในเวลาที่ไร้สาระ พลังที่แท้จริงของ DVCS
สุดท้ายฉันขอแนะนำให้คุณใช้ mercurial + bitbucket แทน git + gitub ถ้าคุณทำงานกับ windows folks Mercurial นั้นเรียบง่ายกว่าเดิม แต่ git นั้นมีประสิทธิภาพมากกว่าสำหรับการจัดการพื้นที่เก็บข้อมูลที่ซับซ้อนมากขึ้น (เช่นrebit git )
การอ่านที่แนะนำเพิ่มเติมบางประการ: