GIT เทียบกับ Perforce - VCS สองรายการจะเข้าสู่ ... หนึ่งรายการจะออก [ปิด]


85

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

หนึ่งในชัยชนะที่ยิ่งใหญ่คือเราสามารถทำงานได้โดยไม่ต้องเชื่อมต่อกับเครือข่าย IMO ที่ชนะอีกวิธีหนึ่งคือวิธีจัดการเพิ่ม / ชำระเงิน ยินดีรับคะแนนมากขึ้น! นอกจากนี้เรายังมี devs ทั้งหมดประมาณ 10-20 ตัว

คำตอบ:


75

ซอร์สโค้ดตัวแปล Perl 5 กำลังอยู่ในขั้นตอนการแปลงจาก Perforce เป็น git บางทีgit-p4rawผู้นำเข้าของ Sam Vilain อาจเป็นที่สนใจ

ในกรณีใด ๆ ซึ่งเป็นหนึ่งในชัยชนะที่สำคัญที่คุณกำลังจะมีมากกว่าทุกศูนย์ VCS และคนที่กระจายมากที่สุดยังเป็นดิบพองความเร็ว คุณนึกภาพไม่ออกเลยว่าการมีประวัติโครงการทั้งหมดอยู่ในมือเป็นเพียงเศษส่วนเศษส่วนของเสี้ยววินาทีจนกว่าคุณจะได้สัมผัส แม้แต่การสร้างบันทึกการคอมมิตของประวัติโปรเจ็กต์ทั้งหมดที่มีค่าความแตกต่างแบบเต็มสำหรับแต่ละคอมมิตก็สามารถวัดเป็นเศษเสี้ยวของวินาทีได้ Git เร็วมากจนหมวกของคุณจะปลิว VCS ที่ต้องไปกลับผ่านเครือข่ายก็ไม่มีโอกาสแข่งขันหรือแม้แต่ผ่านลิงค์ Gigabit Ethernet

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

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

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


นัยว่าp4sandboxให้ความสามารถออฟไลน์บางอย่างแก่ p4 ถึงกระนั้นฉันก็ยังชอบคอมไพล์ :)
Dominic Mitchell

13
Git ไม่ได้ให้ 'ความสามารถออฟไลน์' มันเป็นแบบออฟไลน์ สิ่งเดียวที่คุณส่งข้อมูลผ่านสายคือเมื่อคุณกด commits ไปยังจุดเริ่มต้นหรือดึงการเปลี่ยนแปลงจากที่เก็บย่อยอื่น ๆ
Evan Plaice

2
"Git เร็วมากหมวกของคุณจะปลิว" ชอบตรงที่ :) มีเพียงสิ่งเดียวที่ไม่เป็นความจริงเมื่อคุณเริ่มเช็คอินไฟล์ไบนารี repos ขนาดใหญ่เป็นปัญหาในคอมไพล์
v.oddou

1
น่าเสียดายจริง วิธีการทำงานของ Git ขึ้นอยู่กับการอ่านไฟล์และค่อนข้างแตกต่างกันดังนั้นจึงต้องมีขนาดที่พอเหมาะและแตกต่างกันได้ดี จากนั้นมันจะเร็วมาก (ดังตัวอย่างประวัติความแตกต่างแบบเต็มทันทีสำหรับการคอมมิตหลายร้อยครั้ง) ด้วย blobs ขนาดใหญ่? ไม่มาก…
Aristotle Pagaltzis

