คำตอบนี้พยายามพูดถึงวิธีทำให้โปรแกรมเมอร์อาวุโสให้ความสนใจgit
ไม่ใช่เกี่ยวกับวิธีการเรียนรู้git
วิธีที่เร็วที่สุด - สำหรับหนังสือ git ที่ยอดเยี่ยมนั้นยอดเยี่ยมหรือบทเรียนจำนวนมาก (=> Google) ลิงก์ที่ดีที่จะไปพร้อมกับคำตอบนี้คือGit เป็นโครงสร้างข้อมูลที่ทำงานได้อย่างหมดจดหรือโดยเฉพาะอย่างยิ่งในระยะสั้นGit เก็บข้อมูลของคุณอย่างไร
ฉันกลัวว่าฉันจะมีมุมมองที่ค่อนข้างเยือกเย็นในเรื่องนี้ ฉันได้รับในรองเท้าของคุณ - ฉันเป็นgit
คนโง่และต้องการที่จะเปลี่ยนทีมออกไปจากsvn
กับลองหน้ามันผลจิ๋ว ในกรณีของฉันมันทำให้ฉันเปลี่ยนการรับรู้ของตัวเองอย่างแข็งขันและยอมรับว่าผู้คนไม่สามารถ "ถูกบังคับให้มีความสุข" ได้ คนไม่ใช่คอมพิวเตอร์มันยากที่จะเขียนโปรแกรม ฉันยังคงมีความสุขที่ได้ลองใช้มันแสดงให้ฉันเห็นว่าฉันทำในสิ่งที่ฉันทำและสิ่งที่ฉันไม่ต้องการทำในชีวิตการทำงาน
มีคนที่เริ่มรับแรงบันดาลใจเมื่อมีสิ่งใหม่เข้ามาเกี่ยวข้องและมีคนที่ถูกลดกำลัง สิ่งนี้ไม่เกี่ยวข้องกับgit
แต่สำหรับgit
คุณโดยเฉพาะคุณมักจะมีผลกระทบของ "ทำไมเราควรใช้มันเลยถ้าsvn
เป็นเรื่องปกติ?" ซึ่งเป็นอุปสรรคทางจิตวิทยาขนาดใหญ่
นอกจากนี้การเดินตามจริงgit
ต้องใช้ความสนใจอย่างมากในโครงสร้างข้อมูลนามธรรม อาจฟังดูไม่น่าเชื่อ แต่ในประสบการณ์ของฉันมีโปรแกรมเมอร์ที่ไม่สนใจเลยและผู้ที่เบื่อหน่ายและมีภาระมากเกินไปโดยองค์ประกอบที่ซับซ้อนกว่าอาร์เรย์ที่เรียบง่าย คุณสามารถโต้เถียงกลับไปกลับมาว่าพวกเขาควรจะทำงานที่พวกเขากำลังทำอยู่หรือไม่ แต่มันคือสิ่งที่มันเป็น
หากผู้คนไม่สนใจพวกเขาก็จะไม่เข้าใจ เรียบง่าย. ฉันพนันได้เลยว่าการไม่สนใจเป็นสาเหตุหลักของคะแนนไม่ดีในโรงเรียนไม่ใช่สติปัญญาที่ขาดหายไป
ที่กล่าวว่านี่เป็นหลักสูตรที่ฉันจะนำไปใช้โดยยึดตามการเสริมสร้างความรู้จากล่างขึ้นบน มันไม่ได้ผลสำหรับฉัน แต่คุณอาจใช้มันเป็นแรงบันดาลใจในการหมุนของคุณเอง
GUI
ในขณะที่วิธีการดังต่อไปนี้ไม่จำเป็นต้องสนับสนุน GUI สำหรับการดำเนินการ ( git add
ในพื้นที่เก็บข้อมูลสวัสดีโลก ... ) จะช่วยอย่างมากที่จะมี GUI สำหรับการแสดงพื้นที่เก็บข้อมูลตั้งแต่เริ่มต้น หากคุณไม่สามารถตัดสินใจได้ว่าจะใช้อะไรให้ใช้วิธีgitk
สุดท้าย หากพวกคุณใช้โปรแกรมแก้ไขภาพชนิดใด ๆ ให้หาgit
องค์ประกอบ GUI ของพวกเขา
โครงสร้างข้อมูล (คงที่) เป็นกุญแจสำคัญ
เริ่มต้นด้วยการอธิบายประเภทข้อมูลภายใน (มีเพียงสามบวกหนึ่งของพวกเขา: blobs, ต้นไม้, commits, แท็กคำอธิบายประกอบสุดท้ายซึ่งไม่เกี่ยวข้องใด ๆ ในขั้นตอนนี้) และโครงสร้างของพวกเขา คุณสามารถทำได้อย่างง่ายดายบนไวท์บอร์ด / ด้วยดินสอ ต้นไม้นั้นง่ายต่อการวาดเนื่องจากไม่สามารถเปลี่ยนแปลงได้คุณสามารถเพิ่มสิ่งต่าง ๆ ได้ตลอดเวลา คุณสามารถเล่นเซสชั่นในพื้นที่เก็บข้อมูลท้องถิ่นที่สร้างขึ้นใหม่และใช้git cat-file
ในการมองเข้าไปในวัตถุที่เกิดขึ้นจริงเพื่อแสดงให้พวกเขาเห็นว่าพวกเขาในความเป็นจริงเป็นเรื่องเล็กน้อยตามที่โฆษณา
หากคุณสามารถช่วยให้พวกเขาเข้าใจว่า
- ... มีเพียงวัตถุ 3 ประเภทในประวัติศาสตร์วัตถุทั้งหมดนั้นเรียบง่ายแทบจะไม่สำคัญและ
- ... คำ
git
สั่งย่อยส่วนใหญ่เพียงแค่ "นวด" วัตถุเหล่านั้นในทางเดียวด้วยการดำเนินการที่ไม่สำคัญ (โดยทั่วไปมีเพียงอันเดียว: เพิ่มคอมมิชชันใหม่ที่ใดที่หนึ่ง) และ ...
- ... ทุกสิ่งสามารถมองเห็นได้ทันทีต่อหน้าคุณด้วย
ls
และgit cat-file
...
แล้วพวกเขาก็จะมีการแปลจิตของสิ่งที่เป็นจริงในพื้นที่เก็บข้อมูล เมื่อมาถึงจุดนี้ seniours อาจจำได้ว่าภายในsvn
มีเวทมนตร์อาถรรพ์ (เคยมีปัญหากับล็อคในพื้นที่เก็บข้อมูล svn หรือกับ "reintegrating" กิ่งไม้และเช่นนั้น?) และนี่อาจกระตุ้นให้พวกเขาเล็กน้อย
ปัญหาหนึ่งโดยเฉพาะกับคนที่เคยใช้svn
คือทำความคุ้นเคยกับความคิดที่ว่าหนึ่งกระทำ (วัตถุไม่ใช่การกระทำ) เสมอคือต้นไม้ไดเรกทอรีทั้งหมด ในsvn
คนจะใช้ในการกระทำไฟล์แต่ละไฟล์ มันเป็นแนวทางที่แตกต่างอย่างสิ้นเชิง โอ้และความจริงที่ว่าคำว่า "ส่งมอบ" เดียวกันนั้นใช้สำหรับทั้งวัตถุคงที่และการกระทำก็ไม่ได้ช่วยอะไรเช่นกัน
ปัญหาอื่น ๆ สำหรับsvn
ผู้ชายคือการsvn
ใช้ประวัติเชิงเส้นไม่ใช่ต้นไม้ นี่คือสิ่งที่แตกต่างกันไป ดังนั้นนี่คือเวลาที่จะชี้ความแตกต่างเหล่านี้เป็นจำนวนมาก
การกระทำที่อธิบายในแง่ของโครงสร้าง
เมื่อพวกเขาเข้าใจว่าส่วนใดของที่git
เก็บข้อมูลถูกสร้างขึ้นมาถึงเวลาแล้วที่จะต้องแสดงให้พวกเขาเห็นอย่างชัดเจนว่าคำgit
สั่งย่อยแต่ละรายการทำอะไรในแง่ของสิ่งเหล่านั้น
ฉันกำลังพูดถึงadd
, commit
ร่วมกับไดเร็กทอรี่การทำงานในพื้นที่และสเตจ (ตรวจสอบให้แน่ใจว่าพวกเขาเข้าใจว่าไดเร็กตอรี่การทำงานนั้นไม่เหมือนกับพื้นที่การจัดเตรียมซึ่งไม่เหมือนกับที่เก็บ).
เมื่อพวกเขาเข้าใจว่าคำสั่งเหล่านี้เพียงแค่ปลูกต้นไม้ (ซึ่งในขั้นตอนนี้ประกอบด้วย3ประเภทคือ - blobs, ต้นไม้, การกระทำ, ไม่เพียง แต่กระทำ) คุณสามารถทำสิ่งแรกgit push
และgit pull
(ในโหมดกรอไปข้างหน้า! ) เพื่อแสดงให้เขารู้ว่าgit
เป็นอักษรเท่านั้นผลักดันวัตถุรอบที่แฮชที่มีจริงๆเพียง hashes เนื้อหาที่คุณสามารถคัดลอกสิ่งนี้รอบกับคำสั่งคัดลอกไฟล์ระบบและอื่น ๆ
เห็นได้ชัดว่าอยู่ห่างจากตัวเลือกที่ไม่จำเป็นของคำสั่งเหล่านี้เรากำลังพูดถึงgit add hello.txt
ที่นี่
สาขา
โปรดทราบว่าการแตกแขนงนั้นยากสำหรับsvn
คนโดยเฉพาะเนื่องจากมีความแตกต่างอย่างสิ้นเชิง svn
รูปแบบมากง่ายต่อการมองเห็นภาพที่มีพื้นเป็นอะไรที่ต้องเห็นภาพ - มันอยู่ในมุมมองธรรมดา git
รุ่นไม่มาก ตรวจสอบให้แน่ใจว่าพวกเขารู้ตัวตั้งแต่เริ่มต้นว่ากิ่งไม้และแท็กเป็นเพียง "โน้ตติดหนึบ" ชี้ไปที่อื่นและไม่ได้มีอยู่จริงในแง่ของประวัติศาสตร์ที่คงที่และไม่เปลี่ยนรูป
จากนั้นทำตัวอย่างหลังจากตัวอย่างง่าย ๆ เพื่อแสดงสิ่งที่คุณสามารถทำได้กับพวกเขา ดูเหมือนว่าคุณคุ้นเคยกับตัวเองgit
คุณไม่ควรมีปัญหาในการหาแรงบันดาลใจที่นั่น ตรวจสอบให้แน่ใจว่าพวกเขาดูสิ่งนี้เสมอในแง่ของการเติบโตของต้นไม้
หากพวกเขามีสิ่งนั้นคุณสามารถอธิบายได้ว่าgit pull
เป็นgit fetch && git merge
อย่างไร วิธีที่เก็บข้อมูลทั้งหมดมีวัตถุเดียวกันอย่างแท้จริง ( git fetch
เกือบจะเหมือนกับการคัดลอกเนื้อหาไปด้วยscp
ภายในไดเรกทอรีวัตถุ git) และอื่น ๆ
อาจเป็นไปได้ว่าถ้าถึงตอนนี้คุณยังไม่สามารถกระตุ้นความสนใจได้คุณก็สามารถยอมแพ้ได้ แต่ถ้าพวกเขาจัดการเพื่อให้ห่างไกลพวกเขาก็มีเครื่องมือทางจิตใจทุกอย่างที่พวกเขาควรมี กลัวว่าจะเกี่ยวข้องอีกต่อไป ส่วนที่เหลือ (เวิร์กโฟลว์คอมไพล์ ... ) ควรลงเนินแล้ว
คำสุดท้าย
ฟังดูเหมือนความพยายามมากมายและเป็นจริง อย่าขายสิ่งนี้ในฐานะ "เราต้องการสิ่งนี้สำหรับโครงการนี้" แต่ "สิ่งนี้จะช่วยคุณในการพัฒนาเป็นการส่วนตัวและจะช่วยคุณในการโต้ตอบเพิ่มเติมทั้งหมดของคุณ" คุณต้องใช้เวลามากมายในการทำสิ่งนี้และเวลาคือเงิน หากคุณไม่ได้รับการยอมรับจากผู้บริหารในเรื่องนี้มันอาจจะไม่คุ้มค่า คุณควรคุยกับเจ้านายของคุณ
หากคุณตัดสินใจที่จะเลิกสอนนักพัฒนาซอฟต์แวร์ที่ดูเหมือนจะไม่สามารถเข้าใจได้ แต่คุณต้องใช้อย่างแน่นอนgit
ในอนาคตให้ลองเปลี่ยนการโต้ตอบทั้งหมดด้วยgit
คำสั่งด้วยสคริปต์ที่ปรุงแล้วหรือ GUI บางอย่างซึ่งแยกgit
เฉพาะทั้งหมดออกไป เทข้อผิดพลาดการควบคุมทั้งหมด ฯลฯ ในสคริปต์และพยายามที่จะได้รับการทำงานที่