ทำไมทุกคนถึงใช้ Git ในลักษณะรวมศูนย์?


289

ฉันใช้ Git ในอดีตที่ผ่านมาทั้งสอง บริษัท เพื่อควบคุมเวอร์ชัน ดูเหมือนว่าจากสิ่งที่ฉันได้ยินมาว่าประมาณ 90% ของ บริษัท ใช้ Git มากกว่าระบบควบคุมเวอร์ชันอื่น

หนึ่งในจุดขายที่ใหญ่ที่สุดของ Git ก็คือมันมีการกระจายอำนาจเช่นที่เก็บทั้งหมดมีค่าเท่ากัน ไม่มีแหล่งเก็บข้อมูลส่วนกลาง / แหล่งที่มาของความจริง นี่คือฟีเจอร์ของLinus Torvalds ที่ได้รับการปกป้อง

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

คำถามของฉันคือ:

  1. ทำไมคนไม่ใช้เวิร์กโฟลว์แบบกระจายสำหรับ Git ในทางปฏิบัติ
  2. ความสามารถในการทำงานในลักษณะกระจายนั้นสำคัญกับการควบคุมเวอร์ชันที่ทันสมัยหรือไม่หรือแค่ฟังดูดี

แก้ไข

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


31
ฉันรู้สึกแบบเดียวกันและไม่เข้าใจสิ่งนี้
Snoop

57
โดยส่วนตัวแล้วฉันไม่ทราบถึงกรณีการใช้งานใด ๆ สำหรับรีโมตหลาย ๆ ตัวนอกจาก forks เพื่อสร้าง PRs ไปยังรีโมตหลัก สิ่งที่แจกจ่ายยังมีประโยชน์เพราะมันหมายความว่าฉันได้รับประวัติที่สมบูรณ์บนเครื่องของฉันโดยไม่ต้องคุยกับเครือข่ายและฉันสามารถทำงานออฟไลน์ได้ถ้าฉันต้องการจริงๆและมันง่ายกว่ามากในการโยกย้ายจากโฮสต์ repo ออนไลน์หนึ่งไป อื่น คุณมีอะไรในใจเมื่อคุณอ้างถึง "เวิร์กโฟลว์แบบกระจาย"?
Ixrec

43
ฉันค่อนข้างแน่ใจว่า Torvalds ตั้งใจไว้ตั้งแต่แรกแล้วว่าจะมี "แหล่งที่มาของความจริง" ที่เก็บ Linux Kernel
Steven Burnap

67
ในท้ายที่สุดซอฟต์แวร์ของตัวเองถูกรวมศูนย์ ลูกค้าไม่ซื้อสาขาหรือรีโมท แต่พวกเขาซื้อผลิตภัณฑ์ขั้นสุดท้ายประกอบเข้าด้วยกัน จะต้องมีเส้นทางกลางไปข้างหน้าเสมอ
Brandon

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

คำตอบ:


257

อ่า แต่ในความเป็นจริงคุณกำลังใช้คอมไพล์ในลักษณะการกระจายอำนาจ!

ให้เราเปรียบเทียบบรรพบุรุษของ git ใน mindshare, svn การโค่นล้มมีเพียง "repo" เพียงแหล่งเดียวของความจริง เมื่อคุณทำคอมมิชชันมันเป็นหนึ่งเดียว repo ส่วนกลางซึ่งนักพัฒนาคนอื่น ๆ ก็ทำเช่นเดียวกัน

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

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

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

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


15
การรวม SVN ยังมีผลกับผู้พัฒนาที่เกี่ยวข้องกับการเปลี่ยนแปลงที่ขัดแย้งกันเท่านั้น หนึ่งการกระทำที่ทำให้มันกลายเป็น repo ไม่มีผสานขัดแย้งกันสามารถไปลงใน repo จนความขัดแย้งได้รับการแก้ไข (คุณยังสามารถกระทำควบคู่ไปกับการแยกสาขา / เส้นทาง แต่ที่ไม่จริงความขัดแย้งในขณะนี้ไม่ได้หรือไม่)
เบนยต์