84

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

  1. ความเร็วในการแตกแขนง - คอมไพล์ใช้เวลามากที่สุดไม่กี่วินาที
  2. ความขัดแย้ง - การแก้ไขอัตโนมัติของ P4Merge ทำลายมูลค่างานสัปดาห์ละครั้ง ตั้งแต่นั้นมาฉันค่อนข้างจะแก้ไขด้วยมือเมื่อรวมเข้าด้วยกัน เมื่อ Git แจ้งฉันเกี่ยวกับความขัดแย้งมันเป็นความขัดแย้ง เวลาที่เหลือคอมไพล์จะแก้ไขสิ่งต่างๆได้อย่างถูกต้องและฉันประหยัดเวลาได้มาก
  3. การติดตามการรวม - หากคุณมีสาขาหนึ่งที่ได้รับการผสานจากสาขาอื่นอย่างต่อเนื่องคุณจะรู้ว่าสิ่งนี้น่าปวดหัวกับ perforce อย่างไร ด้วยคอมไพล์อาการปวดหัวจะลดลงเนื่องจากผลของการผสานคอมไพล์นั้นเป็นการกระทำใหม่ที่รู้ว่าบรรพบุรุษของมันคือใคร
  4. สิทธิ์ - ฉันหลงติดตามจำนวนครั้งที่พยายามทำงานกับไฟล์ แต่ทำไม่ได้เพราะไม่ได้เช็คเอาต์ใน Perforce หากคุณทำงานกับ XCode (หรือตัวแก้ไขใด ๆ ที่ไม่มีปลั๊กอิน Perforce SCM ที่เป็นของแข็ง) แบบออฟไลน์คุณจะรู้ว่าสิ่งนี้ทำให้เกิดความรำคาญได้อย่างไร ฉันไม่ต้องกังวลเกี่ยวกับเรื่องนี้กับ Git ฉันทำการเปลี่ยนแปลงของฉัน Git ไม่หยุดฉันและติดตามพวกเขาอยู่เบื้องหลัง
  5. การรักษาต้นไม้หลักให้เป็นระเบียบ - ด้วยคอมไพล์ฉันสามารถจัดเรียงคอมมิตและจัดระเบียบรหัสให้เป็นระเบียบเรียบร้อยเพื่อให้ประวัติดูดีและเป็นระเบียบเรียบร้อย ไม่มี "การตรวจสอบในไฟล์นี้เนื่องจากควรจะเป็นส่วนหนึ่งของขยะการเช็คอินก่อนหน้านี้" ฉันทำสควอชแบบนั้นเพราะพวกเขาไม่ช่วยอะไรเลย
  6. Stashing - เซิร์ฟเวอร์ perforce ของคุณต้องเป็นเวอร์ชัน 2010.1 หรือใหม่กว่าเพื่อใช้คำสั่ง p4 shelve
  7. การสร้างแพตช์ - ทำได้ง่ายในคอมไพล์ ไม่รู้ว่าเป็นไปได้ไหมใน Perforce โดยไม่ต้องใช้บรรทัดคำสั่ง
  8. แพตช์การส่งจดหมายจาก GUI - อีกครั้งคอมไพล์ชนะที่นี่
  9. พื้นที่ดิสก์ - ด้วย perforce ทุกสาขาจะเป็นสำเนา นั่นหมายความว่าหากซอร์สทรีของคุณมีขนาดใหญ่พื้นที่ดิสก์ของคุณจะถูกกินอย่างรวดเร็ว นี่ยังไม่นับพื้นที่เพิ่มเติมเมื่อคุณเริ่มสร้าง ทำไมถึงมีการเชื่อมโยงระหว่างสาขาและพื้นที่ดิสก์ ด้วยคอมไพล์คุณสามารถมี 100 สาขาและมีเพียงสาขาเดียวในเวลาเดียวกัน หากคุณต้องการใช้งานสองเวอร์ชันพร้อมกันโดยเฉพาะคุณสามารถโคลนทำงานของคุณแล้วกำจัดหนึ่งโคลนหากคุณต้องการโดยไม่สูญเสียอะไรเลย
  10. หากคุณใช้ XCode4 การสนับสนุน perforce จะถูกตัดออกไปและตอนนี้การสนับสนุนคอมไพล์ถูกสร้างขึ้นแล้วหากคุณทำงานข้ามแพลตฟอร์มอย่างที่ฉันทำสิ่งนี้สำคัญมาก ด้วย Visual Studio คุณสามารถใช้ส่วนขยาย git ด้วยการบังคับใช้ระบบปฏิบัติการทั้งสองอย่างเท่าเทียมกัน ตอนนี้อาจจะมากกว่านี้บน mac ที่มี XCode4 อยู่ในฉาก
  11. การค้นหาการเช็คอินที่ผิดพลาด (หรือกฎการแบ่งส่วนคอมไพล์) - เคยพยายามทำการค้นหาแบบไบนารีโดยใช้เพอร์ฟอร์ซเพื่อค้นหาว่ามีการแนะนำจุดบกพร่องหรือไม่ ค่อนข้างยุ่งยากใช่มั้ย? ยิ่งยุ่งยากมากขึ้นเมื่อมีการบูรณาการจากสาขาอื่น ๆ ที่อยู่ตรงกลาง ทำไม? เนื่องจากไม่มีระบบอัตโนมัติสำหรับงานดังกล่าว. คุณต้องเขียนเครื่องมือของคุณเองเพื่อพูดคุยกับ perforce และคุณมักจะไม่มีเวลา ด้วย git คุณให้จุดเริ่มต้น (จุด "ดี" และจุด "ไม่ดี") และจะทำการค้นหาโดยอัตโนมัติสำหรับคุณ ยิ่งไปกว่านั้นถ้าคุณมีสคริปต์ที่สามารถทำให้กระบวนการสร้างและทดสอบเป็นไปโดยอัตโนมัติคุณสามารถเชื่อมโยงคอมไพล์เข้ากับสคริปต์ได้และกระบวนการทั้งหมดในการค้นหาการเช็คอินจะเป็นไปโดยอัตโนมัติ นั่นคือสิ่งที่ควรจะเป็น
  12. การติดตามการเปลี่ยนแปลงระหว่างตัวทำซ้ำ - ลองแบ่ง BigClass เป็น SmallClass1 และ SmallClass2 สำหรับ Perforce ขณะนี้ BigClass ได้หยุดให้บริการและคลาสใหม่สองคลาส (SmallClass1 และ SmallClass2 ได้เข้าร่วมโครงสร้างต้นทาง) ในการ Perforce ไม่มีความสัมพันธ์ระหว่าง BigClass และ SmallClass1 และ SmallClass2 ในทางกลับกัน Git ฉลาดพอที่จะรู้ว่าตอนนี้ x% ของ BigClass อยู่ใน SmallClass1 และ y% ของ BigClass อยู่ใน SmallClass2 และ BigClass นั้นไม่มีอยู่จริง ตอนนี้จากมุมมองของคนที่กำลังตรวจสอบการเปลี่ยนแปลงในหลายสาขาคุณบอกฉันว่าวิธีใดที่คุณคิดว่ามีประโยชน์มากกว่ากัน - Git's หรือ Perforce โดยส่วนตัวแล้วฉันชอบแนวทางของ Git เพราะมันสะท้อนการเปลี่ยนแปลงที่แท้จริงของโค้ดได้แม่นยำกว่า Git สามารถทำได้เนื่องจากติดตามเนื้อหาภายในไฟล์ไม่ใช่ตัวไฟล์
  13. รวมศูนย์หรือกระจายอำนาจ: Git เป็นระบบDVCSในขณะที่การบังคับใช้จะรวมศูนย์ VCS แบบรวมศูนย์ไม่สามารถกระจายอำนาจได้ในภายหลัง แต่ DVCS (โดยเฉพาะ git) สามารถรวมศูนย์ได้ มีผลิตภัณฑ์หลายอย่างที่เพิ่มการควบคุมการเข้าถึงที่ละเอียดมากให้กับ git หากเป็นสิ่งที่ธุรกิจต้องการ โดยส่วนตัวแล้วฉันจะใช้ระบบที่ให้ความยืดหยุ่นมากขึ้นในระยะยาว
  14. การแมปสาขา: หากคุณต้องการทำการแยกสาขาใน Perforce คุณต้องสร้างการแมปสาขา มีเหตุผลสำหรับสิ่งนี้ แต่มันเชื่อมโยงกับวิธีที่ Perforce กำหนดแนวคิดของสาขา ในฐานะนักพัฒนาหรือทีมนี่หมายถึงอีกหนึ่งขั้นตอนในกระบวนการทำงานซึ่งฉันไม่ถือว่ามีประสิทธิภาพเลย
  15. การแบ่งปันงานระหว่างทีม: ด้วย Perforce คุณไม่สามารถแยกการส่งได้ ทีม A กำลังทำงานกับฟีเจอร์ A ทีม B ในฟีเจอร์ B ทีม C ทำงานแก้ไขข้อบกพร่อง ตอนนี้ทีม A & B ต้องแก้ไขจุดบกพร่องจำนวนมากเพื่อที่จะใช้คุณลักษณะของพวกเขา สิ่งเดียวก็คือพวกเขาไม่ได้มีระเบียบวินัยเมื่อทำการเปลี่ยนแปลง (อาจเป็นเพราะพวกเขากำลังเร่งทำตามกำหนดเวลา) ดังนั้น "การแก้ไขข้อบกพร่อง" จึงเป็นส่วนหนึ่งของการส่งที่มีขนาดใหญ่ขึ้นซึ่งยังมีสิ่งใหม่ ๆ เท่าที่การควบคุมเวอร์ชัน สาขามีความกังวล อย่างไรก็ตามทีม C กำลังทำการเปิดตัวจุดและต้องการได้รับการแก้ไขข้อบกพร่องจากทีมอื่น ๆ หากพวกเขาใช้ Git ทีม C สามารถเลือกการเปลี่ยนแปลงที่เกี่ยวข้องของทีมอื่นแยกพวกเขาออกและดำเนินการเฉพาะสิ่งที่พวกเขาต้องการโดยไม่ต้องกังวลเกี่ยวกับการแนะนำคุณลักษณะที่ใช้งานบางส่วน ด้วย Perforce
  16. การเปลี่ยนแพลตฟอร์ม - หากในอนาคตคุณตัดสินใจที่จะเปลี่ยนแพลตฟอร์มที่คุณเลือกด้วย Perforce แสดงว่าคุณอยู่ในความเมตตาของ Perforce.com และความพร้อมของเครื่องมือสำหรับแพลตฟอร์มที่คุณเลือก
  17. การเปลี่ยนไปใช้เอ็นจิ้นการควบคุมแหล่งที่มาที่น่าตื่นตาตื่นใจในอนาคต X - หากคุณตัดสินใจที่จะเปลี่ยนสิ่งที่คุณใช้สำหรับการควบคุมแหล่งที่มาการแยกประวัติการควบคุมแหล่งที่มาจาก Perforce และย้ายไปยังระบบ X ใหม่จะเป็นฝันร้ายเพราะเป็นแหล่งปิดและดีที่สุด ที่คุณทำได้คือเดา - เพียงแค่ Google สำหรับการโยกย้าย Perforce to Git เพื่อให้เข้าใจถึงสิ่งที่ฉันกำลังพูดถึง อย่างน้อยก็ด้วย Git ซึ่งเป็นโอเพ่นซอร์สดังนั้นจึงช่วยลดการคาดเดาจำนวนมากที่เกี่ยวข้อง

นั่นคือ 2 เซ็นต์ของฉัน ในการป้องกันของ Perforce ฉันต้องพูดกฎการสนับสนุนลูกค้าของพวกเขาและเครื่องมือ Time Lapse View ของพวกเขาก็เช่นกัน ไม่รู้จะดูไทม์แลปส์ด้วยคอมไพล์ได้อย่างไร แต่เพื่อความสะดวกและประหยัดเวลาฉันจะใช้คอมไพล์ทุกวัน


2
re # 6 (stash): p4 Shelve มันใหม่
Trey

ขอบคุณ. ฉันได้อัปเดตคำตอบแล้ว :)
Carl

8
ความแตกต่างที่ใหญ่ที่สุดระหว่าง Perforce และ Git คือความคิดที่จำเป็น หากคุณใช้งานร้านค้า VCS แบบรวมศูนย์คอมไพล์จะขายยากมากเพราะต้องมีการเปลี่ยนแปลงวิธีที่คุณทีมงานและธุรกิจคิดถึงการควบคุมเวอร์ชัน กล่าวอีกนัยหนึ่ง git เป็นเครื่องมือที่ยอดเยี่ยมและมีประสิทธิภาพซึ่งมีความสามารถทางเทคนิคมากกว่า Perforce ส่วนที่ยากคือการโน้มน้าวใจมนุษย์ :)
Carl

1
ฉันหลงรัก Perforce อ่านโพสต์นี้รู้สึกเหมือน
โดน

