Git101 – Getting Started

หลังจากโพสต์ที่แล้ว เราได้ทำความรู้จักกับ git กันแล้วว่าคืออะไร? ใน Introduction to git และคงจะรู้เหตุผลกันพอสมควรเลยทีเดียว.. ว่าทำไมเราถึงต้องใช้ git เพื่อทำให้ชีวิตการเขียนโค้ดดีขึ้น

วันนี้เราจะมาเจาะลึกลงอีกสักเล็กน้อย ในเมื่อเรามี motivation ที่จะใช้ git แล้ว.. เราจะต้องเริ่มยังไง ซึ่งโพสต์นี้ จะเป็นแนวทางสำหรับผู้ที่เริ่มต้นศึกษา git นะจ๊ะ 😀

สิ่งที่เราต้องเตรียมพร้อมก่อนการใช้งาน git นั่นคือ.. การเตรียม git repository นั่นเอง ไม่ว่าจะเป็นค่ายไหน เราสามารถใช้ได้หมดเลย.. สำหรับใครที่ไม่รู้จะเลือกใช้อันไหนดี? เราขอแนะนำ git hosting ที่รู้จักกันดี ตัวแรกคือ..

Github.com

1

ข้อดีของ github ก็คือ ฟรี!! ใครบ้างล่ะไม่ชอบของฟรี ฮ่าๆๆๆ แต่ของฟรีนั้น ก็อาจจะมีข้อจำกัดหลายๆ อย่าง ที่หลายๆ คนอาจจะซีเรียส นั่นคือ.. โค้ดของเรามันจะเป็นแบบ public ถ้าใครซีเรียสข้อนี้ ก็อาจมี choices อื่นๆ ให้เลือกกันอีกเยอะแยะเลยค่ะ

Bitbucket.org

2

ข้อดี ของ bitbucket คือ เราสามารถเก็บ project ของเราแบบ private ได้แบบฟรีๆ นั่นเอง แต่ก็มีข้อจำกัดอยู่ตรงที่ คนที่จะเข้าถึง private repository ได้นั้น จะจำกัดไปเกิน 5 คนค่ะ ถ้าเกินกว่านั้นจะต้องเสียตังค์อยู่ดี เพราะฉะนั้น ถ้าเป็นโปรเจกต์ที่ทำร่วมกันหลายๆ คน มากกว่า 5 คน ก็คงจะไม่เหมาะกับ bitbucket

GitLab.com

3

โอ้วแม่เจ้า.. ทำไมเราเข้าไปหน้าแรกถึงกับอึ้ง ขอสารภาพเลยค่ะ ไม่เคยได้ยิน gitlab มาก่อนเลย และแน่นอนว่าไม่เคยได้ใช้ด้วย .. แต่เค้าโฆษณาในหน้าแรกเลยนะ

…To get a free account with unlimited public and private repositories and unlimited collaborators…

ฮะ???? จริงป้ะเนี่ย? ดีใจเข่าทรุดค่ะ เอาไว้เดี๋ยวไปลองเล่นดู แล้วจะมาบอกต่อนะคะ ว่าเค้าดีจริงอย่างที่โม้ไว้มั้ย? ฮ่าๆๆๆๆ เอาเป็นว่า gitlab ก็เป็นอีกทางเลือกหนึ่งที่ดีทีเดียวสำหรับคนที่ต้องการให้ project เป็นแบบ private และเป็นโปรเจกต์ใหญ่ๆ ทำงานกันหลายคนค่ะ

และอื่นๆ อีกเยอะแยะมากมาย – Public Git hosting sites ลองเปรียบเทียบกัน แล้วเลือกได้ตามใจชอบเลยค่ะ

git_hosting

 

หลังจากเลือก git hosting ที่ชอบและตอบโจทย์ของตัวเองมากที่สุดแล้ว เราก็ต้องมา setup อะไรนิดๆ หน่อยๆ ให้เครื่องคอมพิวเตอร์ของเรา ได้ทำความรู้จักกับ git นะคะ

สำหรับใครที่ใช้ ios ก็ไม่มีอะไรมว๊ากกก เพียงแค่เปิด terminal ขึ้นมา แล้วก็พิมพ์คำสั่งเล็กๆ น้อยๆ เท่านั้น แต่สำหรับ windows ทำไมมันช่างดูซับซ้อนเหลื๊อเกินน.. เอาเป็นว่า ในโพสต์นี้ เราจะขอแนะไปสำหรับคนทีใช้ windows ละกันนะคะ  อาจจะมีความรู้เบื้องต้นเกี่ยวกับ.. คำสั่ง shell  นิดหน่อยนะคะ ซึ่งอาจจะเปรียบเทียบว่า shell ก็เหมือนกับอากาศ.. ถึงจะสัมผัสไม่ได้ แต่รู้ว่ามีอยู่จริง !  (ใจเย็นๆ นะคะ อย่าเพิ่ง close tab บน browser นะ โพสต์นี้ ถึงจะสาระน้อย แต่ก็ยังพอมีอยู่บ้าง… T-T)