30
ฉันพบความแตกต่างที่สำคัญเมื่อมีเซิร์ฟเวอร์กลางอยู่เนื่องจาก GIT อนุญาตให้ทำเวอร์ชันโลคัลต่อเนื่องขณะที่เครือข่ายหยุดทำงานและ SVN ไม่ (ระบบควบคุมเวอร์ชันอื่นบางระบบแย่กว่าและหยุดการทำงานทั้งหมดเมื่อเครือข่ายไม่สามารถเข้าถึงได้ เพราะพวกเขาจะไม่ยอมให้คุณเปลี่ยนไฟล์จนกว่าคุณจะตรวจสอบมันออก)
Ben Voigt

17
@ BenVoigt โอ้มันหยุดทำงานได้แล้ว โปรดจำไว้ว่าคุณจะsvn upต้องใช้ repo รุ่นล่าสุดก่อนจึงจะสามารถเช็คอินได้เมื่อมีคนอื่นทำการเช็คอินในขณะที่คุณกำลังพยายามแก้ไขข้อขัดแย้งในการผสานและให้ข้อขัดแย้งในการรวมอีกชุดหนึ่ง ... คุณจะหยุด หรือคุณสูญเสียสิ่งที่เหลือจากสติของคุณ
Michael Hampton

21
ไม่ผู้คนสามารถทุ่มเทให้กับสาขาที่คุณกำลังรวมการเปลี่ยนแปลงได้โดยไม่ต้องรบกวนกระบวนการทำงานของคุณ
Ben Voigt

29
เบ็นถูกต้อง repo SVN ได้รับการจัดการอย่างถูกต้องและใช้งานโดยทีมงานที่ได้รับการศึกษาอย่างถูกต้องในการพัฒนาซอฟต์แวร์ไม่ควรผสานความขัดแย้งบนลำตัวได้อย่างมีประสิทธิภาพ คุณจะได้พวกเขาก็ต่อเมื่อมีคนทำอะไรผิดพลาดและต้องถูกไล่ออก (: P) inb4 ง่ายขึ้นเมื่อคุณไม่ต้องให้ความรู้กับผู้คนถึงวิธีการใช้เครื่องมือของพวกเขา ใช่มีการสอนเกี่ยวกับ Git มากมายมากกว่า SVN!
Lightness Races ในวงโคจร

118

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

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

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

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


2
คำตอบที่ดีโดยรวม แต่ฉันค่อนข้างแน่ใจว่า Git นั้นมีการใช้อย่างกว้างขวางก่อนที่จะมีการรวมกันอย่างต่อเนื่อง ทีมของเราใช้ CI ขอบคุณสำหรับการตรวจสอบ: D
Gardenhead

5
@gardenhead: คุณพลาดจุด: อาร์กิวเมนต์เดียวกันจะเก็บไว้หากมีการรวมสร้างด้วยตนเอง "CI" เป็นเพียงการทำให้เป็นอัตโนมัติสำหรับกระบวนการซึ่งเก่ากว่ามากที่ Git
Doc Brown

25
"ทุกคนสามารถเห็นรหัสชั่วคราวของฉัน" - และพวกเขายังสามารถดึงรหัสชั่วคราวของคุณรวมกับรหัสชั่วคราวของพวกเขาและเรียกใช้การทดสอบ นี่เป็นความเจ็บปวดใน VCSes แบบรวมศูนย์เนื่องจากต้องการสาขาและการเปลี่ยนแปลงใน One True Copy เผยแพร่แล้วคุณเพียงกำหนดค่ารีโมตพิเศษจากนั้นเริ่มผสานรวมแก้ไขและเก็บเชอร์รี่ คุณมีการติดตามสิ่งที่คุณทำ แต่ไม่มีใครเคยเห็นว่าคุณเป็นคนทำอะไรไม่ได้จนกว่าคุณจะเลือกที่จะเผยแพร่ โดยทั่วไปผมขอแนะนำให้ไม่มีใครควรประกาศ DVCS ไม่มีจุดหมายจนกว่าพวกเขาจะได้นำมาใช้จริง SVN สำหรับโครงการขนาดใหญ่ ...
สตีฟเจสซอพ

9
เนื่องจากไม่มี "หนึ่งสร้างจริง" ของเคอร์เนลลินุกซ์ เนื่องจากทุกคนสร้างมันขึ้นมาเอง repus ของ Linus จึงไม่เป็นที่ยอมรับมากกว่าใคร หากคุณขายผลิตภัณฑ์ที่ใช้งานไม่ได้
Miles Budnek

