---
# System prepended metadata

title: CodeCan-Let's Learn Git Chapter1
tags: [Git, CodeCan]

---

<style>
    
    *,*::before,*::after{
        margin:0;
        padding:0;
    }
    
    
    html,body,.ui-content{
        background-color:#333;
        color:#fff;
    }
    
    font{
        font-size:18px;
    }
    
    .red{
        color:red;
    }
    
</style>
###### tags: `CodeCan` `Git`

# CodeCan-Let's Learn Git Chapter1

## 前言
<font>
不知道你們是否曾經有遇過這種狀況。寫完code後要儲存，但有太多版本，或許是昨天、前天，或更久之前寫的。於是聰明的你就根據日期幫這些不同的版本命名。
<br><br>
單人作業的時候，這樣看似沒什麼問題。但只要遇到團隊作業，有各種不同的人在不同的部分寫不同的code，這就會變成不是很好的方法。
<br><br>
或者你想要前後對照前天跟今天你在同一份文件中究竟做了什麼變動，想知道昨天跟今天新增/減少了那些檔案，這種方法也沒辦法提供有效的幫助。

也就是因為這樣，才催生出了版本控制(Version Control)的想法。
而今天主要要介紹的git就是身為軟體工程師一定要知道的版本控制系統。
</font>

## Git工作流程介紹

![](https://i.imgur.com/yIyUS4h.png)

<font>
以下是Git的基本觀念會用到的名詞
<br><br>
工作區<br>暫存區<br>local repository<br>remote repository<br><br>
接下來我會以幾個例子來幫助大家了解這幾個名詞的定義
</font>

### 事前想像
<font>
為了幫助大家了解Git的運作原理，我這邊以大家用積木做了一個飛機為範例
    
![](https://i.imgur.com/TCY8Lhs.png)
    
場景中則有以下設施
1. 你的辦公桌(工作區)
2. 你的檔案夾(暫存區)
3. 你的書櫃(local repository)
4. 公司的書櫃(remote repository)
    
你複製了公司的書櫃到家裡(git pull)讓你的書櫃變得和公司的一模一樣
並且準備好改善飛機的構造讓他變得更好！
    
</font>

### 工作區
<font>
就是你的工作區域，對檔案的任何更動會第一手的直接反應在這邊。<br>
譬如以下你可能做了更動：在機尾左右側各新增一塊積木<br>
那你做了這個更動後這個更動就會<span class='red'>儲存在一張紙上</span>。
</font>

### 暫存區
<font>
上面的更動經過git add就會跑到這裡
可以把暫存區想像成你的書包、公文夾、包包之類的，這時文件檔案都還沒被正式存入資料庫中，而是準備被放到自己的資料庫中。
以上面例子的為例你的檔案夾裡面可能存放了
    
1. 機尾左右側各新增一塊積木
2. 機翼左右側各新增一塊積木
3. 機頭新增一個三角形
    
而<span class='red'>檔案夾裡也有可能有很多張紙</span>
</font>

### local repository
<font>
上面的東西再經過git commit就會來到這
在這邊可以把local repository想成你的書櫃，也就是一個存放資料的資料庫。
    
你可以為你剛剛送來的檔案夾命名：幫飛機增加飛行穩定性
    
而這個<span class='red'>書櫃可能存放了很多的檔案夾</span>例如
1. 幫飛機增加穩定性
2. 幫忙上漆
3. 增加輪子
</font>

### remote repository
<font>
上面的東西經過git push就會來到這
這裡你可以當成是公司的書櫃，及存放資料的資料庫。
而當你做了git push後代表你將你的書櫃複製後取代掉了公司的書櫃。
</font>


## 參考文章

https://medium.com/@flyotlin/%E6%96%B0%E6%89%8B%E4%B9%9F%E8%83%BD%E6%87%82%E7%9A%84git%E6%95%99%E5%AD%B8-c5dc0639dd9