2
@KlausCPH อย่างน้อยคุณก็ไม่ต้องเตรียมคำพูดเลิกราเมื่อคุณออกจาก Perforce :)
Carl

46

ฉันต้องใช้ความมั่นใจมากในการเปลี่ยนจาก perforce ในสอง บริษัท ฉันใช้มันมากเกินพอ บริษัท เหล่านี้เป็นทั้งสอง บริษัท ที่มีสำนักงานแตกต่างกัน แต่สำนักงานได้รับการจัดตั้งขึ้นด้วยโครงสร้างพื้นฐานจำนวนมากดังนั้นจึงไม่จำเป็นต้องมีคุณสมบัติที่ไม่เชื่อมต่อ / ขาดการเชื่อมต่อ

คุณกำลังพูดถึงการเปลี่ยนแปลงของนักพัฒนากี่คน?

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

ฉันคิดว่าคุณอยู่ในการขายที่ยาก - การบังคับใช้เป็นสิ่งที่ดีที่จะพยายามแทนที่ ไม่ใช่เกมง่ายๆหากคุณพยายามบูต pvcs หรือ ssafe


18
ฉันจะเพิ่มว่าชุดคุณลักษณะที่โดดเด่นของ Git นั้นมาพร้อมกับช่วงการเรียนรู้ที่สูงชัน (แม้ว่าฉันไม่เคยพบ Perforce ทั้งหมดที่ใช้งานง่ายเช่นกัน)
savetheclocktower

1
คำตอบที่ดีทิม จัสติน - ทำไมเจ้านายของคุณถึงถูกขาย? แน่นอนคุณต้องตอบคำถามของทิมให้ทำเช่นนั้น? ฉันจะสนใจในเหตุผลด้วย
Greg Whitfield

4
คุณต้องจ่ายเงินสำหรับ Perforce ในสภาพแวดล้อมทางการค้าและจริงๆแล้วฉันพบว่า Perforce สั่นสะเทือนที่จะใช้ และจุดแข็งเพียงอย่างเดียวที่ฉันเห็นก็คือมันดีในการจัดการกับ binary blobs ขนาดใหญ่
Calyth

2
@ จัสติน: ระวังเหตุผล "เราจะใช้คุณลักษณะพื้นฐานเท่านั้น" ด้วยคอมไพล์คุณจะต้องใช้สิ่งที่ล้ำหน้ากว่านี้ ทำไมคุณไม่? Bisect อยู่ในใจทันที ดังนั้นทำ rebase และ cherry-pick
Carl

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

15

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

เมื่อคุณพยายามเรียนรู้เครื่องมือจากส่วนกลางแน่นอนว่าคุณจะกังวลเกี่ยวกับการทำผิดบางอย่างที่ทำให้เกิดปัญหากับผู้ใช้ที่เก็บรายอื่น ความกลัวความอับอายเพียงอย่างเดียวก็เพียงพอแล้วที่จะกีดกันผู้คนจากการทดลอง แม้แต่การมีที่เก็บ "การฝึกอบรม" แบบพิเศษก็ไม่ได้ช่วยอะไรเพราะนักพัฒนาจะต้องเผชิญกับสถานการณ์ในระบบการผลิตที่พวกเขาไม่เคยเห็นระหว่างการฝึกอบรมอย่างหลีกเลี่ยงไม่ได้ดังนั้นพวกเขาจึงกลับมากังวล

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


ไม่มีเหตุผลที่คุณไม่สามารถมีสาขาส่วนตัวของระบบส่วนกลางได้เช่นกัน บางครั้ง DVCS ทำงานได้ดีกว่าในการรวม แต่เพียงเพราะสาขาส่วนตัวไม่มีอยู่ใน repo ระยะไกลไม่ได้หมายความว่าคุณไม่สามารถสร้างสาขาเฉพาะสำหรับคุณที่มีอยู่ใน repo ระยะไกลได้
Billy ONeal

2
ความคิดเห็นนี้ถูกต้องในทางเทคนิค แต่นั่นเป็นประเด็นที่ขาดหายไป ระบบควบคุมการแก้ไขเป็นเครื่องมือทางสังคม ในสังคมสาขาที่มีชื่อของคุณอยู่ในเซิร์ฟเวอร์ที่ใช้ร่วมกันไม่ได้เป็น "ส่วนตัว" ที่ใช้ร่วมกัน ใช่แม้จะมี ACL และอะไรก็ตาม มีความแตกต่างทางเทคนิคด้วย (เห็นได้ชัดว่าสาขาส่วนตัวของฉันถูกใช้ในขณะที่ฉันเดินทางกลับบ้านโดยไม่มีอินเทอร์เน็ต / ไม่น่าเชื่อถือ) แต่เป็น บริษัท ย่อยของความแตกต่างทางสังคม
tialaramex

2
สาขาส่วนตัวที่มีการบังคับใช้เพียงแค่ห่วย ความสะดวกในการสร้างและสลับไปมาระหว่างสาขาในคอมไพล์ไม่สามารถเปรียบเทียบกับ perforce ได้ สาขา "ส่วนตัว" นั้นมีความเป็นส่วนตัวมากเพียงใด คุณไม่เก็บไว้ในท้องถิ่น คุณขึ้นอยู่กับการเข้าถึงเครือข่ายอย่างสมบูรณ์
Erik Engheim

9

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

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


1
เพื่อความเป็นธรรม (ฉันเลือก git มากกว่า Hg) ต้องสังเกตว่า Mercurial มีความสามารถในการแบ่งครึ่งเช่นกัน - แม้ว่าจะจัดส่งเป็นปลั๊กอินที่คุณต้องโหลดอย่างชัดเจน
Aristotle Pagaltzis

2
darcs มี "trackdown" มาตั้งแต่ก่อนที่จะมี git รุ่นแรกค่อนข้างหยาบเป็นที่ยอมรับ
wnoise

2
เกี่ยวกับ UI - GitX บน OSX นั้นยอดเยี่ยมมาก
Antony Stubbs

4
SourceTree ยังเป็นไคลเอนต์ osx พื้นเมืองที่ดีอีกตัว มันกลายเป็นอิสระหลังจากได้มา ฉันใช้มันมาระยะหนึ่งแล้วและฉันชอบมัน ส่วนใหญ่ฉันเป็น commandliner ก่อนที่จะใช้ SourceTree
Prakash Nadar

1
จากประสบการณ์ของฉันกับ Git คุณต้องการทั้งบรรทัดคำสั่งและไคลเอนต์กราฟิกเพื่อให้ใช้งานได้อย่างมีประสิทธิภาพ คุณต้องใช้บรรทัดคำสั่งเพราะมีพลังมากมายที่ไม่ง่ายที่จะใส่ลงใน GUI และคุณต้องมี GUI (หรืออย่างน้อยgit log --graph) เนื่องจากประวัติการแก้ไข Git มีแนวโน้มที่จะไม่เป็นเชิงเส้นและยากที่จะมองเห็นได้โดยไม่มีภาพ ฉันใช้ GitX และ SourceTree เป็น GUI แม้ว่า gitk (ซึ่งมาพร้อมกับ Git ในตอนนี้) จะผ่านได้ในพริบตา
Marnen Laibow-Koser

9

ผู้คนใช้คุณลักษณะของ Perforce อะไรบ้าง?

  • พื้นที่ทำงานหลายแห่งในเครื่องเดียว
  • รายการการเปลี่ยนแปลงที่มีหมายเลข
  • สาขานักพัฒนา
  • การรวมกับ IDE (Visual Studio, Eclipse, SlickEdit, ... )
  • สร้างตัวแปรมากมาย
  • พื้นที่ทำงานคอมโพสิต
  • การรวมการแก้ไขบางอย่าง แต่ไม่รวมการแก้ไขอื่น ๆ
  • ฯลฯ

ฉันถามเพราะถ้าทุกคนกำลังทำคือรับและวางจากบรรทัดคำสั่งคอมไพล์ก็ครอบคลุมและทำ RTS อื่น ๆ ทั้งหมด


2
ไม่แน่ใจว่า "พื้นที่ทำงานหลายแห่งในเครื่องเดียว" หมายถึงอะไร - VCS อื่น ๆ ไม่มีแนวคิดเรื่องพื้นที่ทำงานดังนั้นจึงไม่สามารถนำไปใช้เป็นคุณลักษณะสำหรับ Perforce ได้ แม้ว่าคนอื่น ๆ จะมีเหตุผล
Billy ONeal