2
@Superbest ที่ดีที่สุด: มาก (ถ้าไม่ทั้งหมด) ของการออกแบบของคอมไพล์ขึ้นอยู่กับ Bitkeeper Git ถูกสร้างขึ้นหลังจากข้อโต้แย้งของ linux-bitkeeper
whatsisname

40

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

แต่ 90% + ของเวลาแน่นอนว่าเราไปผ่าน repo ส่วนกลาง เมื่อฉันไม่สนใจเกี่ยวกับการเปลี่ยนแปลงใด ๆ หรืองานของเพื่อนร่วมงานโดยเฉพาะจะสะดวกกว่าและมันก็ยิ่งดีขึ้นเพื่อดึง "การเปลี่ยนแปลงทั้งหมดของเพื่อนร่วมงานของฉันที่ได้รับการตรวจใน repo ส่วนกลาง" แทนที่จะดึงการเปลี่ยนแปลงจาก N เพื่อนร่วมงาน DVCS ไม่ได้พยายามป้องกัน "ดึงจาก repo หลัก" เป็นเวิร์กโฟลว์ที่พบบ่อยที่สุด แต่ก็พยายามป้องกันไม่ให้เป็นเวิร์กโฟลว์ที่มีอยู่เท่านั้น

"แจกจ่าย" หมายความว่า repos ทั้งหมดมีความเท่าเทียมกันทางเทคนิคเท่าที่gitเกี่ยวข้องกับซอฟต์แวร์ แต่ไม่ได้ปฏิบัติตามว่าพวกเขาทั้งหมดมีความสำคัญเท่ากันเท่ากับผู้พัฒนาและเวิร์กโฟลว์ของเรา เมื่อเราปล่อยให้ลูกค้าหรือเซิร์ฟเวอร์ที่ผลิต repo ที่เราใช้นั้นมีความสำคัญแตกต่างจาก repo ที่นักพัฒนาหนึ่งคนใช้บนแล็ปท็อปของพวกเขาเท่านั้น

หาก "การกระจายอำนาจอย่างแท้จริง" หมายถึง "ไม่มี Repos พิเศษ" แล้วผมไม่คิดว่านั่นคือสิ่งที่ไลนัสหมายถึงแชมป์ที่ระบุว่าในจุดของความเป็นจริงที่เขาไม่รักษา Repos พิเศษที่มีความสำคัญมากขึ้นในโครงการใหญ่ของสิ่งที่เกินกว่าที่ โคลนสุ่มของ Linux ที่ฉันทำเมื่อวานนี้และวางแผนที่จะใช้เพื่อพัฒนาแพตช์เล็ก ๆ น้อย ๆ แล้วลบทิ้งเมื่อเขายอมรับแพตช์ gitไม่ได้สิทธิพิเศษ repo ของเขามากกว่าฉัน แต่ Linus ไม่สิทธิ์มัน "สถานะปัจจุบันของ Linux" ของเขาไม่ใช่ของฉัน ดังนั้นการเปลี่ยนแปลงตามธรรมชาติจึงมีแนวโน้มผ่าน Linus จุดแข็งของ DVCS เหนือ VCS ส่วนกลางไม่ใช่ว่าจะต้องไม่มีศูนย์โดยพฤตินัย แต่การเปลี่ยนแปลงนั้นไม่จำเป็นต้องผ่านศูนย์ใด ๆ เพราะ (มีข้อขัดแย้ง) ใคร ๆ ก็สามารถรวมกันได้

