ทำงานกับ Git ในหลาย ๆ เครื่อง


15

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

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

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

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


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

2
@ user827992 ฉันรู้อย่างเต็มที่ 100% จากข้อเท็จจริงดังกล่าว ฉันไม่คิดว่าฉันจะแนะนำอะไรเกี่ยวกับการรวมศูนย์ สิ่งเดียวที่ฉันหมายถึงคือถ้าคุณกำลังใช้ไฟล์แชร์ไฟล์เครื่องหนึ่งเป็นโฮสต์ในแง่ที่ว่ามันกำลังเก็บไฟล์ทางกายภาพ นั่นคือแนวคิดทั้งหมดนอกเหนือจาก dvcs
Tesserex

หัวข้อนี้stackoverflow.com/questions/1550378/...มีความคิดที่ดีบางอย่าง กระทำ, ผลักดัน, ดึง, รีเซ็ตและลบสาขาเป็นหนึ่งในนั้น (เป็นไปได้โดยอัตโนมัติ)
phil294

คำตอบ:


14

ฉันจัดการกับโซลูชันที่คุณเสนอทั้งสองรายวัน มีแนวคิดหลักสองข้อในการจัดการกับมันได้ดี

  1. ใช้หัวข้อสาขา ฉันเชื่อว่าประวัติศาสตร์การผลิตควรจะเก่าแก่ ด้วยเหตุนี้ฉันจึงใช้เวลาอย่างมากในการทำให้productionประวัติของสาขาของฉันมีตรรกะแบบจำลองได้และ debuggable อย่างไรก็ตามเมื่อใช้หลายเครื่องคุณจำเป็นต้องส่งมอบงานระหว่างทำ ใช้สาขาหัวข้อ คุณสามารถpullและpushสาขานี้จากทั้งสองเครื่องด้วยความพยายามเพียงเล็กน้อยและเมื่อมันพร้อมที่จะรวมเข้าmasterหรือรีproduction บูตเพื่อสร้างประวัติศาสตร์ที่บำรุงรักษาได้มากขึ้น
  2. การใช้หนึ่ง repo ที่แชร์ผ่านเครือข่ายนั้นใช้ได้เว้นแต่คุณจะแชร์กับผู้ใช้คนอื่นด้วย เราใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันสำหรับสคริปต์โดยตั้งชื่อscriptsพื้นที่เก็บข้อมูลอย่างสร้างสรรค์ ในตอนแรกดูเหมือนว่าความคิดที่ดีเนื่องจาก repo ไม่เปลี่ยนแปลงบ่อยนัก แต่เมื่อเวลาผ่านไปมันก็กลายเป็นฝันร้าย เป็นเรื่องง่ายที่จะเขียนทับงานของกันและกันและคุณจะเสียค่าใช้จ่ายมากเท่ากับการควบคุมปริมาณการรับส่งข้อมูลทางอากาศซึ่งจะปรับใช้พื้นที่เก็บข้อมูลในขณะที่คุณกำลังทำงานอยู่

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

หากคุณพบว่าตัวเองทำงานในสาขาหัวข้อมากกว่าหนึ่งตลอดทั้งวัน แต่ไม่ต้องการที่จะผลักดันให้แต่ละทีไประยะไกลจะตามค่าเริ่มต้นผลักดันสาขาที่ตรงกันทั้งหมดเพื่อgit push <remote> ค่าเริ่มต้น<remote>นี้จะเปลี่ยนเป็น git รุ่นใหม่กว่าแต่สามารถลบล้างได้โดยการตั้งค่าpush.defaultในไฟล์กำหนดค่าหรือโดยการระบุการจับคู่refspec:

git push <remote> :

3

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

ใช่การผลักหลายสาขาไปยังศูนย์กลางอาจทำให้เบื่อ แต่ก็ไม่ควรยากเกินไปสำหรับการเขียนสคริปต์ ฉันใช้push.shสคริปต์สำหรับสิ่งนั้นซึ่งฉันทำงานทุกครั้งที่ฉันทำงานกับเครื่องจักร


2

ฉันมาที่นี่จากทิศทางที่แตกต่างกันเล็กน้อย (และฉันใช้ mercurial แต่ในทางปรัชญามันก็เหมือนกัน) นี่ไม่ใช่ความคิดของฉันฉันใช้และทำงานเพื่อสิ่งของส่วนตัวของฉัน

ฉันสร้างโคลนที่เก็บข้อมูลของฉันในโฟลเดอร์ SkyDrive (มันอาจเป็น dropbox หรือเครื่องมือซิงค์เวทมนตร์อื่นที่คุณเลือก) ฉันได้กำหนดค่าอินสแตนซ์บนเครื่องสองเครื่องของฉันให้กดไปยังที่เก็บ SkyDrive โดยอัตโนมัติ

เมื่อฉันสลับกล่องมันเป็นเรื่องของการดึงและอัปเดต - ในทางทฤษฎีคุณจะต้องทำงานในลักษณะเชิงเส้นเสมอแม้ว่าจะอยู่ในที่เก็บหลายแห่ง

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

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


0

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

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

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

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