# Version Control System

## Version Control System คือ?

&#x20;       Version Control System คือ ระบบที่จัดเก็บการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์หนึ่งหรือหลายไฟล์เพื่อที่ สามารถเรียกเวอร์ชันใดเวอร์ชันหนึ่งกลับมาดูเมื่อไรก็ได้ ทำงานโดยการคอยดูการเปลี่ยนแปลงของไฟล์เรา แล้วเราจะสามารถควบคุมเวอร์ชันของมันได้ โดยสามารถย้อนกลับไป หรือกลับมาเป็นเวอร์ชันปัจจุบันได้ตลอดเวลา

## Version Control Tools

### GIT

&#x20;       Git เป็น Distributed Version Control System ตัวหนึ่งที่ได้รับความนิยมอย่างมากในหมู่ Developer เริ่มพัฒนาโดย Linus Torvalds ด้วยภาษา C, Shell Script, Perl, Tcl และ Python

![](https://1572294076-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Me05uuZ2Kw6VszdHXnU%2F-MeeIf53IO5tCBzNRHGD%2F-MeeKAWjkL256bu4H1lB%2Fgit_logo.png?alt=media\&token=c30bfac6-35ab-497d-b593-dc28014c52f9)

### CVS

&#x20;       CVS ถูกพัฒนาโดย The CVS team ในปี 1986 และได้เปลี่ยนมาพัฒนาโดยใช้ภาษา C  ในปี 1990 ซึ่งเป็น Version Control System ประเภท Centralized

![](https://miro.medium.com/max/193/1*Mn4PUv4i5veAdYDdCZwbUw.png)

### SVN

&#x20;       SVN เป็น Version Control ประเภท Centralized Version Control System ภายใต้การพัฒนาของทีม Apache Software Foundation โดยใช้ ภาษา C ในการพัฒนา

![](https://1572294076-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Me05uuZ2Kw6VszdHXnU%2F-MeeIf53IO5tCBzNRHGD%2F-MeeKSrJHGuSKe9kxS_O%2F1280px-Subversion_logo.svg.png?alt=media\&token=f0f8dec2-201d-4bd6-8b8e-89eddb67f234)

## Git คืออะไร?

&#x20;       Git คือ version control Software ที่ช่วยบันทึกการเปลี่ยนแปลงของ files โดยดูจากการเปลี่ยนแปลงข้อมูลหรือcode

## ทำไมต้องใช้ GIT ?

### Track version ของ Source Code ย้อนกลับได้

เมื่อจัดเก็บไฟล์ลงใน Git จะเรียกว่า Git Repository ซึ่งสามารถสำรองข้อมูล การเปลี่ยนของ Code ทำให้สามารถย้อนกลับไปเวอร์ชันใดๆ ก่อนหน้าได้ ซึ่งสามารถดูได้ว่าใครเป็นคนแก้ไข

## Repository

&#x20;       Repository คือ ที่เก็บข้อมูลการเปลี่ยนแปลง และ version (snapshot) ต่าง ๆ ของ project ของเรา

![](https://1572294076-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Me05uuZ2Kw6VszdHXnU%2F-MeuSxMsxFEdAROMBSza%2F-Meu_SRHVoN_EpYycbnK%2Fimage.png?alt=media\&token=28c1e199-e7ac-4e73-a904-b91207491f7a)

## Checkout

&#x20;       Checkout คือ การสลับไปใช้ branch อื่นหรือ เวอร์ชันอื่น เช่น branch master ซึ่งเป็นตัวหลักของงานเรา เราก็สามารถสลับไป branch dev เพื่อสามารถแก้ไขงานได้หรือพัฒนา feature ใหม่ ๆ ได้ และเมื่อเจอบัคก็สามารถย้อนไปทำงานเวอร์ชันเก่าได้อีกด้วย

## Git Basic Command

### Git install

```
sudo apt install git
```

### **git init**&#x20;

&#x20;       สร้าง .git ขึ้นมาภายใต้โฟลเดอร์หรือ Project ของคุณในการใช้งานครั้งแรก

{% hint style="info" %}
ไฟล์ .git มีไว้เพื่อเก็บ config หรือ ข้อมูลที่เกี่ยวข้องกับการใช้งาน Git
{% endhint %}

```
git init
```

### git config&#x20;

&#x20;       ใช้แสดงและกำหนดข้อมูลของผู้ใช้เพื่อระบุตัวตนงานเพื่อกำหนดผู้ใช้งาน

```
git config --global user.email "your_email@example.com";
git config --global user.name "your_name";
```

### **git status**&#x20;

&#x20;       ใช้ตรวจสอบว่ามีไฟล์ไหนที่ยังไม่ได้ add หรือมีการเปลี่ยนแปลงแล้วยังไม่ถูกจัดการบ้าง

```
git status
```

### **git add**

&#x20;       ใช้เพื่อเพิ่มไฟล์จาก Local repository หรือ ไฟล์ภายในเครื่องตัวเอง ไปยัง Remote repository หรือ พื้นที่บน GIT

```bash
git add file_name
git add .
```

{% hint style="info" %}
**git add file\_name** เพื่อเลือก add ทีละไฟล์

**git add .** เพื่อเลือก add ทุกไฟล์หรือทั้ง folder
{% endhint %}

### **git commit**

&#x20;        ยืนยันการเปลี่ยนแปลงไฟล์ที่ถูก add โดยสามารถใส่ comment ด้วยการเติม -m ด้านหลัง

```
git commit -m "commit_message"
```

{% hint style="info" %}
**commit\_message** คือ ข้อความหรือรายละเอียดที่ต้องการแนบ
{% endhint %}

### git branch

&#x20;       โดยปกติแล้วจะมี branch หลักอยู่เพียงอันเดียว

```
git branch
git branch branch_name
```

{% hint style="info" %}
**git branch** ใช้ดู branch ที่มีอยู่ทั้งหมด

**git branch branch\_name** ใช้สร้าง branch โดยจะเป็นตัวสำเนาของ branch ที่อยู่ก่อนหน้านี้ (ซึ่งส่วนใหญ่มักจะเป็น Main Branch)
{% endhint %}

### git checkout

&#x20;       ใช้สำหรับย้ายออกจาก branch ที่คุณกำลังทำงานอยู่ไปยังอีก your\_branch ที่คุณต้องการ

```
git checkout your_branch
```

### git remote

&#x20;       ใช้เพิ่ม Location ของ Remote Repository&#x20;

```
git remote add origin https://github.com/user_name/project.git
```

### **git pull**

&#x20;       ใช้งานเพื่อดึงไฟล์จาก branch นั้น ๆ

```
git pull your_branch
```

### **git push**

&#x20;      เป็นการส่งไฟล์ที่ commit แล้วเข้าสู่ remote repository ใน branch ที่ต้องการ

```
git push origin your_branch
```

{% hint style="danger" %}
ไม่ควร push งานขึ้น branch หลักโดยตรง ควรมี branch รองเพื่อลดข้อผิดพลาด เช่น Branch:  main, dev
{% endhint %}

### git clone

&#x20;       หากไม่มี Project อยู่ในคอมพิวเตอร์ที่กำลังใช้งานอยู่ คำสั่งนี้จะทำให้สามารถ Clone (หรือ Download) Project ทั้งหมดลงใน Local directory ที่คุณกำลังใช้งาน

```
git clone https://github.com/user_name/project.git
```

## แหล่งอ้างอิง 📑

{% embed url="<https://medium.com/@ploysiribunyaphat/version-control-system-%E0%B8%97%E0%B8%B3%E0%B9%84%E0%B8%A1-e7fa34035be3>" %}

{% embed url="<https://saixiii.com/what-is-git/>" %}