ระบบ DVCS ก็ถูกบังคับด้วยเช่นกันเนื่องจากมีการกระจายอำนาจเพื่อให้มีคุณสมบัติที่สะดวกสบายบางอย่างตามข้อเท็จจริงที่ว่าคุณต้องมีประวัติที่สมบูรณ์ (เช่น repo) ในพื้นที่เพื่อที่จะทำอะไรก็ได้ แต่ถ้าคุณคิดเกี่ยวกับมันไม่มีเหตุผลพื้นฐานที่ทำให้คุณไม่สามารถกำหนดค่า VCS ส่วนกลางด้วยแคชในเครื่องที่เก็บประวัติทั้งหมดสำหรับการดำเนินการแบบอ่านอย่างเดียวที่ได้รับอนุญาตให้ล้าสมัย (ฉันคิดว่า Perforce มีตัวเลือกสำหรับโหมดนี้ แต่ฉันไม่เคยใช้ Perforce เลย) หรือในหลักการคุณสามารถกำหนดค่าgitด้วยของคุณ.git/ไดเร็กทอรีบนระบบไฟล์ที่ติดตั้งแบบรีโมตเพื่อจำลอง "ฟีเจอร์" ของ SVN ซึ่งจะไม่ทำงานเมื่อคุณไม่มีการเชื่อมต่อเครือข่าย ผลที่ตามมาคือ DVCS บังคับให้ระบบท่อประปามีความแข็งแกร่งกว่าที่คุณสามารถทำได้ด้วย VCS ส่วนกลาง นี่คือผลข้างเคียง (ยินดีมาก) และช่วยกระตุ้นการออกแบบ DVCS แต่การกระจายความรับผิดชอบในระดับเทคนิคไม่เหมือนกับการกระจายอำนาจความรับผิดชอบทั้งหมดของมนุษย์อย่างสมบูรณ์


7
พวกเขามีความเท่าเทียมกันทางเทคนิคไม่เทียบเท่าทางสังคม
อยากรู้อยากเห็น dannii

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

1
"จำเป็นต้องมีประวัติที่สมบูรณ์ [... ] ในพื้นที่เพื่อที่จะทำอะไร" - ไม่จริง; DSCM ที่ทันสมัยรองรับการ repos บางส่วน ("เช็คเอาต์ตื้น" ในข้อตกลง bzr, "โคลนนิ่งตื้น" ในข้อกำหนด git)
Charles Duffy

27

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

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

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

ด้วยความเสี่ยงที่จะฟังดูเก่า ๆ เมื่อพูดออกมาคุณไม่รู้จริงๆว่าคุณมีมันได้ง่ายแค่ไหน


1
คำถามที่ว่าการสร้างสาขาใน CVCS แบบดั้งเดิมนั้นยากเพียงใดต่อนโยบาย: ฉันได้ทำงานกับ repo SVN ต้นน้ำ (โดยธรรมชาติผ่าน git-svn clone!) และฉันมีสิทธิ์ที่จะสร้างสาขาใด ๆ ที่ฉัน ต้องการแม้ว่ามันจะเป็นโครงการขนาดใหญ่ ฉันไม่ได้รับอนุญาตให้สัมผัสกับสาขาการรวมกลุ่มที่กำหนดจำนวนหนึ่งให้ลำตัวเพียงลำพังโดยไม่ต้องพูดคุยกับผู้บังคับบัญชาของฉันก่อน บริษัท อื่นอาจมีนโยบายอื่นที่อาจเข้มงวดกว่า แต่ก็ไม่จำเป็นต้องเป็นเช่นนั้น
cmaster

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

1
@gardenhead คุณสามารถสร้าง repo SVN ของคุณเองและพยายามทำลายมัน;) (และสังเกตว่ามันยากกว่าการสร้าง repo git และโคลนมัน ... ) - คุณสมบัติที่สำคัญอีกประการหนึ่งที่ฉันสังเกตเห็น (อย่างน้อยก็ใน สภาพแวดล้อมขององค์กรโดยเฉพาะอย่างยิ่ง) คือการแบ่งปันไฟล์นั้นค่อนข้างอึดอัดใจหรือทำในลักษณะที่ทำให้พื้นที่เก็บข้อมูลเพิ่มขึ้น (เช่นเครื่องสแกนไวรัสล็อคอยู่บนไดรฟ์เครือข่ายเป็นต้น)
Wayne Werner

4
@gardenhead: ดีพิจารณาตัวเองโชคดีที่คุณไม่ได้ติดอยู่ในโครงการมรดกกับนักพัฒนาซอฟต์แวร์เก่าที่บอกวิธีการทำสิ่งเก่า ๆ ได้ดี ... บางครั้งคุณไม่สามารถช่วย แต่รู้สึกว่าพวกเขาเป็นเพียงแค่ ดีใจที่พวกเขาไม่จำเป็นต้องเรียนรู้เทคโนโลยีใหม่ ๆ !
leftaroundabout