สำหรับคนที่ใช้ windows ที่อาจจะรู้สึกน้อยเนื้อต่ำใจนิดนึง ทำไมทำอะไรก็ดูยากเย็นเหลือเกิน ไม่ว่าจะลงนู่นลงนี่ ก็ช้าถึงช้ามว๊ากกกกก และแล้ววันนี้เราก็ไปแสวงหามาจนได้ค่ะ.. อันที่จริงก็ไม่ได้ยากเย็นในการค้นหา tool ที่เกี่ยวกับ git เลยค่ะ มีเยอะแยะเต็มไปหมดบนโลก internet อยากได้อะไรก็หาได้ง่ายมากจริงๆ เราก็พิมพ์ไปเลยค่ะ git for windows ฟริ๊งงงงส์ !!! results เยอะเวอร์ เลือกไม่ถูก ก็เลือกอันแรกนะ ฮ่าๆๆๆ และอันที่เราเลือกมา ก็ได้มาจากลิงค์นี้ค่ะ – http://msysgit.github.io/

Untitled-1

สำหรับ git for windows หรือ Git-SCM จะมีสองแบบให้เลือกใช้ตามความถนัดของแต่ละคนเลยนะ ทั้งแบบ Bash และแบบ GUI .. แต่ แต่ แต่ แต่ แต่ .. เราจะใช้กันแบบ Bash เพื่อความสนุกสนานอ่ะนะ  ทีนี้ก็ทำแค่ดาวน์โหลดลงมา แล้วก็ติดตั้งธรรมดา หรือจะ config อะไร ก็ได้เลยค่ะ หลังจากนั้น โอ้เย้ เราก็มาเริ่มใช้งานกันได้เลย..

ทีนี้ หน้าตาของ Git Bash เป็นยังไง? ก็ธรรมดาๆ คล้ายๆ กับ command line ทั่วไป แต่ก็มีสีสันอยู่บ้าง นอกจากสีขาวและดำ ก็ยังมีสีเขียว สีเหลือง สีน้ำเงิน ฯลฯ เอาเป็นว่าเป็นสีที่พอจะบอกความแตกต่างระหว่างไฟล์ โฟลเดอร์ หรือพวก directory ต่างๆ ได้ ให้เราไม่งงจนเกินไป

Untitled-1

ทีนี้.. ในเมื่อเรามีทั้ง git repository ที่อาจจะแอบสมัครไว้นานแล้ว แต่ไม่เคยได้ใช้ หรือเพิ่งจะสมัครตอนที่อ่านโพสต์นี้ หรืออาจจะอ่านเพลิ๊นเพลิน จนลืมสมัคร ฮ่าๆๆๆ (ให้เวลาไปสมัคร git hosting ไหนก็ได้ตามความ need ของแต่ละคนเลยนะคะ แล้วกลับมาว่ากันต่อนะจ๊ะ 😀 ) และอีกอย่างเราก็มี git-scm เรียบร้อยแล้ว.. ทีนี้ล่ะก็.. เราก็จะใช้งาน git เพื่อมาจัดการกับโค้ดของเราได้จริงๆ ซักทีนะ .. แต่บางทีเส้นทางการใช้ git อาจจะต้องสร้าง connection เล็กน้อย ให้เครื่องของเราได้ทำความรู้จักกับ git ซึ่งจะใช้

git init

เราจะได้ไฟล์ .git มา ซึ่งทำให้เรารู้ว่า เครื่องฉันรู้จัก git ล่ะน้าาา .. 🙂  ต่อไปก็ต้องทำให้ git บนเครื่องเรารู้จักกับ git repository ที่เราได้สร้างไว้แล้ว.. วิธีการสร้าง connection พวกนี้จะมีอยู่ในส่วน help ของ git hosting ที่เราเลือกใช้ ซึ่งเราก็ทำตามวิธีได้เลย อย่างเช่น บน help.github.com

หลังจากที่เราทำตามขั้นตอนการ generate ssh key เรียบร้อยแล้ว .. ทีนี้เราก็ใช้งาน git ได้อย่างใจหวังแล้ว แต่การใช้งาน git จะต้องรู้คำสั่งของ git ซึ่งก็มี tutorial เยอะแยะเลยทีเดียว และที่จะแนะนำกันวันนี้ ก็ไม่พ้นเจ้าเดิมก็คือ github อีกแล้วค่ะ แหมๆ.. มีแต่ tools ดีๆ ให้ใช้ทั้งนั้นเลยโนะ อิอิ ~ ซึ่งจะขอแนะนำให้ใช้ tryGit by github นะ เราชอบอ่ะ มันแบบ.. step by step ดี  แถมยังมีคำอธิบายแต่ละคำสั่งด้วย แล้วเราก็รู้ว่ามันใช้งานยังไงอีกด้วย ค่อนข้างละเอียดเลยล่ะ เพราะเราได้เห็นผลลัพธ์ของแต่ละคำสั่งจริงๆ สุดยอดไปเลย !!

ขอบคุณทุกคนครั้งแล้วครั้งเล่าค่ะ ที่อุตส่าห์นั่งอ่าน นอนอ่าน ยืนอ่าน เดินอ่าน วิ่งอ่านจนจบถึงตรงนี้ และที่ขาดไม่ได้เลย ต้องขอบคุณมากๆ สำหรับ references ทุกอันที่ blogger/developer ทั้งหลาย ไม่หยุดที่จะแบ่งปันความรู้กันบนโลกออนไลน์ มันเป็นแหล่งความรู้ที่ดีที่สุดเลยล่ะ 😀

 

 

References:

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