นี่จะฟังดูเป็นเรื่องง่าย แต่ได้ยินฉัน:
กระตุ้นให้พวกเขาเริ่มทดลองใช้คอมไพล์
สิ่งหนึ่งที่น่าสนใจเกี่ยวกับคอมไพล์คือมันง่ายที่จะทำให้การปฏิบัติการในท้องถิ่นปลอดภัยอย่างสมบูรณ์แบบ เมื่อฉันเริ่มใช้ git สิ่งหนึ่งที่ฉันคิดว่าทำคือการซิปไดเร็กตอรี่ทั้งหมดเพื่อสำรองในกรณีที่ฉันทำอะไรบางอย่างผิดพลาด ฉันค้นพบในภายหลังว่านี้เป็น kludge อย่างมากและเกือบจะไม่จริงที่จำเป็นเพื่อปกป้องการทำงานของคุณ แต่มันก็มีคุณธรรมของการเป็นมากปลอดภัยและมากง่ายแม้ว่าคุณไม่ได้รู้ว่าสิ่งที่อยู่ในห่าคุณกำลังทำและวิธีการ คำสั่งที่คุณต้องการลองจะเปิดออก push
สิ่งเดียวที่คุณต้องหลีกเลี่ยงเมื่อคุณทำเช่นนี้คือ หากคุณไม่ได้ทำอะไรเลยนี่เป็นวิธีที่ปลอดภัย 100% ที่จะลองทำทุกสิ่งที่คุณต้องการ
ความกลัวในการลองสิ่งต่าง ๆ เป็นหนึ่งในอุปสรรคที่ใหญ่ที่สุดในการเรียนรู้คอมไพล์ มันจะช่วยให้คุณเพื่อให้การควบคุมมากขึ้นกว่าทุกอย่างที่มันเป็นชนิดของที่น่ากลัว ความจริงก็คือคุณสามารถยึดติดกับการปฏิบัติงานที่ปลอดภัยไม่กี่อย่างสำหรับการใช้ชีวิตประจำวันส่วนใหญ่ของคุณ
ด้วยการให้ความรู้สึกปลอดภัยแก่พวกเขาพวกเขาจะเต็มใจลองคิดวิธีการทำสิ่งต่าง ๆ ด้วยตนเอง และพวกเขาจะได้รับอำนาจมากขึ้นในการค้นหาขั้นตอนการทำงานส่วนบุคคลในเครื่องท้องถิ่นที่เหมาะกับพวกเขา และถ้าทุกคนไม่ได้จะเป็นสิ่งเดียวกันในประเทศที่ดีตราบใดที่พวกเขาเป็นไปตามมาตรฐานกับสิ่งที่พวกเขาผลักดัน หากใช้การบีบอัด repo ทั้งหมดก่อนที่จะทำการผ่าตัดเพื่อให้พวกเขารู้สึกอย่างนั้นมันก็ดี พวกเขาสามารถเลือกวิธีที่ดีกว่าในการทำสิ่งต่าง ๆ เมื่อพวกเขาไปและเมื่อพวกเขาลองสิ่งต่าง ๆ อะไรก็ตามเพื่อให้ตัวคุณเองเริ่มทดลองสิ่งต่าง ๆ และดูว่ามันทำอะไร
นี่ไม่ได้หมายความว่าการฝึกอบรมจะไร้ค่า ในทางตรงกันข้ามการฝึกอบรมสามารถช่วยแนะนำคุณเกี่ยวกับคุณสมบัติและรูปแบบและบรรทัดฐาน แต่มันไม่ได้เป็นการทดแทนการนั่งลงและการทำสิ่งต่าง ๆ ในการทำงานประจำวันของคุณ ทั้ง git และ SVN ไม่ได้เป็นสิ่งที่คุณสามารถไปเรียนแล้วคุณรู้ทุกอย่างเกี่ยวกับ คุณต้องใช้พวกเขาในการแก้ปัญหาของคุณเพื่อทำความคุ้นเคยกับพวกเขาและคุณสมบัติใดที่เหมาะกับปัญหาใด ๆ
หยุดท้อใจพวกเขาจากการเรียนรู้ส่วนลึกและของ git
ฉันพูดถึงว่าไม่ได้ผลักอะไรเลยซึ่งจริงๆแล้วมันขัดแย้งกับหนึ่งในสิ่งที่คุณสอนพวกเขานั่นคือ "Commit & Push" เสมอ ฉันเชื่อว่าคุณควรหยุดบอกให้พวกเขาทำเช่นนี้และบอกให้พวกเขาเริ่มทำตรงกันข้าม Git มี 5 "สถานที่" โดยที่การเปลี่ยนแปลงของคุณสามารถ:
- บนดิสก์ปราศจากข้อผูกมัด
- ฉาก แต่ไม่ได้มุ่งมั่น
- ในการกระทำท้องถิ่น
- ในที่ซ่อนของท้องถิ่น
- ที่เก็บข้อมูลระยะไกล (เฉพาะการส่งมอบและแท็กเท่านั้นที่ถูกผลักและดึงระหว่างที่เก็บที่แตกต่างกัน)
แทนที่จะสนับสนุนให้พวกเขาดึงและผลักดันทุกอย่างในขั้นตอนเดียวกระตุ้นให้พวกเขาใช้ประโยชน์จากสถานที่ทั้ง 5 แห่งนี้ ส่งเสริมให้พวกเขาไปที่:
สิ่งนี้จะกระตุ้นให้พวกเขาตรวจสอบงานของพวกเขาก่อนที่ทุกคนจะสามารถใช้งานได้ซึ่งหมายความว่าพวกเขาจะได้รับข้อผิดพลาดได้เร็วขึ้น พวกเขาจะเห็นความมุ่งมั่นและคิดว่า "รอนั่นไม่ใช่สิ่งที่ฉันต้องการ" และไม่เหมือนใน SVN พวกเขาสามารถย้อนกลับไปลองอีกครั้งก่อนที่พวกเขาจะผลักดัน
เมื่อพวกเขาคุ้นเคยกับแนวคิดของการทำความเข้าใจว่าการเปลี่ยนแปลงอยู่ที่ไหนพวกเขาสามารถเริ่มตัดสินใจได้ว่าจะข้ามขั้นตอนและรวมการดำเนินการบางอย่างเมื่อใดเนื่องจากเมื่อคุณดึงเพราะคุณรู้ว่าคุณต้องการดึงข้อมูล + ผสานหรือเมื่อคลิกตัวเลือก Commit & Push .
นี่คือหนึ่งในผลประโยชน์มหาศาลของ git เหนือ SVN และ git ได้รับการออกแบบโดยคำนึงถึงรูปแบบการใช้งานนี้ ตรงกันข้าม SVN จะถือว่าที่เก็บส่วนกลางดังนั้นจึงไม่แปลกใจหากเครื่องมือสำหรับ git นั้นไม่ได้รับการปรับให้เหมาะสมสำหรับเวิร์กโฟลว์เดียวกัน ใน SVN หากการกระทำของคุณผิดการขอความช่วยเหลือที่แท้จริงเพียงอย่างเดียวของคุณคือการกระทำใหม่เพื่อยกเลิกข้อผิดพลาด
การทำเช่นนี้จริง ๆ แล้วจะนำไปสู่กลยุทธ์ถัดไป:
กระตุ้นให้พวกเขาใช้สาขาท้องถิ่น
กิ่งก้านสาขาในท้องถิ่นช่วยบรรเทาจุดปวดจำนวนมากในการทำงานกับไฟล์ที่ใช้ร่วมกัน ฉันสามารถทำการเปลี่ยนแปลงทั้งหมดที่ฉันต้องการในสาขาของตัวเองและมันจะไม่ส่งผลกระทบต่อทุกคนตั้งแต่ฉันไม่ได้ผลักดันพวกเขา จากนั้นเมื่อถึงเวลาฉันสามารถใช้กลยุทธ์การผสานและการรีบูตเดียวกันทั้งหมดได้ง่ายขึ้นเท่านั้น:
- ฉันสามารถลดสาขาในพื้นที่ของฉันซึ่งทำให้การรวมเข้ากับเรื่องไร้สาระ
- ฉันสามารถใช้การผสานแบบธรรมดา (สร้างการคอมมิตใหม่) ในต้นแบบเพื่อนำการเปลี่ยนแปลงของสาขาท้องถิ่นของฉันไปใช้
- ฉันสามารถสควอชรวมสาขาในพื้นที่ของฉันทั้งหมดเป็นหนึ่งเดียวกับมาสเตอร์ถ้าฉันคิดว่าสาขาของฉันยุ่งเกินกว่าจะกอบกู้
การใช้กิ่งก้านสาขาในท้องถิ่นก็เป็นจุดเริ่มต้นที่ดีในการหากลยุทธ์การแยกสาขาอย่างเป็นระบบ ช่วยให้ผู้ใช้ของคุณเข้าใจความต้องการการแตกแขนงของตัวเองได้ดีขึ้นดังนั้นคุณสามารถเลือกกลยุทธ์ตามความต้องการและระดับความเข้าใจ / ทักษะในปัจจุบันของทีมและไม่เพียงแค่วาง Gitflow เพราะทุกคนเคยได้ยิน
สรุป
กล่าวโดยย่อคือคอมไพล์ไม่ใช่ SVN และไม่สามารถปฏิบัติเช่นนั้นได้ คุณต้อง:
- กำจัดความกลัวด้วยการสนับสนุนการทดลองอย่างปลอดภัย
- ช่วยให้พวกเขาเข้าใจว่าระบบคอมพิวเตอรมีความแตกต่างกันอย่างไรเพื่อให้สามารถเห็นได้ว่าการเปลี่ยนแปลงเวิร์กโฟลว์ปกติของพวกเขานั้นเป็นอย่างไร
- ช่วยให้พวกเขาเข้าใจคุณลักษณะที่มีอยู่เพื่อช่วยแก้ไขปัญหาได้ง่ายขึ้น
ทั้งหมดนี้จะช่วยให้คุณใช้งานการใช้งานคอมไพล์ได้ดีขึ้นเรื่อย ๆจนกว่าจะถึงจุดที่คุณสามารถเริ่มใช้ชุดมาตรฐาน
คุณสมบัติเฉพาะ
ในระยะสั้นแนวคิดต่อไปนี้อาจช่วยได้
rebase
คุณพูดถึงการปฏิเสธและคุณไม่เข้าใจจริงๆในคำถามของคุณ ดังนั้นนี่คือคำแนะนำของฉัน: ลองสิ่งที่ฉันเพิ่งอธิบาย ทำการเปลี่ยนแปลงภายในเครื่องขณะที่บางคนผลักการเปลี่ยนแปลงบางอย่าง กระทำการเปลี่ยนแปลงของคุณในประเทศ บีบอัดไดเร็กทอรีที่เก็บของคุณเป็นแบ็คอัพ เรียกการเปลี่ยนแปลงของบุคคลอื่น ตอนนี้ลองรันคำสั่ง rebase แล้วดูว่าเกิดอะไรขึ้นกับคอมมิทของคุณ! คุณสามารถอ่านโพสต์บล็อกที่ไม่มีที่สิ้นสุดหรือรับการฝึกอบรมเกี่ยวกับ rebase และวิธีการที่คุณควรใช้หรือไม่ควรใช้ ดังนั้นลองมันออกมา
merge.ff=only
อันนี้จะเป็นเรื่องของรสนิยมส่วนตัว แต่ฉันจะแนะนำอย่างน้อยก็ชั่วคราวเนื่องจากคุณพูดถึงคุณแล้วว่ามีปัญหาในการจัดการกับความขัดแย้ง ฉันแนะนำให้ตั้งค่าmerge.ff
เป็นonly
:
git config --global merge.ff only
"ff" ย่อมาจาก "fast forward" การผสานไปข้างหน้าอย่างรวดเร็วคือเมื่อคอมไพล์ไม่จำเป็นต้องรวมการเปลี่ยนแปลงจากคอมมิทที่ต่างกัน มันเพียงเลื่อนตัวชี้ของสาขาไปยังการกระทำใหม่ตามเส้นตรงในกราฟ
สิ่งนี้ในทางปฏิบัติคือป้องกันไม่ให้คอมไพล์พยายามสร้างคอมมิชชันโดยอัตโนมัติ ดังนั้นถ้าฉันทำอะไรบางอย่างในพื้นที่แล้วดึงการเปลี่ยนแปลงของคนอื่นแทนที่จะพยายามสร้างการรวม (และอาจบังคับให้ผู้ใช้จัดการกับข้อขัดแย้ง) การผสานจะล้มเหลว fetch
ผลคอมไพล์จะได้ดำเนินการเพียง เมื่อคุณไม่มีข้อผูกพันในท้องถิ่นการผสานจะดำเนินการตามปกติ
สิ่งนี้จะช่วยให้ผู้ใช้มีโอกาสตรวจสอบข้อผูกพันที่แตกต่างกันก่อนที่จะพยายามรวมพวกเขาและบังคับให้พวกเขาตัดสินใจเกี่ยวกับวิธีจัดการที่ดีที่สุดในการรวมพวกเขา ฉันสามารถรีบูตไปข้างหน้าด้วยการผสาน (ใช้git merge --no-ff
เพื่อข้ามการกำหนดค่า) หรือฉันสามารถชะลอการรวมการเปลี่ยนแปลงของฉันตอนนี้และจัดการในภายหลัง ฉันคิดว่าการชนความเร็วเล็กน้อยนี้จะช่วยให้ทีมของคุณหลีกเลี่ยงการตัดสินใจผิดเกี่ยวกับการรวม คุณสามารถให้ทีมของคุณปิดได้เมื่อพวกเขาทำได้ดีกว่าในการจัดการการรวม