1
@gardenhead เห็นได้ชัดว่าโครงการกำลังได้รับการปล่อยตัวในอัตราที่บ้ามาก ความสามารถในการเรียนรู้อย่างต่อเนื่องเป็นสิ่งจำเป็นหากคุณต้องการหางานที่ยอดเยี่ยม
Wayne Werner

19

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

โครงการจำลองสถานการณ์ทางทหารทีมของฉันทำงานเมื่อหลายปีก่อน ทั้งหมดรหัส (เรากำลังพูดคุย> US $ 1b codebase) ต้อง (ตามกฎหมาย / ข้อตกลงระหว่างประเทศที่ผู้ชายในชุดสูทสีเข้มมาถ้าคุณไม่ได้) จะอยู่บนเครื่องที่แยกจากร่างกายใด ๆ ที่เชื่อมต่ออินเทอร์เน็ต นี่หมายถึงสถานการณ์ปกติของเราแต่ละคนมีพีซี 2 เครื่องเครื่องหนึ่งสำหรับการเขียน / เรียกใช้ / ทดสอบรหัสอีกเครื่องสำหรับสิ่งต่าง ๆ ของ Google ตรวจสอบอีเมลและอื่น ๆ และมีเครือข่ายท้องถิ่นภายในทีมของเครื่องเหล่านี้เห็นได้ชัดว่าไม่ได้เชื่อมต่อกับอินเทอร์เน็ต

"แหล่งที่มาหลักของความจริง" เป็นเครื่องจักรบนฐานกองทัพในห้องที่ไม่มีหน้าต่างกั้นดินใต้ดินทั้งหมด (อาคารเสริม, ญาดา - ญาดา) เครื่องที่ยังมีการเชื่อมต่ออินเทอร์เน็ตไม่

มันจะเป็นหน้าที่ของใครบางคนในการขนส่ง (ร่างกาย) ขับรถด้วย repo git (ที่มีการเปลี่ยนแปลงรหัสทั้งหมดของเรา) ไปยังฐานทัพซึ่งห่างออกไปหลายร้อยกิโลเมตรดังนั้นคุณสามารถจินตนาการได้


นอกจากนี้ในมากระบบขนาดใหญ่ที่คุณมีจำนวนมากของทีมงาน โดยทั่วไปแล้วพวกเขาแต่ละคนจะมี repo "ส่วนกลาง" ของตัวเองซึ่งจะกลับไปที่ repo ส่วนกลาง (ระดับพระเจ้า) ที่แท้จริง "ส่วนกลาง" ฉันรู้จักผู้รับเหมารายอื่นอย่างน้อย 1 คนที่ทำ git repo dash ฮาร์ดไดรฟ์ตัวเดียวกันกับรหัสของพวกเขาเช่นกัน

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

ธรรมชาติของ git ที่ถูกตัดการเชื่อมต่อหมายความว่ามันสามารถใช้ในสภาพแวดล้อมที่ไม่สามารถใช้เครื่องมือควบคุมแหล่งที่มาของโมเดลที่เชื่อมต่อ ( เช่น SVN สำหรับหนึ่ง) หรือไม่สามารถใช้งานได้อย่างง่ายดาย


3
ฉันเป็นสมาชิกของ Mile High (Software) Club - ฉันมีรหัสที่ 35,000 ฟุต แน่นอนว่าตอนนี้เครื่องบินมี Wifi แต่นั่นไม่ใช่กรณีเสมอไป และเป็นเรื่องดีที่รู้ว่าอย่างน้อยถ้าเราผิดพลาดมีความเป็นไปได้ที่ทีมของฉันจะได้รับรหัสของฉันไม่เป็นอันตราย
Wayne Werner

@WayneWerner นั่นเป็นเรื่องจริง ฉันคิดถึงการให้สถานการณ์ทั่วไปเพิ่มเติมซึ่งเป็นไปไม่ได้ที่จะเชื่อมโยง (ใกล้ -) เสมอ เช่นบนเครื่องบินเรือออกไปในทะเลสถานีอวกาศสถานที่ห่างไกลในแอฟริกาและอื่น ๆ
Tersosauros