ตัวอย่างพื้นที่ทำงานหลายรายการ: ไคลเอนต์ A มีไฟล์ A-only เวอร์ชัน dev และเวอร์ชันรีลีสพร้อมด้วยเครื่องมือภายในชุดย่อยที่เวอร์ชัน 1.52 ไคลเอนต์ B มีไฟล์ dev & release B เท่านั้นรวมถึงชุดเครื่องมือภายในที่แตกต่างกัน แต่ทับซ้อนกันทั้ง dev และเวอร์ชัน 1.52 นักพัฒนากำลังทำงานทั้งสองอย่างพร้อมกันและอาจเลือกที่จะทำให้เครื่องมือภายในที่เปลี่ยนแปลงปรากฏแก่ A เพื่อดูว่ามีอะไรแตก
Thomas L Holaday

6
@ โทมัส: ทำไมคุณไม่ ... เพียงแค่ตรวจสอบสองครั้ง? Perforce จำเป็นต้องมีเป็น "คุณลักษณะ" เพราะมิฉะนั้นจะแปลกเนื่องจากต้องตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมได้รับการตั้งค่าอย่างถูกต้องรายการรีจิสทรีถูกต้อง ฯลฯ
Arafangion

@Arafangion ไม่ชัดเจนว่าการตรวจสอบสองครั้งช่วยอำนวยความสะดวกในการเลือกเปิดไฟล์เพื่อสร้างชุดได้อย่างไร
Thomas L Holaday

6

เห็นได้ชัดว่าGitHub เสนอหลักสูตรฝึกอบรม git ให้กับ บริษัทต่างๆ Quoth โพสต์บล็อกของพวกเขาเกี่ยวกับเรื่องนี้ :

ฉันเคยไปที่วิทยาเขตของ Google หลายครั้งในช่วงสองสามสัปดาห์ที่ผ่านมาเพื่อช่วยฝึก Android ที่นั่นใน Git ฉันถูกถามโดย Shawn Pearce (คุณอาจรู้จักเขาจากความรุ่งโรจน์ Git และ EGit / JGit ของเขา - เขาเป็นฮีโร่ที่เข้ามาดูแลการบำรุงรักษาเมื่อ Junio ​​ไม่อยู่ในเมือง) ให้เข้ามาช่วยเขาฝึกวิศวกรของ Google ที่ทำงานกับ Andriod ในการเปลี่ยนแปลง จาก Perforce ถึง Gitเพื่อให้ Android สามารถแชร์กับคนทั่วไปได้ ฉันสามารถบอกคุณได้ว่าฉันมีความสุขมากกว่าที่ได้ทำ

[…]

ขณะนี้ Logical Awesome เสนอบริการฝึกอบรมแบบกำหนดเองประเภทนี้ให้กับทุก บริษัทอย่างเป็นทางการซึ่งเราสามารถช่วยองค์กรของคุณในการฝึกอบรมและการวางแผนหากคุณคิดจะเปลี่ยนไปใช้ Git ด้วย

เน้นของฉัน


4

ฉันใช้ Perforce มาเป็นเวลานานและเมื่อเร็ว ๆ นี้ฉันก็เริ่มใช้ GIT ด้วย นี่คือความคิดเห็น "วัตถุประสงค์" ของฉัน:

คุณสมบัติของ Perforce:

  1. เครื่องมือ GUI ดูเหมือนจะมีคุณสมบัติมากมาย (เช่นมุมมองไทม์แลปส์กราฟแก้ไข)
  2. ความเร็วเมื่อซิงค์กับการแก้ไขส่วนหัว (ไม่มีค่าใช้จ่ายในการถ่ายโอนประวัติทั้งหมด)
  3. การรวม Eclipse / Visual Studio นั้นดีมาก
  4. คุณสามารถพัฒนาฟีเจอร์ได้หลายอย่างในหนึ่งสาขาต่อหนึ่ง Changelist (ฉันยังไม่แน่ใจ 100% ว่านี่เป็นข้อได้เปรียบของ GIT หรือไม่)
  5. คุณสามารถ "สอดแนม" ว่านักพัฒนารายอื่นกำลังทำอะไรอยู่ - พวกเขาตรวจสอบไฟล์ประเภทใด

คุณสมบัติ GIT:

  1. ฉันได้รับความประทับใจว่าบรรทัดคำสั่ง GIT นั้นง่ายกว่า Perforce มาก (init / clone, add, commit ไม่มีการกำหนดค่าพื้นที่ทำงานที่ซับซ้อน)
  2. ความเร็วในการเข้าถึงประวัติโครงการหลังจากการชำระเงิน (มีค่าใช้จ่ายในการคัดลอกประวัติทั้งหมดเมื่อทำการซิงค์)
  3. โหมดออฟไลน์ (นักพัฒนาจะไม่บ่นว่าเซิร์ฟเวอร์ P4 ที่ไม่สามารถเข้าถึงได้จะห้ามไม่ให้เข้ารหัส)
  4. การสร้างสาขาใหม่เร็วกว่ามาก
  5. เซิร์ฟเวอร์ GIT "หลัก" ไม่จำเป็นต้องมีพื้นที่จัดเก็บ TBytes มากนักเนื่องจากนักพัฒนาแต่ละคนสามารถมี Sandbox ในเครื่องของตัวเองได้
  6. GIT เป็น OpenSource - ไม่มีค่าธรรมเนียมใบอนุญาต
  7. หาก บริษัท ของคุณมีส่วนร่วมในโครงการ OpenSource การแชร์แพตช์จะง่ายกว่ามากด้วย GIT

โดยรวมสำหรับโครงการ OpenSource / Distributed ฉันมักจะแนะนำ GIT เพราะเป็นเหมือนแอปพลิเคชัน P2P และทุกคนสามารถมีส่วนร่วมในการพัฒนาได้ ตัวอย่างเช่นฉันจำได้ว่าตอนที่ฉันทำการพัฒนาระยะไกลกับ Perforce ฉันกำลังซิงค์โปรเจ็กต์ 4GB ผ่านลิงก์ 1Mbps หนึ่งครั้งในหนึ่งสัปดาห์ เสียเวลาไปมากเพราะเหตุนั้น เราต้องตั้งค่า VPN เพื่อทำเช่นนั้น

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


ฟีเจอร์ Git # 1 เป็นการอ้างสิทธิ์ที่น่าสงสัยที่สุด บางที Git อาจชนะในการตั้งค่า แต่การใช้งานในแต่ละวันค่อนข้างงุ่มง่าม (มักต้องใช้คำสั่งหลายคำสั่งเพื่อให้งานง่าย ๆ สำเร็จ)
Adam Parkin

1
@AdamParkin งานอะไรที่คุณคิดว่าเงอะงะจากบรรทัดคำสั่ง? (ฉันใช้ GUI ถ้าเป็นไปได้ แต่ฉันคิดว่าโครงสร้างคำสั่งของ Git นั้นดี)
Marnen Laibow-Koser

1
@AdamParkin ดีความง่ายในการใช้บรรทัดคำสั่งคือด้านสุนทรียศาสตร์ดังนั้นจึงเป็นเรื่องส่วนตัวอย่างน้อยที่สุด เหตุผลที่ฉันคิดว่าบรรทัดคำสั่งของ Git นั้นง่ายกว่าของ Perforce คือใน Perforce คุณต้องตั้งค่าพื้นที่ทำงานและตัวแปรสภาพแวดล้อม (P4USER เป็นต้น) ก่อนที่คุณจะสามารถเริ่มทำงานกับไฟล์ที่เก็บได้เมื่อเทียบกับ "git clone" เดียว คำสั่ง แน่นอนว่ามีคำสั่งคอมไพล์ขั้นสูงบางคำสั่งที่ไม่มีใน Perforce (เช่นการเขียนประวัติศาสตร์ท้องถิ่นใหม่) และอาจดูเหมือน "วิทยาศาสตร์จรวด" สำหรับผู้ใช้ Perforce ทั่วไป
user389238

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

4

