git101 – Introduction to git ฉบับเด็ก (อยาก) Geek

วันนี้ช่างเป็นวันที่อากาศแสนจะสดใส เมฆฝนลอยอยู่ต่ำบดบังแสงแดดยามเช้าซะเหลือเกิน .. ฮ่าๆๆๆ กะตั๊กจึงจำเป็นต้องลากสังขารตัวเองออกจากเตียง แล้วมาทำสิ่งที่ควรจะทำ ก่อนความขี้เกียจจะมีไปมากกว่านี้..

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

เอาล่ะ.. ทีนี้หลายคนคงสงสัยว่า  “git” คืออะไร? เคยได้ยินแต่ github มันอันเดียวกันหรือเปล่า? ใช้ยังไงนะ? เห็นคนนู้นคนนี้ใช้กัน แต่เราล่ะทำไม่เป็น วันนี้เราจะมาชี้แจงแถลงไขกันแบบ step by step และหวังว่าทุกคนคงเข้าใจไม่ยากจนเกินไปนะคะ🙂

logo

git คืออะไร?

git เป็น distributed revision control หรือ source code management (SCM) หรือที่รู้จักกันคือ เป็น version control นั่นเอง ถ้าแปลกันเป็นภาษาไทยแล้ว git ก็คือระบบที่ใช้ในการควบคุม จัดการ ฯลฯ การเปลี่ยนแปลง อัพเดทเวอร์ชั่นของโค้ดที่เราเขียนกันค่ะ แทนที่เราจะมานั่งเปลี่ยนชื่อไฟล์ว่าเป็นเวอร์ชั่นอะไร ถ้าเห็นบ่อยๆ คือ ใส่วันที่ลงไปกับชื่อไฟล์ เพื่อดูว่าไฟล์ไหนที่เป็นเวอร์ชั่นล่าสุดกันแน่ ทำไปทำมาเริ่มงงเอง สรุปวันนึงทำหลายเวอร์ชั่นซะงั้น.. ไม่พ้นต้องใส่เวลาลงไปด้วย ดูแล้วทำไมชีวิตที่ดูเหมือนจะ Geek ช่างยุ่งยากและยุ่งเหยิงซะเหลือเกิน.. ถึงเวลาแล้ว.. ที่เราควรจะปรับเปลี่ยนวิถีชีวิตของการเขียนโค้ดให้มันดูดีมีความ Geek มากขึ้น นั่นคือการใช้ git !!!!~

Github2

อีกอย่างหนึ่งที่เราเองเคยสงสัย และไม่เข้าใจจริงๆ ว่า git กับ github เหมือนกันหรือต่างกันอะไรยังไง? วันนี้ต้องขอบอกให้เข้าใจตรงกันว่า.. git มิใช่ github นะเคอะ.. ! อย่างที่บอกไปแล้วว่า git เป็น  version control แต่เจ้า github เนี๊ยะ.. เป็นเพียงแค่ git repository เป็นผุ้ให้บริการในการเก็บ source code เท่านั้นเองนะจ๊ะ

ทำไมต้องใช้ git?

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

น้องในทีม: “พี่เนย ผมลบโค้ดทิ้งผิดไฟล์ ตอนนี้โปรเจครันไม่ได้ ทำยังไงดีพี่ ผมขอโทษ”

เนยตอบอย่างผ่อนคลาย: “สัด” …​ เอ้ยไม่ใช่ ตอบไปว่า “ไม่เป็นไร เดี๋ยวเอาไฟล์กลับมาให้ ใช้ git อยู่แล้ว ขำๆ”

credit – Software Developer ทั้งหลาย จงใช้ git เพื่อชีวิตที่ยั่งยืน

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

เราใช้อะไรทำ version control ก่อนมารู้จัก git รู้มั้ย ?????

คำตอบคือ.. Dropbox จ่ะ และความคิดตอนนั้นคือ.. dropbox เจ๋งว่ะ แก้งานพร้อมกันได้ด้วย แม่มมม.. อัพเดทให้เพื่อนได้เลยเจ๋งฝุดๆ ขอเพียงมี internet เท่านั้น เพื่อนก็จะเห็นว่าเราอัพเดทไปขนาดไหนล้าววว.. เฟี้ยวววเงาะจุงเบย จุ๊บุๆ //เกลียดพวกศัพท์พวกนี้จุง T~T … และเรากับเพื่อนในกลุ่มก็ได้ทำงานกันอย่างเพลิดเพลินเจริญใจ ต่างคนต่างทำในไฟล์เดียวกัน.. ฮะ??? อะไรนะ?? ไฟล์เดียวกัน และแล้ว.. เหตุการณ์ที่ไม่คาดฝันจึงเกิดขึ้น.. ฟริ๊งงงงงงส์!!!~~~ เพื่อนเขียนโค้ดแล้วเซฟไฟล์ ซึ่งเป็นไฟล์เดียวกับที่เราเปิดอยู่.. และเราก็เขียนโค้ดของเราอยู่ยังไม่ได้เซฟ แล้วคือบับ.. มันขึ้นมาให้ว่ามันจะเปิดไฟล์ที่อัพเดทแล้วให้เรา.. ซึ่งแน่ๆนอนๆ ว่าไม่มีโค้ดเราอยู่.. อีเควี่ยยยยย !!! ซอรี่ในความหยาบคาย T^T แต่ถ้าอยู่ ณ จุดนั้น บางทีอาจทำตัวเหมือนรูปด้านล่าง