18

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


14

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

นี่ไม่ใช่กรณีการใช้งานทั่วไปเมื่อสร้างผลิตภัณฑ์ที่เป็นรูปธรรมด้วยการเปิดตัวเป็นทางการเฉพาะ แต่ในโลก F / OSS มันเป็นบรรทัดฐานไม่ใช่ข้อยกเว้น


4
นั่นคือคำตอบที่ถูกต้องเช่นกันจากมุมมองทางประวัติศาสตร์ เคอร์เนล Linux มีแหล่งที่มาหลายแห่งเป็นเวลานาน (เรียกว่า "ต้นไม้" โดยนักพัฒนาเช่น "ต้นไม้ Linus '" หรือ "ต้นไม้ของ Andrew") Linux ต้องการบางสิ่งบางอย่างเพื่อสนับสนุนการพัฒนาแบบกระจายเมื่อเขาพัฒนาคอมไพล์
sleske

@ Luaan หลังจากคิดถึงเรื่องนี้ซักพักฉันก็รู้ว่าคุณพูดถูก ฉันเปลี่ยนถ้อยคำไปนิดหน่อย - นี่ทำให้ความแตกต่างดีขึ้นหรือไม่?
ปุย

@fluffy ฟังดูดีสำหรับฉัน)
Luaan

9

ทำไมทุกคนใช้คอมไพล์ในลักษณะรวมศูนย์?

เราไม่เคยเจอกันทำไมคุณถึงพูดว่าทุกคน? ;)

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

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

ฉันคิดว่านี่เป็นคุณสมบัติอื่นที่ไม่ควรลืม

ในขณะที่คุณไม่สามารถทำได้โดยไม่ต้องใช้ CVS และ SVN นอกกรอบ Git สามารถใช้งานแบบรวมศูนย์เหมือนที่เคยเป็นมาโดยไม่มีปัญหาใด ๆ

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

คุณสมบัติอื่น ๆ ที่มาพร้อมกับ Git:

  • เซ็นสัญญาเข้ารหัส
  • การรีบูต (การสั่งซื้อใหม่และการมอบหมายสควอชการแก้ไขคอมมิทไม่ใช่เฉพาะข้อความ)
  • เชอร์รี่เก็บ
  • ตัดแบ่งประวัติ
  • สาขาท้องถิ่นและการเปลี่ยนแปลงที่สำคัญ (เรียกว่า "การเก็บเข้าลิ้นชัก" ใน Wikipedia)

โปรดดูตารางทั้งสามนี้ในWikipedia - การเปรียบเทียบซอฟต์แวร์ควบคุมเวอร์ชัน :

ดังนั้นอีกครั้งบางทีลักษณะการกระจายอำนาจไม่ได้เป็นเพียงคุณสมบัติที่ทำให้ผู้คนใช้งาน

  1. ทำไมคนไม่ใช้เวิร์กโฟลว์แบบกระจายสำหรับ Git ในทางปฏิบัติ

ทุกคนที่มีส่วนร่วมหรือเป็นเจ้าภาพโครงการที่ใหญ่กว่าใน Bitbucked, GitHub ฯลฯ จะทำสิ่งนั้นอย่างยอดเยี่ยม ผู้ดูแลรักษาพื้นที่เก็บข้อมูล "main" ซึ่งเป็นโคลนนิ่งของผู้บริจาคและส่งคำขอดึง

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

  1. ความสามารถในการทำงานในลักษณะกระจายนั้นสำคัญต่อการควบคุมเวอร์ชันที่ทันสมัย ​​...

เช่นเคย: ขึ้นอยู่กับข้อกำหนด

