Thursday, February 12, 2015

Git : Git คืออะไรหว่า?? ( ตอนที่ 1 ไม่รู้จักฉัน ไม่รู้จักเธอ )

         Git คืออะไร ใช้ทำอะไร มีประโยชน์อะไร สำคัญอย่างไร แล้วเราสมควรใช้มันหรือป่าว ??? สารพันคำถาม และเครื่องหมายคำถามมากมายในหัวครับ หลังจากที่ได้ยินคำนี้

          Git อ่านว่าอะไรนะเหรอ ... Git อ่านว่า กิต ครับ กิต ครับ .... อะไรอีกอะ แค่นี้ อ่านว่า กิต จริงๆ จบนะ ฮ่าๆๆ เอาละครับเรามาต่อกันว่า Git มันเอาไว้ทำอะไร

          ก่อนอื่นต้องมาทำความรู้จักเจ้านี่ก่อน Git คือ ซอฟต์แวร์ประเภทหนึ่งมีหน้าที่ในการจัดการรุ่นของซอฟต์แวร์ พูดง่ายๆ มันเป็นการควบคุม และจัดการโค้ดของโปรแกรมเราให้ตรงกับรุ่นโปรแกรมที่เรามาอัพเดต หรือ แก้ไขในแต่ละครั้ง (SCM : Source Control Management) แต่เดิมกำเนิดมาจากระบบปฏิบัติการ Linux อันเลื่องลือต่อมาก็นำมาพัฒนาในการใช้งานกับโปรแกรมต่างๆ
          ตอนนี้ผมต้องขอขยายความเรื่องการควบคุม และจัดการโค้ดนะครับ เรียกสั้นๆว่า SCM ซึ่งยกตัวอย่างง่ายๆ เช่น ผมจะเขียนโปรแกรม ถ่ายและตกแต่งภาพ แน่นอนว่าผมไม่มีเวลาพอที่จะพัฒนาระบบทั้งหมดได้ในวันเดียว ดังนั้นผมจึงต้องเลือกพัฒนาระบบถ่ายภาพก่อนเป็นเวอร์ชั่นแรก สมมติเวอร์ชั่นนี้ผมเรียก 1.0.1 จากนั้นวันถัดไปจึงพัฒนาระบบตกแต่งภาพขึ้นมาเสริมระบบเดิม เป็นเวอร์ชั่นใหม่ เวอร์ชั่น 1.0.2 แน่นอนครับผมพัฒนามาจากเวอร์ชั่น 1.0.1 โดยเอาโค้ดเดิมมาเพิ่ม มาลบ มาต่อตัดแต่งใหม่ เจ้า SCM ก็จะแจ้งไว้เลยว่านี่ผมลบบรรทัดนี้ไปนะ ผมเพิ่มตรงนี้เข้ามานะ ผมแก้ไขบรรทัดนี้แล้วนะ ใช่ครับ ทุกตำแหน่งที่เราแก้ไข SCM จะแจ้งเรามาทั้งหมด แล้วเกิดวันดีคืนดีผมอยากเพิ่มระบบแชร์รูปภาพที่ตกแต่งแล้วหล่ะ ง่ายเลยครับไม่ต้องมานั่งไล่ดูโค้ดทั้งหมด ลดเวลาการพัฒนาขั้นต่อไปได้อีกเยอะ จุดไหนที่เราจะเพิ่มตรงไหน เราสามารถควบคุมได้เร็วกว่าเดิมเลย ออกเวอร์ชั่น 1.0.3 ได้รวดเร็วกว่าเดิมอีกโข

