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


11

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

สิ่งที่ฉันได้ทำไปคือการรักษาสาขา Git ส่วนตัวที่ฉันกระทำการเปลี่ยนแปลงทั้งหมดของฉันด้วยความละเอียดที่เหมาะสม จากนั้นฉันจะใช้cherry-pickเพื่อเพิ่มความมุ่งมั่นแบบโอเพ่นซอร์สที่จะส่งไปยังสาขาหลักและส่งกลับไปที่ Github

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

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

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


1
คุณสามารถส่งผลงานบางส่วนไปยังสาขาอื่นค่อนข้างง่าย - ใช้ rebase git-scm.com/book/en/Git-Branching-Rebasing ตราบใดที่คุณยอมรับก่อนจากนั้นคุณสามารถ rebase ที่ส่งไปยังสาขาอื่นจากนั้นรีเซ็ตสาขาปัจจุบันของคุณเพื่อลบการกระทำ
artbristol

คำตอบ:


2

นี่คือกลยุทธ์ที่อาจเหมาะกับคุณ:

สร้าง repos คอมไพล์ส่วนตัว 2 อันโดย repo หนึ่งอันสำหรับงาน บริษัท และอีกอันเป็น General (ฉันอยากจะยอมรับ) repo

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

โดยมีคำจำกัดความนี้คุณสามารถแยกสิ่งที่คุณจะยอมรับและสิ่งที่คุณไม่จำเป็นต้องกระทำ

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

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

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

ฉันยังเชื่อว่าคอมไพล์สามารถทำอะไรได้มากกว่าที่คุณคิด ฉันดูวิดีโอนี้ใน Vimeo: http://vimeo.com/46010208และเธอทำงานได้อย่างยอดเยี่ยมในการอธิบายสิ่งต่าง ๆ ที่แปลกประหลาดที่คอมไพล์สามารถทำได้

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


1

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

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

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