ใช้ VCS แบบกระจายอำนาจหากมีประเด็นใดที่เกี่ยวข้อง:

  • ต้องการคอมมิชชันหรือนำทางประวัติออฟไลน์ (เช่นจบ submodule ในกระท่อมบนภูเขาในช่วงวันหยุด)
  • จัดเตรียม repos ส่วนกลาง แต่ต้องการแยกพื้นที่เก็บข้อมูล "ที่แท้จริง" ออกจากกันเพื่อตรวจสอบการเปลี่ยนแปลง (เช่นสำหรับโครงการขนาดใหญ่หรือทีมที่แจกจ่าย)
  • ต้องการจัดทำ (สำเนา) ทั้งประวัติศาสตร์และสาขาเป็นครั้งคราวในขณะที่ป้องกันการเข้าถึงโดยตรงไปยัง repo กลาง (คล้ายกับที่สอง)
  • ต้องการรุ่นสิ่งโดยไม่ต้องเก็บที่ระยะไกลหรือตั้งค่าพื้นที่เก็บข้อมูลเฉพาะ (โดยเฉพาะกับ Git เพียงแค่git init .จะเพียงพอที่จะพร้อมรุ่นสิ่ง)

มีบางอย่างเพิ่มเติม แต่สี่ควรจะเพียงพอ

... หรือว่ามันฟังดูดีนะ

แน่นอนมันฟังดูดี - สำหรับผู้เริ่มต้น


SVN ไม่ได้รับsvn initในบางจุด?
immibis

5

ความยืดหยุ่นเป็นคำสาปเช่นเดียวกับพร และเป็น Git มีความยืดหยุ่นมากก็มักจะห่างไกลความยืดหยุ่นเกินไปสำหรับสถานการณ์โดยทั่วไป โดยเฉพาะโครงการ Git ส่วนใหญ่ไม่ใช่ Linux

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

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


1
ฉันยอมรับว่าความยืดหยุ่นของ Git จำเป็นต้องลดลงสำหรับกรณีการใช้งานส่วนใหญ่ ในงานสุดท้ายของฉันเราไม่มีแนวทางในการใช้คอมไพล์และมีความขัดแย้งและความแตกแยกอย่างต่อเนื่องเนื่องจากสิ่งนี้ ที่ บริษัท ใหม่ของฉันเราใช้โมเดล Git Flow และทำให้การพัฒนามีความคล่องตัวและปราศจากความเครียด
Gardenhead

1
มันไม่ใช่ "ความยืดหยุ่นเชิงทฤษฎี" ที่อนุญาตให้ไม่ใช่แบบต้นไม้ จำกัด ตัวเองเป็น "ต้นไม้เท่านั้น" และคุณจะไม่สามารถผสานการเปลี่ยนแปลงของคุณได้ดังนั้นการแสดง VCS ทั้งหมดของคุณจึงไม่มีประโยชน์
Wildcard

2
@ Wildcard: การผสานไม่มีปัญหากับต้นไม้เลยทำไมเป็นเช่นนั้น แน่นอนว่าคุณไม่สามารถผสานระหว่างโหนดสุ่มได้ระหว่างผู้ปกครอง / ลูก
MSalters

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

2
@ Wildcard: MSalters กล่าวว่าที่เก็บข้อมูลมักจะเชื่อมต่อกันเป็นแผนผัง เขาบอกว่า repos มักจะมีรีโมต "upstream" เพียงอันเดียวที่พวกเขากดไปที่ (หรือดึงคำขอไปที่) ฉันไม่มีสถิติว่าเป็นเรื่องจริงหรือไม่ แต่เป็นการอ้างสิทธิ์แยกต่างหากจากสิ่งที่เกี่ยวข้องกับจำนวนผู้ปกครองที่รวมเข้าด้วยกัน
Steve Jessop

4

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

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

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


3

สำหรับผู้ร่วมงานที่จะดึงจาก repo คอมไพล์ในเครื่องของฉันหมายความว่าฉันต้องมี daemon git ทำงานในระดับรากเป็นงานพื้นหลัง ฉันเป็น daemons ที่น่าเกรงขามมากที่ทำงานบนคอมพิวเตอร์ของฉันเองหรือบนแล็ปท็อปที่ บริษัท จัดให้ ทางออกที่ง่ายที่สุดคือ "ไม่"! สำหรับเพื่อนร่วมงานที่จะดึงจาก repo คอมไพล์ในเครื่องของฉันก็หมายความว่าที่อยู่อินเทอร์เน็ตของฉันต้องได้รับการแก้ไข ฉันเดินทางฉันทำงานจากที่บ้านและบางครั้งฉันก็ทำงานจากที่ทำงาน

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