rsz_frustrated

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

git ทำอะไรได้บ้าง?

ความสามารถหลักๆ ของ git นั่นคือการทำ version control เพราะฉะนั้น.. ก็ต้องทำ version control นั่นเองค่ะ (แล้วจะบอกสองรอบทำไม… -_-) ทีนี้มันทำอะไรอยู่ภายในกรอบของคำว่า version control มันทำเยอะเลยทีเดียวค่ะ ซึ่งเราจะลองลิสต์มาและอธิบายให้ฟังแบบไม่ต้องลงลึกมากละกันนะคะ

  1. เป็นแหล่งเก็บ source code ขนาดใหญ่มหึมา ไม่ว่า project ของเราจะใหญ่แค่ไหน? ก็คงไม่เปลืองพื้นที่การจัดเก็บภายในคอมพิวเตอร์ของเรา
  2. สามารถ backup โค้ดเวอร์ชั่นนู่นนั่นนี่ที่เราและเพื่อนๆ ในทีมเขียน ไม่ว่าจะถูกจะผิดอะไรยังไง ก็สามารถโยกไปย้ายมาได้ ไม่เอาเวอร์ชั่นใหม่นี้ละ เขียนผิด ก็ย้อนกลับไปเวอร์ชั่นก่อนหน้านั้นได้
  3. หลักสำคัญของ git ก็คือ distributed revision control มันก็เหมือนการกระจายความเสี่ยง ถ้าเครื่อง server เครื่องแรกพัง ก็ยังคงมี server เครื่องที่ 2 ถ้า server เครื่องที่ 2 พัง ก็ยังคงมีเครืองที่ 3 ซึ่งเครื่องเราก็ถือว่าเป็น server ตัวหนึ่งด้วย ถ้าเครื่องเพื่อนพัง ก็ยังมีเครื่องเราอยู่สินะ เย้.. แน่นอนว่าโค้ดเราจะอยู่รอดปลอดภัยอย่างแน่นอน ตราบใดที่เรายังคงมี internet และไฟฟ้าใช้9IW5z
  4. เราสามารถทำงานร่วมกันกับเพื่อนๆ ได้ ภายใน repository เดียวกัน คนนู้นทำส่วนนี้ คนนี้ทำส่วนโน้น สามารถแยกกันไปทำได้ โดยการแตก branch ออกไป แล้วนำมารวมกันทีหลังได้ โดยไม่ต้องกังวลให้หัวระเบิดว่าโค้ดที่เราเขียนจะหายมั้ย? (แต่อันที่จริงใช้ git ก็เคยหายนะ แต่มันคงไม่หายกันง่ายๆ หรอก ถ้าเราไม่เอ๋อสุดๆ ฮ่าๆๆๆ) ถ้าโค้ดเรากับโค้ดเพื่อน conflict กัน มันก็ขึ้นว่า conflict หลังจากนั้นเราก็เรียกเพื่อนมาดูว่าโค้ดไหนต้องการเก็บไว้ ตรงไหนไม่ต้องเก็บ.. หูยยย ดูง๊ายง่าย
  5. สามารถดูการเปลี่ยนแปลงของโค้ดที่เราเขียนได้เรื่อยๆ เผื่อไว้ตอนมีคนมาถามว่าเราทำอะไรไปใหม่แล้วบ้าง.. แล้วเราเป็นบุคคลขี้ลืม (อันนี้ชีวิตจริง) มีประโยชน์มากจริงๆ ค่ะ ฮ่าๆๆ
  6. สามารถ track ได้ว่าใครทำโค้ดไหนได้ .. หมดปัญหาข้อแก้ตัวสำหรับการทำงานพลาด ฮ่าๆๆๆๆ อันที่จริงแล้ว มันคงไม่ใช่ประเด็นหลักของการ track หรอกนะ แต่มันเป็นผลพลอยได้ จริงๆ คือ มันคงจะต้องการสื่อว่าใครทำอันไหน จะได้ตามตัวให้ถามกันเวลา conflict ถูก
  7. อีกอย่างหนึ่ง ที่สุดยอดแห่งเทพของ git คือ การพักโค้ดของเราไว้ก่อน ในกรณีที่เรายังไม่ต้องการอัพเดทโค้ดของเราลงบน repository แต่ต้องการดึงโค้ดส่วนของเพื่อนลงมาใช้ก่อน

เอาล่ะ.. เราคงเห็นประโยชน์จากการใช้ git ในการทำ version control มาพอสมควรแล้ว ในโพสต์ต่อไป คงจะมีโอกาสในการเริ่มแนะนำการใช้ git จริงๆ จังๆ นะ 555 .. หวังว่าทุกคนคงจะได้ motivation ในการเปลี่ยนแปลงชีวิตคนอยากจะ geek ให้ดีขึ้น

ขอบคุณทุกคนค่ะ ที่มีความอดทนในการอ่านโพสต์ที่ย๊าวยาว และหวังว่าจะได้ความรู้ไม่มากก็น้อยนะคะ😀

references

2 thoughts on “git101 – Introduction to git ฉบับเด็ก (อยาก) Geek

  1. Pingback: Git101 – Getting Started | Sudarat Chattanon

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s