ในบทความนี้ เราจะพูดถึงวิธีการโคลน git repo บน CentOS นอกจากนี้เรายังได้เรียนรู้ความแตกต่างระหว่าง Git และ GitHub ความหมายของการควบคุมเวอร์ชัน repo คืออะไรและจะโคลนที่เก็บได้อย่างไร
Git คือระบบควบคุมการกำหนดเวอร์ชันหรือ VCS ที่เสถียร สมบูรณ์ และแข็งแกร่ง Git ช่วยให้นักพัฒนาสามารถจัดเก็บ อัปเดต และแชร์ซอฟต์แวร์ที่มีอยู่ในที่เก็บส่วนตัว เมื่อทำการเปลี่ยนแปลง git อนุญาตให้การอัปเดตซอฟต์แวร์ใหม่เขียนทับโค้ดเก่าด้วยข้อมูลใหม่ ในขณะที่จัดเก็บข้อมูลเก่าไว้ใช้ในอนาคตหากจำเป็น นอกจากนี้ยังช่วยให้นักพัฒนาหลายคนทำงานในโปรเจ็กต์เดียวกัน โดยนำการเปลี่ยนแปลงต่างๆ ไปใช้กับส่วนต่างๆ ของโค้ด ซึ่งจะเพิ่มประสิทธิภาพการทำงาน นี่คือเหตุผลที่ Git ถูกระบุว่าเป็นตัวอย่างของ " distributed version control system "
โครงการ Git เรียกว่า " repo หรือ repository " repos เหล่านี้มีคอลเล็กชันไฟล์และโฟลเดอร์ที่เกี่ยวข้องกับโปรเจ็กต์ทั้งหมด นอกจากนี้ยังมีประวัติการแก้ไขสำหรับแต่ละไฟล์ใน repo
นอกจากนี้ แค็ตตาล็อก repo หรือจับการเปลี่ยนแปลงแต่ละรายการ ซึ่งเรียกว่าการคอมมิต คอมมิตเหล่านี้เรียกอีกอย่างว่าสแน็ปช็อตและคงอยู่เป็น "linked-list relationship" คอมมิตเหล่านี้ (หรือสแน็ปช็อต) ยังสามารถพัฒนาเป็นวิวัฒนาการใหม่ของซอฟต์แวร์ที่เรียกว่าแบรนช์ เนื่องจาก Git เป็นระบบควบคุมเวอร์ชันแบบกระจาย ที่เก็บในตัวจึงสามารถโคลนและแชร์โดยใครก็ตามที่ดูแลสำเนาของที่เก็บ นอกจากนี้ยังสามารถเข้าถึง codebase ทั้งหมดและประวัติของมันได้อีกด้วย! นักพัฒนาส่วนใหญ่ใช้บรรทัดคำสั่งเพื่อเข้าถึงที่เก็บ git ซึ่งอนุญาตให้มีการทำงานหลายอย่างเช่น
Git เป็นเครื่องมือควบคุมการกำหนดเวอร์ชัน และ GitHub เป็นที่เก็บข้อมูลที่จัดเก็บและติดตามการเปลี่ยนแปลงในซอฟต์แวร์
เมื่อซอฟต์แวร์ได้รับการอัปเดตด้วยการเพิ่มโค้ดใหม่ git จะติดตามการเปลี่ยนแปลงที่เกิดขึ้น และเพิ่มการปรับเปลี่ยนลงในโค้ดเวอร์ชันใหม่ที่ได้รับการอัปเดต เมื่อมีการคอมมิตใหม่แต่ละครั้ง หมายเลขเวอร์ชันของการอัปเดตซอฟต์แวร์ก็เช่นกันเพื่อบ่งชี้ว่ามีการแก้ไข นักพัฒนาใช้คำสั่ง git เฉพาะเพื่อเพิ่ม แก้ไข และปรับการอัปเกรดโค้ดเหล่านั้นเป็นเวอร์ชันใหม่ ซึ่งช่วยให้ติดตามได้ดีขึ้นและให้ความสามารถในการย้อนกลับการเปลี่ยนแปลงหากมีสิ่งผิดปกติเกิดขึ้น
สำหรับ Redhat/CentOS
root@host yum -y update root@host yum install git
ตอนนี้เราได้ติดตั้ง git แล้ว เราต้องกำหนดค่าเพื่อให้ลิงก์ไปยังที่เก็บ เราเริ่มต้นด้วยการรันคำสั่ง:
root@host git config
ต่อไป เราเพิ่มชื่อและที่อยู่อีเมลของเราเมื่อ git นำข้อมูลนี้ไปใช้กับการคอมมิตแต่ละครั้งที่เราทำ เราสามารถเพิ่มข้อมูลนี้ได้โดยป้อนข้อมูลต่อไปนี้:
root@host git config --global user.name "User Name" root@host git config --global user.email "[email protected]"
เราสามารถดูข้อมูลการกำหนดค่าโดยพิมพ์ใน:
root@host git config --list root@host git config --list user.name=dsinger [email protected]
แค่นั้นแหละ! Git ได้รับการติดตั้งและพร้อมใช้งานแล้ว
ต่อไป ให้เลือกโฟลเดอร์ในเครื่องที่เราจะใช้เป็นที่เก็บในเครื่องของเรา สำหรับตัวอย่างนี้ เราจะใช้โฟลเดอร์ /root/project/ มาเปลี่ยนไดเร็กทอรี ( cd ) เป็นโฟลเดอร์นั้นกัน เถอะ
root@host [~]# cd project root@host [~/project]#
ต่อไป เราเรียกใช้คำสั่ง " git init " เพื่อเลือกและใช้ไดเร็กทอรีนั้นสำหรับ git repo ใหม่ของเรา:
root@host [~/project]# git init Initialized empty Git repository in /root/project/.git/ root@host [~/project]#
ตอนนี้เราเห็นในโฟลเดอร์ .git ที่เพิ่งสร้างขึ้น:
root@host [~/project]# ll total 12K drwxr-xr-x 3 root root 4.0K Oct 28 20:41 ./ drwxr-xr-x. 44 root root 4.0K Oct 28 20:39 ../ drwxr-xr-x 6 root root 4.0K Oct 28 20:41 .git/ root@host [~/project]#
ภายในโฟลเดอร์ .git เราจะเห็นว่ามีการตั้งค่าโครงสร้างไฟล์ต่อไปนี้:
root@host [~/project]# cd .git/ root@host [~/project/.git]# ll total 36K drwxr-xr-x 6 root root 4.0K Oct 28 20:41 ./ drwxr-xr-x 3 root root 4.0K Oct 28 20:41 ../ -rw-r--r-- 1 root root 92 Oct 28 20:41 config -rw-r--r-- 1 root root 73 Oct 28 20:41 description -rw-r--r-- 1 root root 23 Oct 28 20:41 HEAD drwxr-xr-x 2 root root 4.0K Oct 28 20:41 hooks/ drwxr-xr-x 2 root root 4.0K Oct 28 20:41 info/ drwxr-xr-x 4 root root 4.0K Oct 28 20:41 objects/ drwxr-xr-x 4 root root 4.0K Oct 28 20:41 refs/ root@host [~/project/.git]#
git init
เรียกใช้คำสั่ง " git init " ภายในโฟลเดอร์ด้านบน เปิดใช้งานและเริ่มตรวจสอบโฟลเดอร์นั้น โดยเชื่อมโยงกับที่เก็บGitHub ใหม่ คำสั่ง init ยังเพิ่มโฟลเดอร์ย่อย .git ภายในไดเร็กทอรีนั้นที่โฮสต์โครงสร้างข้อมูลของ repo ภายใต้นั้น ข้อมูลนี้จำเป็นสำหรับการควบคุมการกำหนดเวอร์ชัน เมื่อใช้คำสั่ง init เราสามารถเริ่มตั้งค่าไดเร็กทอรีการทำงานในเครื่องเป็นที่เก็บ git ได้
root@host [~]# git init
ตอนนี้เราสามารถคัดลอกที่เก็บ git ที่มีอยู่ซึ่งโฮสต์จากระยะไกลบนเซิร์ฟเวอร์GitHub ตัวเลือกแรกที่เรามีคือเพียงคลิกปุ่มโคลนหรือดาวน์โหลดแล้วคัดลอกลิงก์โดยใช้ตัวเลือกคลิปบอร์ดที่ด้านขวาของลิงก์แล้ววางลงในคำสั่ง wget เพื่อดึงลงโฟลเดอร์บนเซิร์ฟเวอร์หรือคลิกดาวน์โหลดไฟล์ ZIP ลิงค์
root@host [~/project/testrepo]# wget https://github.com/drsinger/testrepo.git
ในการโคลนที่เก็บโดยไม่ต้องตรวจสอบสิทธิ์กับ GitHub บนบรรทัดคำสั่ง คุณสามารถใช้GitHub Desktopเพื่อโคลนแทนได้
หากคุณต้องการใช้ SSH เพื่อดึง repo คุณต้องตั้งค่า SSHKeys
ในการดึงสำเนาของ repo ที่มีอยู่ เราจะใช้คำสั่ง “ git clone ” พร้อม URL ของ repo หรือตำแหน่งเซิร์ฟเวอร์
ขั้นแรก ให้เพิ่มไฟล์ลงใน git repo ของเราบน GitHub คลิกที่ปุ่ม "สร้างไฟล์ใหม่"
ต่อไป เราเพิ่มข้อมูลบางอย่างในไฟล์ใหม่
หลังจากที่เราได้เพิ่มข้อมูลบางส่วนลงในไฟล์ใหม่แล้ว เราก็คลิกที่ปุ่ม "Commit new file"
การดำเนินการนี้จะเพิ่มไฟล์ลงใน repo และส่งเรากลับไปที่หน้าจอ repo หลัก ซึ่งตอนนี้จะแสดงไฟล์ “file.txt” ว่าเป็นส่วนหนึ่งของ repo
เอาล่ะ มาสร้างโคลนของเรากันเถอะ! คลิกที่ปุ่ม "โคลนหรือดาวน์โหลด" การดำเนินการนี้จะเปิดดรอปดาวน์ ซึ่งประกอบด้วยสองวิธีในการโอน repo ของเรา เราสามารถใช้ https หรือ SSH
ต่อไป เราจะคัดลอก ลิงก์ https://github.com/drsinger/testrepo.gitและวางลงในเทอร์มินัลบรรทัดคำสั่งในเครื่องของเรา ตอนนี้กด Enter
root@host [~/project]# git clone https://github.com/drsinger/testrepo.git Cloning into 'testrepo'... remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Compressing objects: 100% (5/5), done. remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (6/6), done. root@host [~/project]#
แค่นั้นแหละ! Git ได้ดึง "testrepo" ไปยังเซิร์ฟเวอร์ในพื้นที่ของเรา
root@host [~/project]# ll total 16K drwxr-xr-x 4 root root 4.0K Oct 30 05:58 ./ drwxr-xr-x. 44 root root 4.0K Oct 30 02:15 ../ drwxr-xr-x 6 root root 4.0K Oct 30 05:48 .git/ drwxr-xr-x 3 root root 4.0K Oct 30 05:58 testrepo/ root@host [~/project]#
ตอนนี้เราสามารถเพิ่มไฟล์ในเครื่องแล้วส่งไปยัง repo GitHub ของเรา หากนักพัฒนารายอื่นกำลังทำงานในโครงการเดียวกันผลักดันการเปลี่ยนแปลงไปยังแหล่งซื้อคืนหลัก ตอนนี้คุณสามารถดึงข้อมูลที่แก้ไขนั้นกลับลงมาเพื่อรวมการเปลี่ยนแปลงไว้ในโฟลเดอร์ในเครื่องของคุณ
ตอนนี้ ลองใช้คำสั่ง git ง่ายๆ สองสามคำสั่งเพื่อเพิ่ม/อัปเดต repo ของเราด้วยข้อมูลใหม่โดยใช้ file.txt ที่เราสร้างไว้ด้านบน ขั้นแรก เราจะเพิ่มข้อความเพิ่มเติมในไฟล์ file.txt ของเรา
root@host [~/project/testrepo]# cat file.txt This is a test file. We will clone this repo to a server. root@host [~/project/testrepo]# cat >> file.txt this is a new commit. We are adding more data to an existing file and will then stage it, then commit it to our testrepo on github. root@host [~/project/testrepo]# cat file.txt This is a test file. We will clone this repo to a server. this is a new commit. We are adding more data to an existing file and will then stage it, then commit it to our testrepo on github.
อย่างที่คุณเห็น เราเริ่มต้นด้วยข้อความเพียงสองบรรทัด จากนั้นจึงใช้คำสั่ง " cat >> file.txt " เพื่อผนวกข้อมูลอีกเล็กน้อยเข้ากับไฟล์ที่มีอยู่ ต่อไป เราใช้คำสั่ง " git add file.txt " เพื่อทำการเปลี่ยนแปลงในเครื่อง
root@host [~/project/testrepo]# git add file.txt root@host [~/project/testrepo]#
( จะไม่มีเอาต์พุต CLI เฉพาะใดๆ เมื่อเรารันคำสั่งนั้น )
เมื่อทำการเปลี่ยนแปลง repo จำเป็นต้องจัดสเตจและถ่ายสแน็ปช็อตของการเปลี่ยนแปลงเพื่อให้สามารถรวมไว้ในประวัติของโปรเจ็กต์ได้ คำสั่ง add ดำเนินการ staging ซึ่งเป็นส่วนแรกของกระบวนการสองขั้นตอนในการดำเนินการเปลี่ยนแปลง การเปลี่ยนแปลงใดๆ ที่จัดฉากในเครื่องจะเป็นส่วนหนึ่งของสแนปชอตถัดไปของ repo และส่วนเพิ่มเติมในประวัติของโปรเจ็กต์
มาสรุปการเปลี่ยนแปลงของเรากัน ทันทีที่เรากด Enter หน้าต่างตัวแก้ไขใหม่จะเปิดขึ้นเพื่อขอให้เราเพิ่มความคิดเห็นเป็นข้อความยืนยันสำหรับการเปลี่ยนแปลง
root@host [~/project/testrepo]# git commit
คลิกปุ่มแทรกบนแป้นพิมพ์เพื่อเริ่มแก้ไขการคอมมิต
1 2 # Please enter the commit message for your changes. Lines starting 3 # with '#' will be ignored, and an empty message aborts the commit. 4 # 5 # On branch master 6 # Your branch is up to date with 'origin/master'. 7 # 8 # Changes to be committed: 9 # modified: file.txt 10 # ~ "~/project/testrepo/.git/COMMIT_EDITMSG" 10L, 261C 1,0-1 All
ตอนนี้ ฉันจะพิมพ์ความคิดเห็นของฉันในบรรทัดที่ 1 หากคุณกำลังเขียนโค้ด นี่คือที่ที่คุณอธิบายการเปลี่ยนแปลงของคุณ ( โปรดอย่าใช้แค่ "อัปเดตเป็นบรรทัด xxx" โปรดอธิบายในความคิดเห็นเกี่ยวกับโค้ดของคุณ!!! )
1 I have added a short amount of text to demonstrate a commit to our repo 2 # Please enter the commit message for your changes. Lines starting 3 # with '#' will be ignored, and an empty message aborts the commit. 4 # 5 # On branch master 6 # Your branch is up to date with 'origin/master'. 7 # 8 # Changes to be committed: 9 # modified: file.txt 10 # -- INSERT --
เมื่อเพิ่มข้อความคอมมิตเสร็จแล้ว ให้คลิกที่คีย์ Escape (Esc) เพื่อออกจากเอดิเตอร์ จากนั้นใช้คำสั่ง " :wq " เพื่อสิ้นสุดการแก้ไข เราจะเห็นรายงานต่อไปนี้:
root@host [~/project/testrepo]# git commit [master 9efda19] I have added a short amount of text to demonstrate a commit to our repo 1 file changed, 2 insertions(+) root@host [~/project/testrepo]#
ขั้นตอนต่อไปคือการ "พุช" ข้อมูลในเครื่องของเราไปยัง GitHub เราจะเรียกใช้คำสั่ง "git push" เพื่อทำสิ่งนี้ให้สำเร็จ เนื่องจากนี่เป็นการพุชครั้งแรกของเรา ชื่อผู้ใช้และรหัสผ่านของเราจึงจำเป็นต้องเพิ่มลงใน GitHub repo
root@host [~/project/testrepo]# git push (gnome-ssh-askpass:55417): Gtk-WARNING **: 14:25:25.456: cannot open display: error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass' Username for 'https://github.com': [email protected] (gnome-ssh-askpass:55578): Gtk-WARNING **: 14:27:31.406: cannot open display: error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass' Password for 'https://[email protected]@github.com': Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 433 bytes | 433.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/drsinger/testrepo.git 27d4315..9efda19 master -> master root@host [~/project/testrepo]#
ตอนนี้ มาดู GitHub กัน