ในมือที่สาม repo git ในพื้นที่ของฉันเป็นพื้นที่เก็บข้อมูลเต็มรูปแบบ ฉันสามารถทำงานใหม่สร้างสาขาใหม่สำหรับงานทดลองและย้อนกลับงานเมื่อฉันทำสิ่งต่าง ๆ แม้ในขณะที่ฉันกำลังทำงานในเครื่องบินที่ระยะทาง 30,000 ฟุตเหนือกลางอากาศ ลองทำด้วยระบบควบคุมเวอร์ชันรวมศูนย์


"ฉันเป็น daemons ที่น่าเกรงขามมากที่ทำงานบนคอมพิวเตอร์ของฉันเองหรือบนแล็ปท็อปที่ บริษัท จัดให้" - นอกเหนือจากสิ่งอื่นการใช้บริการบนแล็ปท็อปของฉันหมายความว่าบริการไม่สามารถใช้งานได้เมื่อฉันปิดฝา! DynDNS อาจช่วยในหลาย ๆ สถานที่ (เท่าที่คุณยังสามารถติดกับ NAT) แต่มันก็ไม่ได้ช่วยในการปิดการ์ดเครือข่ายของคุณ ...
Steve Jessop

มีหลายวิธีในการทำให้ repo git สามารถมองเห็นได้โดยไม่ต้องใช้ daemon พิเศษใด ๆ มันสามารถเข้าถึงได้ผ่านทางแชร์ไฟล์ใด ๆ (smb, sshfs, ฯลฯ ) และยังสามารถใช้เป็นที่เก็บ HTTP แบบธรรมดาได้เช่นกัน
ปุย

2

ซับซ้อน:

ด้วยพื้นที่เก็บข้อมูลกลางเวิร์กโฟลว์ทั่วไปอาจจะเป็น

branch off from the central master branch
change the code
test
possibly go back to changing the code
commit
merge any new changes from the central master branch
test
possibly go back to changing the code
merge changes into the central master branch and push

ความซับซ้อนเกี่ยวกับจำนวนนักพัฒนาใน O (1)

หากนักพัฒนาแต่ละคนมีสาขาหลักของตนเองมันจะกลายเป็นสำหรับนักพัฒนา 0:

branch off from master branch 0
merge from master branch 1
...
merge from master branch N-1
change the code
test
possibly go back to changing the code
commit
merge any changes from master branch 0
merge any changes from master branch 1
...
merge any changes from master branch N-1
test
possibly go back to changing the code
merge changes into master branch 0

วิธีการแบบเพียร์ทูเพียร์คือ O (N)

สอดคล้อง:

ตอนนี้ให้พิจารณาว่ามีความขัดแย้งผสานระหว่างสาขาหลักของอลิซและสาขาหลักของบ๊อบหรือไม่ นักพัฒนา N แต่ละคนสามารถแก้ไขข้อขัดแย้งต่างกัน ผลลัพธ์: วุ่นวาย มีวิธีในการบรรลุความมั่นคงในที่สุด แต่จนกว่าจะเกิดขึ้นทุกครั้งที่นักพัฒนาสามารถเสียเวลา


หากคุณกำลังจะลงคะแนนคุณช่วยกรุณาแสดงความคิดเห็นเกี่ยวกับสาเหตุที่?
Theodore Norvell

ไม่ว่าฉันจะรังเกียจการโหวต ฉันแค่อยากรู้ว่าคำตอบนั้นผิด
Theodore Norvell

1

ง่าย:

บริษัท ต่างๆเป็นองค์กรส่วนกลางที่มีกระบวนการทำงานแบบรวมศูนย์

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

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

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


-2

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

อาจเป็นเพราะเรากำลังสร้างผลิตภัณฑ์หนึ่งตัวดังนั้นเราจึงต้องมีสำเนาของซอฟต์แวร์สำหรับลูกค้า

อาจเป็นเพราะโปรแกรมเมอร์ง่ายกว่ามากที่จะไปที่เดียวเพื่อรับการเปลี่ยนแปลงของทุกคนแทนที่จะต้องเชื่อมต่อกับเครื่องต่าง ๆ มากมาย

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

การรวมศูนย์เป็นสิ่งที่ดีจนกระทั่งมีปัญหา… ..

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.