ในฐานะนักพัฒนา แต่เพียงผู้เดียว (ตอนนี้) ฉันจะใช้ Git ได้อย่างไร [ปิด]


60

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

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

นอกจากนี้ยังมีวิธีปฏิบัติใดเป็นพิเศษที่ฉันต้องเริ่มทำเมื่อมีความคาดหมายในการเพิ่มผู้อื่นในโครงการของฉันในอนาคตหรือไม่


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

1
ปิดเพราะน่าสนใจ :)

@ user93458 เช่นเคย! หัวข้อที่ปิดมักจะเป็นสิ่งที่ฉันกำลังค้นหา
Miroslav Popov

คำถามที่ยอดเยี่ยมที่ไม่ควรถูกปิด
เล่มที่

คำตอบ:


64

นอกจากนี้ยังมีวิธีปฏิบัติใดเป็นพิเศษที่ฉันต้องเริ่มทำเมื่อมีความคาดหมายในการเพิ่มผู้อื่นในโครงการของฉันในอนาคตหรือไม่

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

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

นี่เป็นเพียงตัวอย่างสั้น ๆ ของสิ่งที่คุณสามารถเป็นโปรแกรมเมอร์เพียงผู้เดียว ฉันแน่ใจว่าจะต้องมีการปฏิบัติที่ดีขึ้น

ฉันขอแนะนำให้คุณบทความนี้: แบบจำลอง Git branching ที่ประสบความสำเร็จ


+1 - เหมาะสมแล้ว ฉันจะดูบทความนั้นด้วยเช่นกันมันมีประโยชน์มาก
VirtuosiMedia

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

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

+1 สำหรับบทความ; @Klaim - yup ใช้งานได้ดีกับ hg ด้วย ควรเรียกว่า "รูปแบบการแตกแขนง DCVS ที่ประสบความสำเร็จ"
ไวแอตต์บาร์เน็ตต์

+1 ขอบคุณสำหรับลิงค์มันเปลี่ยนวิธีที่ฉันจะทำงานกับคอมไพล์ไม่ได้ใจคุณมาก แต่อย่างที่พวกเขาบอกว่าช่วยนิด ๆ หน่อย ๆ !
Newtopian

14

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

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

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

ดังนั้นฉันตัดสินต่อไปนี้:

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

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

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

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

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

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

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

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

ตอนนี้ฉันใช้ทั้งการรวม Eclipse กับ Git เพื่อดูว่าเกิดอะไรขึ้นในแบบเรียลไทม์และดำเนินการบางอย่างเช่น diffs, สำรวจประวัติสำหรับไฟล์, ฯลฯ และบรรทัดคำสั่งสำหรับการแยก, การรวม, การผลัก, การรับ . การเขียนสคริปต์ขั้นพื้นฐานบางอย่างและฉันไม่เคยมีประสิทธิภาพมากนักเกี่ยวกับการควบคุมซอร์สและฉันไม่เคยควบคุมซอร์สของฉันได้มากนัก

ขอให้โชคดีหวังว่านี่จะช่วยได้


4

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


4

สำหรับโมเดลที่ง่ายกว่าคุณสามารถดูว่า GitHub ทำอะไร "GitHub flow" นั้นง่ายมากและมีคำแนะนำที่ยอดเยี่ยมที่นี่: https://guides.github.com/introduction/flow/index.html

สรุป (จากบล็อกของ Scott Chacon ):

GitHub Flow คืออะไร

  • ทุกสิ่งในสาขาหลักสามารถนำไปใช้ได้
  • หากต้องการทำงานกับสิ่งใหม่ ๆ ให้สร้างกิ่งที่มีคำอธิบายโดยละเอียด (เช่น: new-oauth2-scopes)
  • มุ่งมั่นที่สาขานั้นในพื้นที่และผลักดันงานของคุณเป็นประจำไปยังสาขาที่มีชื่อเดียวกันบนเซิร์ฟเวอร์
  • เมื่อคุณต้องการข้อเสนอแนะหรือความช่วยเหลือหรือคุณคิดว่าสาขาพร้อมสำหรับการรวมให้เปิดคำขอดึง
  • หลังจากที่คนอื่นได้ตรวจสอบและลงชื่อออกจากคุณสมบัติคุณสามารถรวมมันเป็นหลัก
  • เมื่อมีการผสานและผลักดันให้เป็น 'ต้นแบบ' คุณสามารถและควรปรับใช้ทันที
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.