Git: สาขาหรือทางแยก?


17

ฉันมีโครงการเกมที่จะมีสองเวอร์ชัน:

  1. เกมเวอร์ชั่นหลักที่เรียบง่าย
  2. เกมขั้นสูง

ฉันมีรุ่นที่ 1 ในที่เก็บสาธารณะของฉันและฉันเท่านั้นที่จะทำงานกับมัน สำหรับรุ่นที่ 2 เพื่อนของฉันสองคนและฉันจะทำงานกับมัน ส่วนที่สำคัญคือฉันต้องการให้ทั้งสองเวอร์ชันอยู่ในที่เก็บของฉัน

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

ตัวเลือกของฉันที่นี่มีอะไรบ้าง ฉันจะเก็บทั้งสองเวอร์ชันไว้ในที่เก็บของฉันได้อย่างไร


3
ส้อมเป็นกิ่งก้านสาขาที่เก็บไว้ในที่อื่น

@MichaelT ตกลง ส้อมมีจุดมุ่งหมายที่จะรวมในบางจุดเช่นกิ่งไม้หรือไม่?
Varaquilex

22
Fork เป็นแนวคิด GitHub ไม่ใช่แนวคิด Git มันลอกแบบและวางไว้ในบัญชีของคุณ ดังนั้นการโคลนคือสิ่งที่คุณกำลังมองหา ดูstackoverflow.com/questions/6286571/git-fork-is-git-clone
pdr

@Varaquilex Way คุณต้องการเก็บทั้งสองเวอร์ชันไว้ในที่เก็บเดียวหรือไม่? นอกจากนี้forkการสร้างที่เก็บข้อมูลจะสร้างที่เก็บข้อมูลใหม่ในบัญชีของคุณ
มาห์ดี

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

คำตอบ:


11

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

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

มีสถานการณ์ที่ที่เก็บมีสองสาขาที่แตกต่างกันเล็กน้อย - เช่นซอร์สโค้ดรุ่น 32- บิตและ 64- บิตอย่างไรก็ตามฉันยังคงแนะนำให้คุณไปที่ที่เก็บแยกต่างหากหากเป็นตัวเลือก


6

คำตอบของคำถาม "ฉันควรโคลนหรือแยก" เหมือนกับคำตอบของคำถามนี้ "ฉันต้องการเวอร์ชันส่วนบุคคลของโครงการนี้หรือไม่" yes = fork, no = clone ที่เก็บ

ใน git สาขาเป็นสิ่งที่มีน้ำหนักเบาที่มักจะชั่วคราวและอาจถูกลบ A fork (on gitHub) เป็นโครงการใหม่ที่ยึดตามโครงการก่อนหน้า คุณโคลนที่เก็บเพื่อทำงานกับมันในฐานะสมาชิกทีม

โครงการสาธารณะหลายโครงการทำให้คุณแยกโครงการเพื่อป้องกันการเปลี่ยนแปลงการทำงานจากโครงการหลัก

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


ฉันจะแยกโครงการของตัวเองได้อย่างไร
Varaquilex

เลือกพื้นที่เก็บข้อมูลใน GitHub แล้วคลิกส้อม (ปุ่มขวาบนสำหรับฉัน)
DWB

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

0

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


1
หลายคนใช้เวลาในการตอบสนอง -1 ไรอัน แต่ไม่ได้ใช้เวลาในการแสดงความคิดเห็นว่าทำไมและพฤติกรรมนี้ขัดต่อแนวทางของ SO หากในคำถามของ OP "แกนกลาง" เหมือนกันในต้นไม้ทั้งสองมีทั้ง "ง่าย" และ "ขั้นสูง" ห่อหุ้มรอบแกนกลางแล้วคำตอบนี้มีเหตุผลอย่างน้อย
Scott Prive

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