การจัดการหลายคนที่ทำงานในโครงการด้วย GIT


32

ฉันใหม่กับ GIT / GitHub มาก (เหมือนเพิ่งเริ่มเมื่อวาน) ฉันต้องการทราบว่าวิธีที่ดีที่สุดในการจัดการหลายคนที่ทำงานในโครงการเดียวกันกับ Github คืออะไร ขณะนี้ฉันกำลังจัดการโครงการหนึ่งโครงการกับผู้พัฒนาสี่ราย

  1. ฉันจะไปเกี่ยวกับขั้นตอนการทำงานและทำให้แน่ใจว่าทุกอย่างตรงกันได้อย่างไร

    (หมายเหตุ: นักพัฒนาทั้งหมดจะมีหนึ่งบัญชีสากล)

  2. นักพัฒนาแต่ละคนจำเป็นต้องอยู่ในสาขาที่แตกต่างกันหรือไม่?

  3. ฉันจะสามารถจัดการกับ 2 คนที่ทำงานกับไฟล์เดียวกันได้หรือไม่?

กรุณาโพสต์คำตอบอย่างละเอียดฉันไม่ใช่คนขี้อาย ฉันต้องเข้าใจเรื่องนี้ดี


7
บัญชีเดียวสำหรับนักพัฒนาทั้งหมดหรือไม่ อาจใช้งานได้ แต่ส่วนใหญ่ไม่ใช่ความคิดที่ดี
marstato


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

คำตอบ:


29

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

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

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

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

สำหรับคำถามเฉพาะของคุณ:

  1. ไม่ใช้สาขาสำหรับคุณสมบัติการแก้ไข ฯลฯ ที่จะใช้เวลามากกว่าหนึ่งการกระทำ นักพัฒนาซอฟต์แวร์มากกว่าหนึ่งคนสามารถทำงานในสาขาเดียวกัน

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

โชคดี!


สองสามคะแนนที่คุณทำให้มีผู้เปิดหูเปิดตาตัวจริงให้ฉันคิดไปในทิศทางที่แตกต่างกันด้วยกันขอบคุณ!
badZoke

Hapy ถ้ามันสามารถช่วยคุณได้ Git และ DVCS จำเป็นต้องมีความคุ้นเคย แต่ก็มีความยืดหยุ่นสูงเมื่อคุณคุ้นเคย
Harald

ขอบคุณสำหรับสิ่งนี้. ฉันมีคำถามหนึ่งข้อ หากมีนักพัฒนาหลายคนทำงานในสาขาเดียวกัน ทุกครั้งที่นักพัฒนาคนใดคนหนึ่งทำการเปลี่ยนแปลงและผลักดันไปยังสาขาที่ทำงานนักพัฒนาส่วนที่เหลือจำเป็นต้องดึงการเปลี่ยนแปลง (เพื่อให้แน่ใจว่าพวกเขามีรหัสล่าสุดในเครื่องเพื่อทำงาน)
Eswar Rajesh Pinapala

ไม่ไม่ใช่ทุกครั้งเพียงเมื่อคุณต้องการซิงค์ พิจารณาสำเนาสาขาในประเทศของคุณเป็นสาขาส่วนตัวของคุณและสาขาต้นน้ำเป็นสาขาที่คุณต้องการรวมเข้าด้วยกัน การใช้บางสิ่งเช่นที่git fetch upstreamตามมาคุณgit merge upstream/branchควรซิงค์โดยไม่ต้องเขียนประวัติการกระทำในท้องถิ่นของคุณใหม่ หากนั่นไม่ใช่ปัญหาเพียงแค่git pull --rebaseย้ายการเปลี่ยนแปลงที่ไม่ได้กดในเครื่องไปที่ด้านบนของสาขาต้นน้ำ
แฮรัลด์

@badZoke .... สิ่งที่คุณทำเพื่อจัดการกับคำถามที่ 3 ของคุณ (จัดการกับ 2 คนที่ทำงานในไฟล์เดียวกัน) ...
Moumit

25

เราทำงานร่วมกับนักพัฒนา 2 คนและเราใช้เวิร์กโฟลว์นี้:

  • บน Github เรามีสาขาหลักและสาขา dev
  • สาขาหลักเป็นเช่นเดียวกับการผลิตหรือมีรหัสพร้อมใช้งาน
  • สาขา dev อยู่ข้างหน้าของต้นแบบและมีรหัสใหม่ทั้งหมดที่กำลังทำงานอยู่
  • ในพื้นที่เราทั้งสองทำงานในสาขา dev และผลักดันให้ GitHub เมื่อบางสิ่งพร้อม
  • ผู้พัฒนารายอื่นเรียกการเปลี่ยนแปลงใหม่จากสาขานักพัฒนาก่อนที่จะผลักดันรหัสใหม่ของเขา
  • เมื่อสาขา dev นั้นดีเราจะรวมกับสาขาหลัก
  • ในพื้นที่เรามีสาขาฟีเจอร์หลายสาขาที่ออกสาขา ฯลฯ

1
ดีและเรียบง่ายขอบคุณมาก! ฉันจะเริ่มต้นด้วยสิ่งนี้ก่อนที่ฉันจะย้ายเข้าสู่สิ่งที่ซับซ้อน;)
badZoke

จะเกิดอะไรขึ้นถ้าเมื่อผู้พัฒนารายอื่นเรียกการเปลี่ยนแปลงใหม่ก่อนที่จะผลักดันรหัสของเขาการเปลี่ยนแปลงใหม่จะเปลี่ยนรหัสที่เขาเปลี่ยนไปแล้ว
wayofthefuture

+1 นี่เป็นวิธีที่ง่ายที่สุดในการเริ่มต้นและทำงานได้อย่างสมบูรณ์แบบ สิ่งที่คุณใช้เรียกว่า gitflow แบบง่าย ๆ : marcgg.com/assets/blog/git-flow-before.jpg
Jelle

5

ฉันเห็นเฉพาะคำตอบของข้อความที่นี่ดังนั้นฉันคิดว่าฉันโพสต์รูปภาพของ gitflow ที่ดีที่จะเริ่มต้นด้วย รูปภาพอธิบายมากกว่าหนึ่งพันคำ:

Gitflow แบบง่าย

  • โฟลว์นี้ใช้งานได้ดีกับการปรับใช้อย่างต่อเนื่อง
  • สาขาหลักของคุณมีรหัสที่กำลังทำงานบนเซิร์ฟเวอร์การผลิตของคุณ
  • สาขาที่คุณพัฒนามีรหัสที่กำลังทำงานบนเซิร์ฟเวอร์ทดสอบ / ทดสอบ

+1, git flow หรือสิ่งที่คล้ายกันอาจเป็นคำตอบที่ถูกต้องสำหรับคำถามนี้
อาจจะ __Factor

0

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

นอกจากนี้เรายังใช้สาขาโปรแกรมแก้ไขด่วนที่ใช้สำหรับการเปลี่ยนแปลงในทันที

นี่คือลิงค์ไปยังรูปภาพของสิ่งที่ดูเหมือนว่า http://nvie.com/img/git-model@2x.png


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