ขอบคุณภาพประกอบจาก http://www.sourcetreeapp.com/
          เข้าใจแล้วใช่ไหมครับ อะไรนะ ... ถามว่า แล้วมันมีประโยชน์อะไรนะหรอ

          นี่ไงผมจะบอกให้ฟัง ก็จากความสามารถของ SCM ของ Git นั่นแหละครับ สมมติผมแก้ไขโค้ดส่วนหนึ่งเพื่อทำระบบใหม่ แต่พอทำไปทำมา อ้าว เวรกรรมของลำยอง ... โปรแกรมเละครับ Error หนักเพราะไปแก้อะไรไว้ไม่รู้ตรงไหนต่อตรงไหนบ้าง ได้แต่นั่งทำตาปริบๆ น้องอายุสามสิบ สามสิบ ดูซิยังสวย //ไม่ใช่หล่ะ เฮ้ย!!!
          ถ้าเป็นเมื่อก่อนผมจะ copy โฟลเดอร์โปรเจคไว้ก่อนครับ ทำไว้สัก สิบโฟลเดอร์ เอาแบบ ... มา กูพร้อมทำผิด ฮ่าๆๆ พอผิดก็ลบอันที่ผิดทิ้ง เอาโฟลเดอร์ใหม่มาทำ ฮ่าๆๆ ไงหล่ะ แบบนี้เค้าเรียกว่า Manual Versioning ครับ คืออะไรเดี๋ยวอธิบายอีกทีครับ 555 อ๊ะ .. สมมติผมใช้ Git ผมคลิกสองสามที แว๊บ!!! โค้ดก็กลับมาเป็นดังเดิม ง่ายเลยไหมหล่ะ นี่ยังไม่รวมกรณี เครื่องตกน้ำ โดนขโมย บ้านไฟไหม้ แมวฉี่ใส่คอม ที่พร้อมจะทำให้โค้ดอันสวยงามของคุณมลายหายไปในพริบตาอีกนะครับ
       
          เอาหล่ะต่อมามาว่ากันถึงประเภทของ SCM เอาหล่ะประเภทที่มีอยู่ตอนนี้อย่างที่เกริ่นไว้บ้างแล้วเมื่อสักครู่ มีดังนี้ครับ

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

  2. Centralize Repository สำหรับคนยุคใหม่ที่เกิดมาจากไดโอด ทรานซิสเตอร์ครับ //ไม่ใช่ละ ฮ่าๆๆ เอาเป็นว่าเป็นการเก็บไว้ที่เซิร์ฟเวอร์ครับ มี 2 แบบคือ

                   2.1  File server เก็บเป็นไฟล์ไว้ แล้ว Copy ดึงออกมาวางเหมือนแบบแรกแต่สะดวกกว่า

                    2.2  VCS: Version Control System คือ แบบที่ดูดีขึ้นหน่อย เป็นการอัพเดตโค้ดที่แก้ไขของเราเข้า เซิร์ฟเวอร์โดยอัตโนมัติครับ เวลาปรับปรุงอะไรมันก็จะมีการใส่เข้า(push) ให้เราเอง เวลาเราต้องการเรียกไฟล์เก่ามาใช้ก็ ดึงออก(pull)

  3. Distributed Repository นี่ของยุคที่เพื่อนเยอะครับ จะแก้ไขข้อด้อยของ Centralize Repository ในเรื่องของการทำงานคนเดียว แบบนี้เวลาเราแก้ไขไฟล์อะไรไป เพื่อนเราที่อยู่ในวง Repo เดียวกันจะรู้ถึงการอัพเดตไฟล์นั้นด้วยคือ มันเฟรชตลอดเวลาครับ สะดวกมากเวลา Copy งานคนอื่นมาส่งอาจารย์ เอ้ย!!! ไม่ใช่ เวลาแชร์โค้ดร่วมกันแบ่งกันทำไรแบบนี้ มีบอกหมดใครแก้ตรงไหน เท่าไร อย่างไร เวลาไหน โค้ดจะเจ๊ง จะเฮง บอกคนทำได้เลย ฮ่าๆๆ

สรุป ง่ายๆสั้นๆในเรื่องของ Git 

สำคัญไหม??              ไม่สำคัญครับ 
จำเป็นไหม??              ไม่จำเป็นครับ 
แล้วสมควรใช้ไหม??               แต่ ... สมควรใช้ครับ 

เพราะความสามารถในการช่วยชีวิตนักพัฒนาทุกคนของมันช่างน่าหลงใหล ระบุเวอร์ชั่นโค้ดนั้นๆได้ ย้อนกลับโค้ดที่ดีได้ ดูการแก้ไขที่ผ่านมาได้ สำรองโค้ดเผื่อหาย ตาย จาก ได้ ดูว่าใครอู้งานได้ ... บลาๆๆๆ ใช้เถอะครับ จะได้ไม่เป็นภาระของลูกหลาน ตอนหน้า เรามาดูการใช้งานกันครับ แต่บอกไว้ก่อน ผมจะแสดงผ่าน Android Studio และใช้ GitHub เป็น Distribute นะครับ



Git : Git คืออะไรหว่า?? ( ตอนที่ 2 นี่เพื่อนไง จำไม่ได้หรอ )       กำลังเขียนบทความ
           

No comments:

Post a Comment