4. Āนšา 1
Chapter 1 : Introduction
Git เปŨนĀนึ่งในĀลายเครื่องมือคüบคุมตšนรĀัÿขšอมูล (Version control) ซึ่งทำĀนšาที่จัดเก็บการ
เปลี่ยนแปลงขšอมูลในไฟลŤขšอมูล ทำใĀšผูšใชšงานÿามารถเรียกขšอมูลกŠอนที่มันจะถูกแกšจนเละĀาทางไปตŠอไมŠถูก กลับ
มาไดšในระดับไฟลŤĀรือกระแมšแตŠโฟลเดอรŤ ยิ่งกüŠานั้นมันยังÿามารถระบุไดšüŠาใครทำมันเจšงและทำไปตอนไĀน ดังนั้น
เราจะมาทำคüามรูšจักกับ Version control กันซะกŠอน จะไดšรูšüŠามันคืออะĀยัง?
1.1 เครื่องมือควมคุมตšนรĀัÿขšอมูล (Version Control System : VCS)
อยŠางที่บอกไปแลšüขšางตšน üŠา Version control (ชื่ออื่นเชŠน Revision control, Source control) คือตัü
คüบคุมตšนรĀัÿขšอมูล ซึ่งขšอมูลในที่นี่ก็ĀมายคüามรüมไปถึงทุกอยŠางที่อยูŠในรูปแบบของรĀัÿคอมพิüเตอรŤ เชŠน
ขšอคüาม รูปภาพ โปรแกรม เพลง ( & Something like that) โดย Version control จะทำใĀšที่เก็บขšอมูล เปŨนการ
ÿำรองขšอมูลใĀšกับไฟลŤĀรือโฟลเดอรŤที่เราตšองการ รüมทั้งบอกไดšüŠาใครเปŨนคนแกšไข แกšไขเüลาไĀน รüมถึงคüาม
แตกตŠางระĀüŠางกŠอนแกšไขและĀลังแกšไขไฟลŤ ซึ่งคุณÿมบัติเĀลŠานี้ทำใĀšเราไมŠตšองปüดĀัüกับการตšองกŢอปปŘŪ ไปไüšใน
โฟลเดอรŤ Backup แลšüเปลี่ยนชื่อเรียงตามüันที่ซึ่งเปŨนüิธีที่เซาะกราüดŤมากๆ (ขšอเÿียคือเจšานายจะรูšüŠาเราแอบอูšงาน)
ซึ่ง Version control ก็จะแบŠงเปŨน 3 ประเภทใĀšเลือกใชš คือ Local, Centralized และ Distributed
Local
Version Control System : LVCS
จากโปรแกรมเมอรŤยุคดึกดำบรรพŤที่ตšอง
กŢอปปŘŪโคšดไปไüšในโฟลเดอรŤ Backup กŠอนที่จะ
แกšไขไฟลŤ ทำใĀšโปรแกรมเมอรŤคิดüŠามันไมŠนŠาจะ
เüิรŤคแลšü จึงมีการพัฒนาฐานขšอมูลงŠายๆ เพื่อใชš
เก็บขšอมูลในเครื่องของโปรแกรมเมอรŤเอง ระบบที่
ดังมากคือ Revision Control System : RCS ที่
ริเริ่มพัฒนาโดย Walter F. Tichy โปรแกรมเมอรŤ
ชาüเยอรมัน ระบบ RCS จะติดมากับ Developer
Tools ของ Mac OS X เพื่อÿำรองขšอมูลกŠอนการ
อัพเดท Patch ซึ่งĀากไมŠÿำเร็จมันก็จะเรียกขšอมูล
กŠอนĀนšาซึ่งทำงานไดšปกติมาใชš
5. Āนšา 2
Centralized
Version Control System : CVCS
จากโปรแกรมเมอรŤในยุค Local Version Control ที่ÿามารถÿำรองไดšเฉพาะบนเครื่องตัüเองจึงเĀมาะกับ
การทำงานแบบฉายเดี่ยüซะมากกüŠา แลšüถšาเรามีทีมงานĀลายคนที่ตšองชŠüยกันรุมปูŜยี้ปูŜยำโปรเจกนี้ก็จะเกิดปŦญĀา
เรื่องการใชšงานรüมไฟลŤรŠüมกันขึ้น เพื่อแกšปŦญĀาüŠาถšาเพื่อนเราแกšไฟลŤ เราก็ไมŠตšองเอา USB Drive ไปเÿียบกŢอป
ขšอมูลออกมา เพราะกüŠาจะครบทุกคนก็แกŠกันĀมดพอดี แตŠเราจะใชšüิธีใĀšคนที่ทำเÿร็จแลšüÿŠงขšอมูลไปเก็บไüšที่
Server กลาง ซึ่ง Server กลางตัüนี้ก็ทำĀนšาที่ÿำรองขšอมูลไüšดšüย ถšาใครอยากไดšขšอมูลรุŠนไĀนก็มาดึงเอาจาก
Server ตัüนี้ไดš ซึ่งขšอมูลที่อยูŠใน Server กลางโดยทั่üไปแลšüจะเปŨนรุŠนที่ใĀมŠลŠาÿุดและทดÿอบüŠาใชšงานไดšแลšü (คüร
ทดÿอบüŠามันรันไดšจริงๆกŠอนที่จะÿŠงขšอมูลขึ้นไป ไมŠงั้นอาจจะโดนดŠาผูšปกครองเอาไดš)
ระบบแบบนี้มีขšอดีคือการทำงานรüมýูนยŤไüšที่เดียüกัน คนที่เปŨน Project manager ก็ดูไดšงŠายüŠาทำงานกันไปถึงไĀน
แลšü ไฟลŤขšอมูลก็จะใĀมŠอยูŠเÿมอ และทุกคนÿามารถมีไฟลŤขšอมูลที่เĀมือนกันไดšงŠาย เพียงแคŠใĀšคนที่ตšองการใชšดึง
ไฟลŤขšอมูลจาก Server ไปไüšในเครื่องของตัüเอง แตŠขšอเÿียก็คือĀาก Server มีปŦญĀาĀรือเราไมŠไดšเชื่อมตŠอกับเครือ
ขŠาย จะไมŠÿามารถÿŠงขšอมูลขึ้นไปĀรือดึงขšอมูลลงจาก Server ไดš และถšา Harddisk พังก็จะมีไฟลŤÿำรองแคŠที่อยูŠใน
เครื่องแตŠละคนเทŠานั้น (Server ขšอมูลĀายแตŠ Client ขšอมูลยังอยูŠ) ขšอมูลที่Āายไปจาก Server นั้นรüมทั้ง Log
ประüัติการแกšไขไฟลŤตŠางๆ ก็จะĀายไปดšüย (มีเก็บแคŠใน Server เทŠานั้นจšาา ถšาขšอมูลที่ Server Āายก็ตัüใครตัüมัน)
โดย Version control ที่ใชšการเก็บขšอมูลแบบ Centralized ĀรือรüมýูนยŤนี้ก็เชŠน CVS, SourceSafe,
Subversion, Team Foundation Server
6. Āนšา 3
Distributed
Version Control System : DVCS
จากขšอเÿียĀลักๆของ Centralized Version Control System ที่ถšาเกิดเครื่อง Server พังĀรือĀากเรา
เดินทางอยูŠไมŠÿามารถเชื่อมตŠอกับเครือขŠายไดš ก็จะไมŠÿามารถทำงานไดš ดังนั้นจึงมีคนคิดคšนระบบ Distributed Āรือ
แบบกระจายýูนยŤขึ้นมาแกšปŦญĀา เพราะระบบนี้จะไมŠดึงĀรือÿŠงเฉพาะไฟลŤขšอมูลจาก Server ไปเทŠานั้น แตŠจะกŢอปปŘŪ
ฐานขšอมูลรุŠนแบบเดียüกับที่มีอยูŠใน Server ไปดšüยเพื่อที่üŠาถšา Server มีอันเปŨนไปĀรือเราไมŠÿามารถเชื่อตŠอเครือ
ขŠายกับ Server ไดšเราก็ยังจะÿามารถทำงานไดšและยังÿามารถเก็บรุŠนของไฟลŤ พรšอมทั้งประüัติการแกšไขและเüลาไüš
เÿร็จÿรรพ โดยที่เราไมŠจำเปŨนตšองมี Server ดšüยซ้ำไป จึงทำใĀšเราไมŠมีขšออšางüŠาไฟลŤĀายกŠอนÿŠงงานไดšอีกตŠอไป (เยš
T___T)
และระบบนี้ÿนับÿนุนใĀšมีการทำงานแบบĀลายทีมในโปรเจกเดียüกัน เชŠน Team A เĀ็นงานฟŘเจอรŤลับ ÿŠüน Team
B ไมŠเĀ็น ĀรือโปรแกรมเมอรŤก็ไมŠตšองรอใĀšกราฟฟŗกดีไซนŤüาดภาพเÿร็จ แคŠดราฟมากŠอนก็จะมีไฟลŤในระบบ
โปรแกรมเมอรŤก็ÿามารถเรียกใชšไดšและĀากกราฟฟŗกดีไซนŤแกšไขภาพแลšüÿŠงขึ้น Server กลาง แลšüเมื่อเราดึงขšอมูล
ใĀมŠลงมาก็จะไดšรูปที่แกšไขแลšüไดšเลยงŠายๆ แถมคüามเร็üเขšาถึงขšอมูลยังÿูงเüอรŤ เพราะในขั้นตอนการทำงานปกติมัก
จะทำงานที่ฐานขšอมูลรุŠนภายในเครื่องเราเอง ตŠางกับระบบ Centralized ที่ตšองüิ่งไปถามที่ Server กŠอน ตัüอยŠาง
ระบบที่ใชšงานแบบกระจายýูนยŤก็เชŠน Git (พระเอกของเรา), BitKeeper(ตัüรšาย), Mercurial, Bazaar Āรือ Darcs
49. Āนšา 46
Enter file in which to save the key (/Users/dekcom/.ssh/id_rsa): กดปุśม Enter ผŠานไปไดšเลย
/Users/dekcom/.ssh/id_rsa already exists.
Overwrite (y/n)? ไฟลŤใบรับรองผมมีอยูŠแลšü ตอบ y ใĀšมันเขียนทับเปŨนตัüใĀมŠ (ของใครไมŠมีก็จะไมŠถูกถาม)
Enter passphrase (empty for no passphrase): ใÿŠ Passphrase (คำลับที่เอาไüšเปŗดใชšใบรับรองปŜองกันเผื่อมี
คนไดšใบรับรองเราไป) คำในนี้จะไมŠแÿดงออกทางĀนšาจอ ถšาไมŠอยากใÿŠก็กด Enter ผŠานไปเลย
Enter same passphrase again: ใÿŠ Passphrase อีกรอบ
ข
šางลŠางบอกที่อยูŠของไฟลŤทั้งÿองคือ Private key (identification) และ Public key Your
identification has been saved in /Users/dekcom/.ssh/id_rsa.
Your public key has been saved in /Users/dekcom/.ssh/id_rsa.pub.
จา
กนั้นก็เปŗดดู Public key ÿั่ง
$ cat ~/.ssh/id_rsa.pub
เพื่อดูขšอมูลขšางในไฟลŤ แลšüก็
กŢอปปŘŪขšอคüามขšางในออกมาไüš
รอเอาไปเพิ่มใน Github