เราใช้ Git มาระยะหนึ่งแล้วเมื่อเร็ว ๆ นี้ฮาร์ดไดรฟ์ของเซิร์ฟเวอร์ Git ของเราขัดข้องและเราไม่สามารถเปลี่ยนกลับไปเป็นสถานะล่าสุดได้ เราสามารถกลับไปสู่สภาพเก่าได้ไม่กี่วัน เมื่อเซิร์ฟเวอร์สำรอง ทุกคนในทีมดึง / ผลักดันการเปลี่ยนแปลงและ voila เซิร์ฟเวอร์จะกลับสู่สถานะปัจจุบัน


3
ในการพูดคุยของ Linus ให้ @ Google เกี่ยวกับ Git เขาพูดถึงวิธีที่เขาไม่ทำการสำรองข้อมูลเนื่องจากโคลนเคอร์เนล Linux ของทุกคนเป็นข้อมูลสำรองทั้งหมด จุดที่ดีจริงๆ
Adam Parkin

นั่นเป็นความจริงในทุกแง่มุมการปิดแต่ละครั้งเป็น "การสำรองข้อมูล" แต่คอมไพล์ในหลาย ๆ กรณียังคงใช้เป็นเครื่องมือ "กระจายส่วนกลาง" เช่นเดียวกับ SVN ที่มีสิทธิประโยชน์ในการแตกแขนงเพิ่มเติม องค์กรต้องการการสำรองข้อมูลทุกอย่างที่มีอยู่เสมอ
Prakash Nadar

3

ความแตกต่างที่สำคัญอย่างหนึ่งระหว่าง Perforce และ git (และที่กล่าวถึงกันมากที่สุด) คือการจัดการไฟล์ไบนารีขนาดใหญ่ตามลำดับ

เช่นในบล็อกนี้ของพนักงานที่ บริษัท พัฒนาวิดีโอเกม: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html

อย่างไรก็ตามสิ่งที่สำคัญคือความแตกต่างของความเร็วระหว่าง git และ perforce เมื่อคุณมีพื้นที่เก็บข้อมูลขนาดใหญ่ 6gb ซึ่งมีทุกอย่างตั้งแต่เอกสารประกอบไปจนถึงไบนารีทุกตัวที่เคยสร้างมา (และสุดท้ายโอ้ใช่ประวัติแหล่งที่มาจริง) มักมาจาก ความจริงที่ว่า บริษัท ขนาดใหญ่มักจะดำเนินการ Perforce ดังนั้นพวกเขาจึงตั้งค่าให้ถ่ายโอนการดำเนินงานที่สำคัญทั้งหมดไปยังธนาคารเซิร์ฟเวอร์ขนาดใหญ่ที่ชั้นใต้ดิน

ข้อได้เปรียบที่สำคัญในส่วนของ Perforce มาจากปัจจัยที่ไม่มีส่วนเกี่ยวข้องใด ๆ กับ Perforce ความจริงที่ว่า บริษัท ที่ดำเนินการอยู่สามารถจ่ายธนาคารเซิร์ฟเวอร์ดังกล่าวได้

และสุดท้ายแล้ว Perforce และ git เป็นผลิตภัณฑ์ที่แตกต่างกัน Git ได้รับการออกแบบให้เป็น VCS เพียงอย่างเดียวและทำได้ดีกว่า Perforce มาก (เนื่องจากมีคุณสมบัติมากกว่าซึ่งโดยทั่วไปใช้งานง่ายกว่าโดยเฉพาะอย่างยิ่งในคำพูดอื่นการแยกสาขาใน Perforce ก็เหมือนกับการแสดงแบบเปิดใจ การผ่าตัดควรทำโดยผู้เชี่ยวชาญเท่านั้น: P) ( http://stevehanov.ca/blog/index.php?id=50 )

ผลประโยชน์อื่น ๆ ที่ บริษัท ที่ใช้ Perforce ได้รับมานั้นเป็นเพียงเพราะ Perforce ไม่ใช่ VCS แต่เพียงอย่างเดียว แต่ยังเป็นเซิร์ฟเวอร์ไฟล์รวมถึงมีคุณสมบัติอื่น ๆ สำหรับการทดสอบประสิทธิภาพของบิลด์ ฯลฯ

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


3

ฉันคิดว่าสิ่งหนึ่งที่ฉันรู้ว่า GIT ชนะก็คือความสามารถในการ "เก็บรักษาส่วนท้ายบรรทัด" ในทุกไฟล์ในขณะที่ Perforce ดูเหมือนจะยืนยันที่จะแปลเป็นรูปแบบ Unix, Dos / Windows หรือ MacOS9 ("\ n", "\ r \ n "หรือ" \ r)

นี่เป็นความเจ็บปวดอย่างแท้จริงหากคุณกำลังเขียนสคริปต์ Unix ในสภาพแวดล้อม Windows หรือระบบปฏิบัติการแบบผสม เป็นไปไม่ได้ที่จะตั้งกฎเป็นรายไฟล์ - นามสกุล ตัวอย่างเช่นจะแปลงไฟล์. sh, .bash, .unix เป็นรูปแบบ Unix และแปลงไฟล์. ccp, .bat หรือ. com เป็นรูปแบบ Dos / Windows

ใน GIT (ฉันไม่แน่ใจว่าเป็นค่าเริ่มต้นตัวเลือกหรือตัวเลือกเดียว) คุณสามารถตั้งค่าเป็น "สงวนส่วนท้ายบรรทัด" ได้ นั่นหมายความว่าคุณสามารถเปลี่ยนส่วนท้ายบรรทัดของไฟล์ได้ด้วยตนเองจากนั้น GIT จะออกจากรูปแบบนั้นอย่างที่เป็นอยู่ สำหรับฉันแล้วสิ่งนี้ดูเหมือนจะเป็นวิธีที่ดีที่สุดในการทำสิ่งต่างๆและฉันไม่เข้าใจว่าเหตุใดจึงไม่ใช่ตัวเลือกสำหรับ Perforce

วิธีเดียวที่คุณสามารถบรรลุพฤติกรรมนี้คือการทำเครื่องหมายไฟล์เป็นไบนารี อย่างที่ฉันเห็นนั่นอาจเป็นการแฮ็กที่น่ารังเกียจในการแก้ไขปัญหาเกี่ยวกับคุณลักษณะที่ขาดหายไป นอกเหนือจากความน่าเบื่อที่จะต้องทำกับสคริปต์ทั้งหมดแล้วยังอาจแตกต่างกันมากที่สุด ฯลฯ

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

นี่เป็นเพียงสิ่งที่ฉันคิดว่าทำให้ GIT ได้เปรียบอย่างมากซึ่งฉันไม่คิดว่าจะมีการกล่าวถึงข้างต้น

แก้ไข: หลังจากใช้ Perforce มานานกว่านี้ฉันต้องการเพิ่มความคิดเห็นอีกสองสามข้อ:

A) สิ่งที่ฉันพลาดจริงๆใน Perforce คือความแตกต่างที่ชัดเจนรวมถึงไฟล์ที่เปลี่ยนแปลงลบและเพิ่ม สิ่งนี้มีอยู่ใน GIT ด้วยgit diffคำสั่ง แต่ใน Perforce ไฟล์จะต้องได้รับการตรวจสอบก่อนที่จะบันทึกการเปลี่ยนแปลงและในขณะที่คุณอาจตั้งค่าตัวแก้ไขหลัก (เช่น Eclipse) ให้ตรวจสอบไฟล์โดยอัตโนมัติเมื่อคุณแก้ไขคุณ บางครั้งอาจแก้ไขไฟล์ด้วยวิธีอื่น (notepad คำสั่ง unix ฯลฯ ) และไฟล์ใหม่ดูเหมือนจะไม่ถูกเพิ่มโดยอัตโนมัติเลยแม้แต่การใช้ Eclipse และ p4eclipse ซึ่งอาจค่อนข้างน่ารำคาญ ดังนั้นในการค้นหาการเปลี่ยนแปลงทั้งหมดคุณต้องเรียกใช้ "ความแตกต่างกับ ... " บนพื้นที่ทำงานทั้งหมดซึ่งก่อนอื่นต้องใช้เวลาสักครู่ในการรันและประการที่สองรวมถึงสิ่งที่ไม่เกี่ยวข้องทั้งหมดเว้นแต่คุณจะตั้งค่ารายการยกเว้นที่ซับซ้อนมาก ซึ่งนำฉันไปสู่จุดต่อไป

B) ใน GIT ฉันพบว่า. gitignore ง่ายมากและง่ายต่อการจัดการอ่านและทำความเข้าใจ อย่างไรก็ตามพื้นที่ทำงานจะละเว้น / ไม่รวมรายการที่กำหนดค่าได้ใน Perforce ดูเหมือนไม่สะดวกและซับซ้อนโดยไม่จำเป็น ฉันไม่สามารถได้รับการยกเว้นใด ๆ ที่ใช้สัญลักษณ์แทนได้ ฉันต้องการทำสิ่งที่ชอบ

