Git Repo บน CentOS

ในบทความนี้ เราจะพูดถึงวิธีการโคลน git repo บน CentOS นอกจากนี้เรายังได้เรียนรู้ความแตกต่างระหว่าง Git และ GitHub ความหมายของการควบคุมเวอร์ชัน repo คืออะไรและจะโคลนที่เก็บได้อย่างไร

Git คืออะไร?

Git คือระบบควบคุมการกำหนดเวอร์ชันหรือ VCS ที่เสถียร สมบูรณ์ และแข็งแกร่ง Git ช่วยให้นักพัฒนาสามารถจัดเก็บ อัปเดต และแชร์ซอฟต์แวร์ที่มีอยู่ในที่เก็บส่วนตัว เมื่อทำการเปลี่ยนแปลง git อนุญาตให้การอัปเดตซอฟต์แวร์ใหม่เขียนทับโค้ดเก่าด้วยข้อมูลใหม่ ในขณะที่จัดเก็บข้อมูลเก่าไว้ใช้ในอนาคตหากจำเป็น นอกจากนี้ยังช่วยให้นักพัฒนาหลายคนทำงานในโปรเจ็กต์เดียวกัน โดยนำการเปลี่ยนแปลงต่างๆ ไปใช้กับส่วนต่างๆ ของโค้ด ซึ่งจะเพิ่มประสิทธิภาพการทำงาน นี่คือเหตุผลที่ Git ถูกระบุว่าเป็นตัวอย่างของ " distributed version control system "


Git Repo คืออะไร?

โครงการ Git เรียกว่า " repo หรือ repository " repos เหล่านี้มีคอลเล็กชันไฟล์และโฟลเดอร์ที่เกี่ยวข้องกับโปรเจ็กต์ทั้งหมด นอกจากนี้ยังมีประวัติการแก้ไขสำหรับแต่ละไฟล์ใน repo

นอกจากนี้ แค็ตตาล็อก repo หรือจับการเปลี่ยนแปลงแต่ละรายการ ซึ่งเรียกว่าการคอมมิต คอมมิตเหล่านี้เรียกอีกอย่างว่าสแน็ปช็อตและคงอยู่เป็น "linked-list relationship" คอมมิตเหล่านี้ (หรือสแน็ปช็อต) ยังสามารถพัฒนาเป็นวิวัฒนาการใหม่ของซอฟต์แวร์ที่เรียกว่าแบรนช์ เนื่องจาก Git เป็นระบบควบคุมเวอร์ชันแบบกระจาย ที่เก็บในตัวจึงสามารถโคลนและแชร์โดยใครก็ตามที่ดูแลสำเนาของที่เก็บ นอกจากนี้ยังสามารถเข้าถึง codebase ทั้งหมดและประวัติของมันได้อีกด้วย! นักพัฒนาส่วนใหญ่ใช้บรรทัดคำสั่งเพื่อเข้าถึงที่เก็บ git ซึ่งอนุญาตให้มีการทำงานหลายอย่างเช่น


  • interaction with the history
  • cloning
  • creating branches
  • committing changes
  • merging new code
  • comparing version changes across sections of code and more.


Git และ GitHub ต่างกันอย่างไร

Git เป็นเครื่องมือควบคุมการกำหนดเวอร์ชัน และ GitHub เป็นที่เก็บข้อมูลที่จัดเก็บและติดตามการเปลี่ยนแปลงในซอฟต์แวร์

เหตุใด Git จึงมีประโยชน์

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


เราจะติดตั้ง Git ได้อย่างไร?

สำหรับ Redhat/CentOS

root@host yum -y update
root@host yum install git


การตั้งค่า Git บน CentOS

ตอนนี้เราได้ติดตั้ง 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 ได้รับการติดตั้งและพร้อมใช้งานแล้ว 


การตั้งค่าโฟลเดอร์ project

ต่อไป ให้เลือกโฟลเดอร์ในเครื่องที่เราจะใช้เป็นที่เก็บในเครื่องของเรา สำหรับตัวอย่างนี้ เราจะใช้โฟลเดอร์ /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

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 ของเรา หากนักพัฒนารายอื่นกำลังทำงานในโครงการเดียวกันผลักดันการเปลี่ยนแปลงไปยังแหล่งซื้อคืนหลัก ตอนนี้คุณสามารถดึงข้อมูลที่แก้ไขนั้นกลับลงมาเพื่อรวมการเปลี่ยนแปลงไว้ในโฟลเดอร์ในเครื่องของคุณ 


Commit New Info to the Repo

ตอนนี้ ลองใช้คำสั่ง 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.


git add

อย่างที่คุณเห็น เราเริ่มต้นด้วยข้อความเพียงสองบรรทัด จากนั้นจึงใช้คำสั่ง " cat >> file.txt " เพื่อผนวกข้อมูลอีกเล็กน้อยเข้ากับไฟล์ที่มีอยู่ ต่อไป เราใช้คำสั่ง " git add file.txt " เพื่อทำการเปลี่ยนแปลงในเครื่อง

root@host [~/project/testrepo]# git add file.txt
root@host [~/project/testrepo]# 

จะไม่มีเอาต์พุต CLI เฉพาะใดๆ เมื่อเรารันคำสั่งนั้น )

เมื่อทำการเปลี่ยนแปลง repo จำเป็นต้องจัดสเตจและถ่ายสแน็ปช็อตของการเปลี่ยนแปลงเพื่อให้สามารถรวมไว้ในประวัติของโปรเจ็กต์ได้ คำสั่ง add ดำเนินการ staging ซึ่งเป็นส่วนแรกของกระบวนการสองขั้นตอนในการดำเนินการเปลี่ยนแปลง การเปลี่ยนแปลงใดๆ ที่จัดฉากในเครื่องจะเป็นส่วนหนึ่งของสแนปชอตถัดไปของ repo และส่วนเพิ่มเติมในประวัติของโปรเจ็กต์

git commit

มาสรุปการเปลี่ยนแปลงของเรากัน ทันทีที่เรากด 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]# 


git push

ขั้นตอนต่อไปคือการ "พุช" ข้อมูลในเครื่องของเราไปยัง 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 กัน

0
518