<style>
.new {
color: red;
font-weight: bold;
}
</style>
# Git & GitHub
###### tags: `presentation` `sprout`
資訊之芽 熊育霆 2022/05/08
---
[Sprout Python Git & GitHub 課前準備 - HackMD](https://hackmd.io/wYmCh9hBRpmn2v9jlfr5mQ)
---
## 好消息與壞消息
* 好消息
* 沒有 judge 上的作業,只有不計分的自主練習,所以今天很輕鬆
* 最後有迷因時間
* 壞消息
* 沒有 judge ,你需要自己額外找資源或是跟同學討論有哪些好資源可以使用
大家多利用 discord 跟同學和講師討論,學習效果會更好
---
## 一些小提醒
* 今天會跟我們第一階段的第一堂課一樣,包含一堆名詞,但不用全部記起來。重要的東西我會多強調幾次
* 這堂課不會教 Python
* 這堂課教的工具不會精進你的 Python 或其他程式設計技巧
----
* 但是這堂課要教的工具非常非常非常好用,可以應用在各種情境...
* 如果你發現你的朋友沒在用,那是因為他們的文化圈不知道有這個好用的東西。我們派遣你去當傳教士
----
```
早上好資訊之芽
現在我有 Python
我很喜歡 Python
但是
Git 和 GitHub
比 Python ...
因為非常好版本控制
追蹤紀錄非常好
```
---
## 版本控制
----
### 什麼是版本控制
----
想像你在寫一份報告,這時你有報告初稿
```
report-ver1.docx <-
```
如果你沒有寫過報告你就想成玩遊戲的存檔(?
----
老師看完你的初稿以後,你又做了一次修改,得到第二個版本
```
report-ver2.docx <-
```
----
但你怕你改的太糟,所以你決定把第一版也留下來
```
report-ver1.docx
report-ver2.docx <-
```
----
下一次改版又多了一版
```
report-ver1.docx
report-ver2.docx
report-ver3.docx <-
```
----
過了n次迭代以後,你電腦內的檔案可能會變成這樣子
```
report-ver1.docx
report-ver2.docx
report-ver3.docx
report-final.docx
report-real-final.docx
report-ultra-final.docx
...
```
----
你隨時可以回去看之前寫的東西
```
report-ver1.docx
report-ver2.docx
report-ver3.docx
report-final.docx <-
report-real-final.docx
report-ultra-final.docx
...
```
----
但是如果這個報告是分組報告,跟你一起做報告的組員也同時在修改這份檔案,可能會造成更大的混亂,這樣怎麼辦的?
----
把所有紀錄都保存下來,可以隨時回去查找、把檔案恢復到以前的編輯狀態,這就是所謂「版本控制」
---
## Git
----
### 什麼是 Git
一個版本控制工具,他可以解決的問題有
* 恢復以前的編輯狀態
* 方便處理和其他人協作會產生的麻煩
---
### GitHub
----
### GitHub 簡介
透過Git進行版本控制的軟體原始碼代管服務平台(抄自[GitHub - 維基百科,自由的百科全書](https://zh.wikipedia.org/wiki/GitHub))
----
意思就是給你用 git 放我們寫的糞 code 上去的地方
----
當然你也可以放其他東西上去
* 圖片
* 影片
* 純文字檔
* 你的 word 檔案
* 你的 pdf 檔案
----
在 GitHub 網站上可以找到很多其他大神寫的東西
[microsoft/vscode: Visual Studio Code](https://github.com/microsoft/vscode) - Vscode
[gorisanson/pikachu-volleyball: Pikachu Volleyball implemented into JavaScript by reverse engineering the original game](https://github.com/gorisanson/pikachu-volleyball) - 皮卡丘打排球
----
當然,有些人會放 code 以外的其他東西
[Anduin2017/HowToCook: 程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).](https://github.com/Anduin2017/HowToCook)
[vEnhance/napkin: An Infinitely Large Napkin](https://github.com/vEnhance/napkin) - 在數奧圈比較知名的一份數學大雜燴講義
----
所以...現在是 GitHub 導覽時間
----
### GitHub 簡介 (一分鐘內解釋給你爸媽他們可以聽懂的版本)
* 程式設計師的雲端硬碟
----
```
聖❤️誕🧡節💛老💚公💙不💜在🖤家
孤❤️獨🧡寂💛寞💚就💙來💜玩🖤我
👉只有你想不到的
👉沒有你玩不到的
👉午夜必備神器
👉激情互動♥️
👉多人交互共享資源😍
👉java,python,c++應有盡有類型俱全
👉全棧工程,傳統bug,嗨到晚上睡不著♥️
👉🌐https://github.com/
👉快來體驗一下吧🔞
👉有頭髮人員🈲入
---print("Hello world")--
```
---
## Git 操作與指令
----
首先我們先在 GitHub 上建立一個 repository
接下來請大家專心看我操作
----
哪裡不清楚的話請馬上發問
1. 建立 repository
2. 如果是 Window 系統,打開 Git Bash,MacOS 請打開終端機
3. 輸入指令 `git clone <your_repo_url>`
4. 你現在已經把你的 repo 下載下來了,用 Vscode 打開它
---
## Git 指令
----
git 有很多指令
以下列出我自己最常用的10個
----
1. `git clone`
2. `git status`
3. `git add`
4. `git commit`
5. `git push`
6. `git pull`
7. `git diff`
8. `git branch`
9. `git checkout`
10. `git merge`
----
當然你自己查可以查到一大堆
![](https://i.imgur.com/LZQQ0ie.png)
----
還可以找到小抄
![](https://res.cloudinary.com/practicaldev/image/fetch/s--Zib71Fgv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n082uxea33j6zq3mca7u.png)
----
![](https://i.imgur.com/L083mtU.png)
----
這些指令動手做,做中學就好
死背到底誰背得起來
----
### 示範 & 練習時間
我動手做一次比打一堆講義快多了
---
## 更多參考資料
這些東西一個小時講不完,而且不自己動手做很難吸收
以下推薦一些自學的網站
----
[連猴子都能懂的Git入門指南](https://backlog.com/git-tutorial/tw/)
* 優點
* 中文
* 有很多圖片搭配說明
* 老嫗能解
* 缺點
* 教學可能有點久沒更新,可能有超過十年
* 我其實沒有真的把他看完
* 我個人不太認同他對指令做的入門、進階分法
* 沒有講得很細
----
[W3Schools - Git Tutorial](https://www.w3schools.com/git/)
* 優點
* 說明十分詳細清楚
* 目錄分類清楚
* 有十分多的練習題
* 缺點
* 英文
* 其實 w3school 這個網站還有很多其他程式語言、工具或框架的教學,我個人很推這個網站
----
[Git - Book (zh-tw)](http://git-scm.com/book/zh-tw/v2)
* 優點
* 中文
* 說明十分詳細清楚
* 內容豐富
* 目錄分類清楚
* 缺點
* 有部份內容還是英文的沒有翻譯出來
----
[Git - Book](http://git-scm.com/book/en/v2)
* 優點
* 上一頁那東西的原文版
* 更詳細清楚
* 內容更豐富
* 可以練習英文
* 缺點
* 英文
----
[Learn Git Branching](https://learngitbranching.js.org/?locale=zh_TW)
* 優點
* 視覺化的程度不可思議
* 幫助你學習 git branching 的概念(廢話)
* 可以當作遊戲闖關來玩
* 缺點
* 暫時想不到
----
[YouTube](https://youtu.be/dQw4w9WgXcQ)
* 優點
* YouTube
* 缺點
* YouTube
---
## Memes
----
![](https://i.imgur.com/7KKt5HH.png)
----
![](https://i.imgur.com/jkOW471.jpg)
----
<iframe id="reddit-embed" src="https://www.redditmedia.com/r/ProgrammerHumor/comments/l15v60/git_push_meme_force/?ref_source=embed&ref=share&embed=true" sandbox="allow-scripts allow-same-origin allow-popups" style="border: none;" height="527" width="640" scrolling="no"></iframe>
----
![](https://i.imgur.com/drFa2Pa.png)
----
![](https://i.imgur.com/c6DcMr6.png)
----
![](https://i.imgur.com/0ZBwepw.png)
----
![](https://i.imgur.com/kI9ISAs.png)
---
Any Questions?
![](https://i.imgur.com/w2xd7oj.png)
---
End
{"metaMigratedAt":"2023-06-16T23:58:26.775Z","metaMigratedFrom":"YAML","title":"Git & GitHub","breaks":true,"slideOptions":"{\"transition\":\"fade\"}","contributors":"[{\"id\":\"f93c8d2e-91fa-44cf-b9d2-ea6d875fcb79\",\"add\":6341,\"del\":1119}]"}