-//Server/mainline/.../target/...   //Svend_Hansen_Server/.../target/...

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

-//Server/mainline/projectA/target/...  //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/...  //Svend_Hansen_Server/projectB/target/...
...

และบรรทัดที่คล้ายกันสำหรับโฟลเดอร์ bin ไฟล์. classpath และ .projet และอื่น ๆ

C) ใน Perforce มีรายการเปลี่ยนแปลงที่ค่อนข้างมีประโยชน์ อย่างไรก็ตามสมมติว่าฉันทำการเปลี่ยนแปลงกลุ่มหนึ่งตรวจสอบทั้งหมดและใส่ไว้ในรายการการเปลี่ยนแปลงเพื่อดำเนินการอย่างอื่นก่อนส่งรายการการเปลี่ยนแปลงนั้น หากฉันทำการเปลี่ยนแปลงไฟล์ใดไฟล์หนึ่งที่รวมอยู่ในรายการการเปลี่ยนแปลงรายการแรกในภายหลังไฟล์นั้นจะยังคงอยู่ในรายการการเปลี่ยนแปลงนั้นและฉันไม่สามารถส่งรายการการเปลี่ยนแปลงได้ในภายหลังโดยสมมติว่ามีเฉพาะการเปลี่ยนแปลงที่ฉันได้เพิ่มไว้ในตอนแรก (แม้ว่าจะเป็น จะเป็นไฟล์เดียวกัน) ใน GIT หากคุณเพิ่มไฟล์และทำการเปลี่ยนแปลงเพิ่มเติมการเปลี่ยนแปลงเหล่านั้นจะไม่ถูกเพิ่ม (และจะยังคงแสดงในgit diffและคุณจะไม่สามารถคอมมิตไฟล์ได้โดยไม่ต้องเพิ่มการเปลี่ยนแปลงใหม่ก่อนเช่นกัน แน่นอนว่านี่ไม่ได้มีประโยชน์ในลักษณะเดียวกับรายการการเปลี่ยนแปลงเนื่องจากคุณมีไฟล์ที่เพิ่มเข้ามาเพียงชุดเดียว แต่ใน GIT คุณสามารถทำการเปลี่ยนแปลงได้เนื่องจากไม่ได้ผลักดันให้เกิดขึ้นจริง คุณสามารถดำเนินการกับการเปลี่ยนแปลงอื่น ๆ ก่อนที่จะผลักดันได้ แต่คุณจะไม่สามารถผลักดันสิ่งอื่นที่คุณเพิ่มเข้ามาในภายหลังได้โดยไม่ต้องผลักดันการเปลี่ยนแปลงในอดีตเช่นกัน


2

ฉันไม่มีประสบการณ์กับ Git แต่ฉันมี Mercurial ซึ่งเป็น VCS แบบกระจาย ขึ้นอยู่กับโครงการจริงๆ แต่ในกรณีของเรา VCS แบบกระจายเหมาะกับโครงการเนื่องจากโดยทั่วไปแล้วจะกำจัดงานสร้างที่เสียบ่อย

ฉันคิดว่ามันขึ้นอยู่กับโปรเจ็กต์จริง ๆ เนื่องจากบางอันเหมาะกับไคลเอนต์เซิร์ฟเวอร์ VCS มากกว่าและอื่น ๆ ก็ลากแบบกระจาย


(จริงอยู่นี่เป็นคำตอบเก่า แต่ ... ) คุณสามารถเรียกใช้ Git (และฉันถือว่า Mercurial ด้วย) ราวกับว่าเป็น VCS ไคลเอนต์เซิร์ฟเวอร์ มันยังคงทำงานได้ดีกว่า VCS ไคลเอนต์เซิร์ฟเวอร์เนื่องจากความสะดวกในการแยกสาขาและการรวมและความเป็นไปได้ในการคอมมิตส่วนตัว ฉันไม่เห็นการใช้งานสำหรับ VCS ไคลเอนต์เซิร์ฟเวอร์อีกต่อไปอย่างน้อยก็จนกว่าพวกเขาจะได้รับทักษะการผสานถึงระดับที่เท่าเทียมกัน
Marnen Laibow-Koser

-5

นี่คือสิ่งที่ฉันไม่ชอบเกี่ยวกับคอมไพล์:

ก่อนอื่นฉันคิดว่าความคิดแบบกระจายนั้นบินไปมาเมื่อเผชิญกับความเป็นจริง ทุกคนที่ใช้คอมไพล์จริงก็ทำแบบรวมศูนย์แม้แต่ Linus Torvalds หากเคอร์เนลได้รับการจัดการแบบกระจายนั่นหมายความว่าฉันไม่สามารถดาวน์โหลดแหล่งที่มาของเคอร์เนล "อย่างเป็นทางการ" ได้ - ไม่มีเลย - ฉันต้องตัดสินใจว่าฉันต้องการเวอร์ชันของ Linus หรือเวอร์ชันของ Joe หรือเวอร์ชันของบิล เห็นได้ชัดว่ามันไร้สาระและนั่นเป็นเหตุผลว่าทำไมจึงมีคำจำกัดความอย่างเป็นทางการซึ่ง Linus ควบคุมโดยใช้เวิร์กโฟลว์แบบรวมศูนย์

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

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

Git กระตุ้นให้ผู้คนเขียนประวัติศาสตร์ซ้ำและข้างต้นอาจเป็นสาเหตุหนึ่งที่ทำให้เกิดสิ่งนั้น VCS ปกติทุกตัวทำให้ประวัติการเขียนใหม่เป็นไปไม่ได้สำหรับทุกคนยกเว้นผู้ดูแลระบบและทำให้แน่ใจว่าผู้ดูแลระบบไม่มีเหตุผลที่จะพิจารณา แก้ไขฉันถ้าฉันผิด แต่เท่าที่ฉันรู้ git ไม่มีทางให้สิทธิ์การเขียนแก่ผู้ใช้ทั่วไป แต่ห้ามไม่ให้เขียนประวัติซ้ำ นั่นหมายความว่านักพัฒนาซอฟต์แวร์ใด ๆ ที่มีความไม่พอใจ (หรือผู้ที่ยังคงดิ้นรนกับช่วงการเรียนรู้) สามารถทิ้งโค้ดเบสทั้งหมดได้ เราจะกระชับอันนั้นได้อย่างไร? ไม่ว่าคุณจะทำการสำรองข้อมูลประวัติทั้งหมดเป็นประจำเช่นคุณเก็บประวัติไว้เป็นกำลังสองหรือคุณห้ามการเข้าถึงการเขียนทั้งหมดยกเว้นคนที่น่าสงสารบางคนที่จะได้รับความแตกต่างทั้งหมดทางอีเมลและรวมเข้าด้วยกัน

ลองดูตัวอย่างโครงการขนาดใหญ่ที่ได้รับการสนับสนุนอย่างดีและดูว่า git ทำงานอย่างไรสำหรับพวกเขา: Android ครั้งหนึ่งฉันตัดสินใจที่จะเล่นกับระบบ Android เอง ฉันพบว่าฉันควรจะใช้สคริปต์จำนวนมากที่เรียกว่า repo เพื่อรับคอมไพล์ของพวกเขา repo บางส่วนทำงานบนไคลเอนต์และบางส่วนบนเซิร์ฟเวอร์ แต่ทั้งสองอย่างนั้นแสดงให้เห็นถึงความจริงที่ว่า git ไม่สมบูรณ์ในความสามารถอย่างใดอย่างหนึ่ง สิ่งที่เกิดขึ้นคือฉันไม่สามารถดึงแหล่งข้อมูลได้ประมาณหนึ่งสัปดาห์จากนั้นก็ล้มเลิกไปทั้งหมด ฉันจะต้องดึงข้อมูลจำนวนมหาศาลจากที่เก็บต่างๆมากมาย แต่เซิร์ฟเวอร์ก็มีคนอย่างฉันมากเกินไป Repo หมดเวลาและไม่สามารถดำเนินการต่อจากจุดที่หมดเวลาได้ ถ้าคอมไพล์กระจายได้มากคุณคงคิดว่า d ได้ทำบางอย่างแบบเพียร์ทูเพียร์เพื่อลดภาระบนเซิร์ฟเวอร์เครื่องหนึ่ง Git สามารถแจกจ่ายได้ แต่ไม่ใช่เซิร์ฟเวอร์ Git + repo เป็นเซิร์ฟเวอร์ แต่ repo ไม่สามารถแจกจ่ายได้เนื่องจากเป็นเพียงชุดแฮ็กเฉพาะกิจ

ภาพประกอบที่คล้ายกันของความไม่เพียงพอของ git คือ gitolite (และบรรพบุรุษของมันซึ่งดูเหมือนจะไม่ได้ผลดีนัก) Gitolite อธิบายถึงงานของมันในการทำให้การปรับใช้เซิร์ฟเวอร์ git ง่ายขึ้น อีกครั้งการมีอยู่ของสิ่งนี้พิสูจน์ให้เห็นว่า git ไม่ใช่เซิร์ฟเวอร์ แต่เป็นไคลเอนต์ ยิ่งไปกว่านั้นมันจะไม่เป็นเช่นนั้นเพราะถ้ามันเติบโตขึ้นมามันจะเป็นการทรยศต่อหลักการก่อตั้ง

แม้ว่าคุณจะเชื่อในสิ่งที่กระจาย แต่คอมไพล์ก็ยังคงเป็นระเบียบ ตัวอย่างเช่นสาขาคืออะไร? พวกเขาบอกว่าคุณสร้างสาขาโดยปริยายทุกครั้งที่คุณโคลนที่เก็บ แต่นั่นไม่สามารถเป็นสิ่งเดียวกับสาขาในที่เก็บเดียวได้ นั่นคืออย่างน้อยสองสิ่งที่แตกต่างกันที่เรียกว่ากิ่งไม้ แต่จากนั้นคุณสามารถกรอกลับใน repo และเริ่มแก้ไขได้ มันเหมือนสาขาประเภทที่สองหรืออะไรที่แตกต่างออกไป อาจขึ้นอยู่กับประเภทของ repo ที่คุณมี - โอ้ใช่ - ดูเหมือนว่า repo ไม่ใช่แนวคิดที่ชัดเจนเช่นกัน มีทั้งตัวปกติและตัวเปล่า คุณไม่สามารถดันเป็นส่วนปกติได้เนื่องจากส่วนที่เปลือยเปล่าอาจไม่ตรงกับโครงสร้างต้นทาง แต่คุณไม่สามารถนำเข้า cvsimport แบบเปลือยได้เพราะพวกเขาไม่ได้คิดถึงสิ่งนั้น ดังนั้นคุณต้อง cvsimport เป็นแบบปกติ โคลนนั้นเป็นไฟล์เปล่าที่นักพัฒนาตีและ cvsexport นั้นไปยังสำเนาที่ใช้งานได้ cvs ซึ่งยังต้องตรวจสอบเป็น cvs ใครจะไปรบกวนได้ ภาวะแทรกซ้อนเหล่านี้มาจากไหน? จากความคิดที่กระจายตัวเอง ในที่สุดฉันก็ทิ้ง gitolite เพราะมันทำให้ฉันมีข้อ จำกัด มากขึ้น

Git กล่าวว่าการแยกสาขาควรมีน้ำหนักเบา แต่หลาย บริษัท มีปัญหาสาขาที่โกงร้ายแรงอยู่แล้วดังนั้นฉันจึงคิดว่าการแยกสาขาควรเป็นการตัดสินใจครั้งสำคัญด้วยการรักษาที่เข้มงวด นี่คือจุดที่ perforce ส่องแสงจริงๆ ...

ในการบังคับใช้คุณแทบไม่จำเป็นต้องมีสาขาเพราะคุณสามารถเล่นกลชุดการเปลี่ยนแปลงได้อย่างคล่องตัว ตัวอย่างเช่นขั้นตอนการทำงานตามปกติคือคุณซิงค์กับเวอร์ชันล่าสุดที่รู้จักบนเมนไลน์จากนั้นเขียนคุณลักษณะของคุณ เมื่อใดก็ตามที่คุณพยายามแก้ไขไฟล์ความแตกต่างของไฟล์นั้นจะถูกเพิ่มเข้าไปใน "ชุดการเปลี่ยนแปลงเริ่มต้น" ของคุณ เมื่อคุณพยายามตรวจสอบในชุดการเปลี่ยนแปลงระบบจะพยายามรวมข่าวสารจากสายหลักเข้ากับชุดการเปลี่ยนแปลงของคุณโดยอัตโนมัติ (เปลี่ยนฐานข้อมูลอย่างมีประสิทธิภาพ) แล้วจึงดำเนินการ เวิร์กโฟลว์นี้บังคับใช้โดยที่คุณไม่จำเป็นต้องเข้าใจด้วยซ้ำ Mainline จึงรวบรวมประวัติของการเปลี่ยนแปลงซึ่งคุณสามารถเลือกทางของคุณได้อย่างง่ายดายในภายหลัง ตัวอย่างเช่นสมมติว่าคุณต้องการเปลี่ยนกลับรายการเก่ากล่าวว่าก่อนหน้าก่อนสุดท้าย คุณซิงค์กับช่วงเวลาก่อนการเปลี่ยนแปลงที่ละเมิดทำเครื่องหมายไฟล์ที่ได้รับผลกระทบเป็นส่วนหนึ่งของชุดการเปลี่ยนแปลง ซิงค์กับช่วงเวลาหลังจากนั้นและรวมเข้ากับ "always mine" (มีบางอย่างที่น่าสนใจมากที่นั่น: การซิงค์ไม่ได้หมายความว่าจะมีสิ่งเดียวกัน - หากไฟล์สามารถแก้ไขได้ (เช่นในชุดการเปลี่ยนแปลงที่ใช้งานอยู่) มันจะไม่ถูกรวมโดยการซิงค์ แต่ทำเครื่องหมายว่าครบกำหนดสำหรับการแก้ไข) ตอนนี้คุณมี รายการการเปลี่ยนแปลงที่ยกเลิกรายการที่กระทำผิด รวมข่าวที่ตามมาและคุณมีรายการการเปลี่ยนแปลงที่คุณสามารถป๋อมแป๋มบนเมนไลน์เพื่อให้ได้เอฟเฟกต์ที่ต้องการ เราไม่ได้เขียนประวัติศาสตร์อะไรเลย รวมข่าวที่ตามมาและคุณมีรายการการเปลี่ยนแปลงที่คุณสามารถป๋อมแป๋มบนเมนไลน์เพื่อให้ได้เอฟเฟกต์ที่ต้องการ เราไม่ได้เขียนประวัติศาสตร์อะไรเลย รวมข่าวที่ตามมาและคุณมีรายการการเปลี่ยนแปลงที่คุณสามารถป๋อมแป๋มบนเมนไลน์เพื่อให้ได้เอฟเฟกต์ที่ต้องการ เราไม่ได้เขียนประวัติศาสตร์อะไรเลย

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

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

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

นอกจากนี้คุณยังมีทริกเกอร์และแบบฟอร์มที่ปรับแต่งได้สำหรับการยืนยันการตรวจสอบโค้ดการอ้างอิง Bugzilla และอื่น ๆ และแน่นอนคุณมีสาขาสำหรับเมื่อคุณต้องการจริงๆ ไม่ใช่เคสใส แต่อยู่ใกล้และติดตั้งและบำรุงรักษาง่าย

สรุปแล้วฉันคิดว่าถ้าคุณรู้ว่าคุณจะทำงานแบบรวมศูนย์ซึ่งทุกคนทำคุณอาจใช้เครื่องมือที่ออกแบบมาโดยคำนึงถึงสิ่งนั้นด้วย Git ถูก overrated เนื่องจากความฉลาดที่น่ากลัวของ Linus พร้อมกับแนวโน้มของผู้คนที่จะติดตามซึ่งกันและกันเหมือนแกะ แต่ raison d'etre หลักของมันไม่ได้ยืนหยัดกับสามัญสำนึกและด้วยการทำตาม git ผูกมือของตัวเองด้วย ความเชื่อที่ยิ่งใหญ่สองประการที่ (ก) ซอฟต์แวร์และ (ข) ข้อมูลต้องเหมือนกันทั้งในไคลเอนต์และเซิร์ฟเวอร์และนั่นจะทำให้มันซับซ้อนและง่อยอยู่เสมอในงานที่รวมศูนย์


4
โอ้อะไรกัน ฉันมีเวลาสองสามนาทีดังนั้นฉันจะพยายามแสดงความคิดเห็นเกี่ยวกับข้อผิดพลาดที่ใหญ่กว่านี้ "ถ้าเคอร์เนลได้รับการจัดการแบบกระจายนั่นหมายความว่าฉันไม่สามารถดาวน์โหลดแหล่งที่มาของเคอร์เนล" อย่างเป็นทางการ "ได้ - ไม่มีเลย - ฉันต้องตัดสินใจว่าฉันต้องการเวอร์ชันของ Linus หรือเวอร์ชันของ Joe หรือเวอร์ชันของ Bill "- ฉันไม่สามารถพูดกับโปรเจ็กต์เคอร์เนล Linux ได้โดยเฉพาะเนื่องจากฉันไม่เคยทำงานกับมันมาก่อน แต่โดยทั่วไปแล้วนี่เป็นวิธีการทำงานของซอฟต์แวร์โอเพนซอร์ส คุณสามารถดาวน์โหลดส้อมใดก็ได้ที่คุณต้องการ
Marnen Laibow-Koser

2
"สิ่งที่เราอยากทำจริงๆกับของเก่าทั้งหมดนั้นคือการเก็บมันไว้ในตู้และลืมไปว่ามันอยู่ตรงนั้นเหมือนกับที่ VCS ทั่วไปทำการที่คอมไพล์ลากมันไปมาบนเครือข่ายทุกวันนั้นอันตรายมาก เพราะมันทำให้คุณต้องตัดมัน” •คุณเคยใช้ Git จริงหรือไม่? Git ไม่จู้จี้ให้คุณตัด repo ของคุณ นอกจากนี้การบีบอัดข้อมูลของ Git ยังมีประสิทธิภาพสูงมาก ไม่ใช่เรื่องแปลกที่ Git repo ที่มีประวัติสาขาที่ซับซ้อนจะมีขนาดเล็กกว่าสำเนาการทำงาน SVN (ที่ไม่มีประวัติ) ของ codebase เดียวกันมาก
Marnen Laibow-Koser

4
"VCS ปกติทุกตัวทำให้ประวัติการเขียนใหม่เป็นไปไม่ได้สำหรับทุกคนยกเว้นผู้ดูแลระบบและทำให้แน่ใจว่าผู้ดูแลระบบไม่มีเหตุผลที่จะพิจารณาแก้ไขฉันถ้าฉันผิด แต่เท่าที่ฉันรู้ git ไม่มีทางให้ผู้ใช้ทั่วไปเขียนได้ เข้าถึง แต่ห้ามไม่ให้เขียนประวัติการเขียนใหม่นั่นหมายความว่านักพัฒนาซอฟต์แวร์ที่มีความไม่พอใจ (หรือผู้ที่ยังดิ้นรนกับช่วงการเรียนรู้) สามารถทิ้งโค้ดเบสทั้งหมดได้ " •คุณคิดผิด 100% เป็นเรื่องง่ายที่จะไม่อนุญาตการบังคับให้ผลักดันไปยัง repo ในขณะที่ยังอนุญาตให้มีการเข้าถึงการเขียน นอกจากนี้ทุกคนสามารถมีสำเนา repo ได้มากเท่าที่ต้องการดังนั้นการทิ้งขยะจะไม่ได้ผล
Marnen Laibow-Koser

3
"Git กล่าวว่าการแยกสาขาควรเป็นเรื่องที่ไม่ซับซ้อน แต่หลาย บริษัท มีปัญหาสาขาที่โกงอย่างรุนแรงอยู่แล้วดังนั้นฉันจึงคิดว่าการแยกสาขาควรเป็นการตัดสินใจครั้งสำคัญด้วยการรักษาที่เข้มงวดนี่คือจุดที่ perforce ส่องแสงอย่างแท้จริง ... " •อะไรคือ “ โกงสาขา”? ทำไมคุณถึงคิดว่าการแตกแขนงควรเป็นการ "ตัดสินใจครั้งสำคัญ" ในทางปฏิบัติมันมีประโยชน์มากที่จะสามารถสร้างสาขา (ส่วนตัวหรือสาธารณะ) สำหรับคุณลักษณะหรือการทดลองใหม่แต่ละรายการเพื่อให้แต่ละคนมีชีวิตอยู่ในจักรวาลอื่นของตัวเอง ไม่เหมือนเช่น SVN, Git ทำให้การรวมเป็นเรื่องง่ายเพื่อให้สิ่งนี้ทำงานได้ดีมาก
Marnen Laibow-Koser

3
ความจริงที่ว่าคำตอบนี้มีเพียงคำตอบเดียวเท่านั้นนอกเหนือจากของฉัน (เห็นได้ชัดว่า @Marnen) ทำให้ฉันประหลาดใจที่คำตอบนี้ผิดอย่างเป็นกลาง
ทางเลือกใน

-8

การใช้ GIT แทนการจัดการบรรทัดโค้ดที่ไม่ดีเป็นเรื่องปกติ ข้อเสียหลายประการของ Perforce เป็นผลมาจากกลยุทธ์การแตกแขนงที่ไม่ดี เช่นเดียวกับเครื่องมือจากส่วนกลางอื่น ๆ หากคุณต้องสร้างกิ่งก้านจำนวนมากแสดงว่าคุณกำลังทำอะไรผิดพลาด ทำไมนักพัฒนาถึงต้องสร้างสาขามากมาย?

นอกจากนี้เหตุใดการตัดการเชื่อมต่อจึงมีความสำคัญต่อไป เพื่อให้ใครบางคนสามารถทำงานบนรถไฟ? นั่นเป็นสถานที่เดียวในทุกวันนี้ที่คุณไม่สามารถเชื่อมต่อไร้สายได้ และแม้แต่รถไฟส่วนใหญ่ก็มี WiFi ที่ดี


9
นักพัฒนาบางคนชอบสร้างสาขาเพื่อให้สามารถแยกและแบ่งกลุ่มการพัฒนาต่างๆต้นแบบการแก้ไขข้อบกพร่อง ฯลฯ ได้ง่ายขึ้นอยู่กับประเภทของงาน สาขาของ Perforce ค่อนข้างมีน้ำหนักมากในการจัดการเมื่อเทียบกับสาขา Git & Mercurial ดังนั้นจึงอาจมีการปรับปรุงประสิทธิภาพการทำงานของแท้ได้
Greg Whitfield

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

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

6
การลงคะแนนเนื่องจาก "หากคุณต้องสร้างสาขาจำนวนมากแสดงว่าคุณกำลังทำอะไรผิดพลาด" นั่นอาจเป็นจริงใน VCS แบบรวมศูนย์ที่มีเครื่องมือในการผสานรวมที่ไม่เพียงพอ (เช่น SVN หรือ CVS - ไม่เคยใช้ Perforce) ไม่เป็นความจริงใน Git ซึ่งการแยกสาขาและการรวมเป็นเรื่องง่ายและเป็นเรื่องธรรมดา สิ่งนี้ให้อิสระสำหรับแต่ละคุณลักษณะที่อยู่ระหว่างการพัฒนาที่จะอยู่ในจักรวาลสำรองของตัวเองจนกว่าจะรวมเข้าด้วยกัน โดยส่วนตัวแล้วฉันจะไม่กลับไปอยู่ในสภาพแวดล้อมที่ฉันไม่สามารถแยกออกได้ด้วยความตั้งใจ
Marnen Laibow-Koser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.