# SCM - Git --- # 這是蝦米碗糕? ![](https://i.imgur.com/6sbUiQp.png =300x) ---- ## 版本控制系統 - 最初用來管理Linux kernel - 現在則被大家用來作為各系統或專案間的版本控制選擇 - 正當化抄作業的最佳理由(O --- # 講版本控制這回事 ![](https://i.imgur.com/9TlgpL0.png ) ---- ## 你怎麼做得? ![](https://i.imgur.com/gQxHVRM.png) ---- ## 安ㄋㄟ? ![](https://hackmd.io/_uploads/r1S3rm_B2.png) --- # 進入 Git ![](https://i.imgur.com/y7zOY61.png) ---- ## Git File status - untracked -- 未追蹤的 - unmodified -- 未修改的 - modifued -- 經過修改的 - statged -- 等待被commit的檔案 ---- ## 經過講解 我相信有人會覺得... ![](https://i.imgur.com/0FH3U7q.png) ---- ## 記憶法則說要看七次 ![](https://i.imgur.com/DVRjC3C.png =500x) --- ## 建個測試用資料夾吧 - 新增一個測試資料夾 - 右鍵Git Bash here ![](https://i.imgur.com/hnqYMDL.png) ---- ## Git init - 在bash上打上 ```markdown git init ``` - 成功的話資料夾裡會多一個.git資料夾 - 操作任何git指令前的必備步驟 ---- ## 先來設定咚咚 ``` git config --global user.name "patrickstar" git config --global user.email patrickstar@pmail.com ``` - name是指你推的時候用的名子(別人也會看到) ---- ## 增加一個檔案 - 看你想放甚麼進去 ---- ## Git add . - 將modified, untracked的檔案由工作區丟到暫存區 ```markdown git add . ``` ![](https://i.imgur.com/DVRjC3C.png =500x) ---- ## .gitignore - 用來放不需要提交的檔案 - ex : 你的酷密碼、Library ---- ## First commit ```markdown git commit -m 'init: Oh my first sweet commit' ``` - -m的參數是為這個commit增加註解 - 盡量按照[Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/) ---- ## 為甚麼要好好寫Commit ![](https://hackmd.io/_uploads/r1NAJEOr3.png) ![](https://hackmd.io/_uploads/BkEex4OH3.png) ---- ## Wow ![](https://hackmd.io/_uploads/S13QG4uB2.png =500x) ---- ## 把鏡頭拉回Github棚內 - 登入泥的guthub到repositories ![](https://i.imgur.com/2BBQIYi.png) - 右上綠綠的New給他按下去 ---- ## 新建一個repo - 按create repo ![](https://i.imgur.com/TdN5dS3.png =600x) ---- ## 阿剛剛三個選項? - Add a readme file-增加使用說明 - Add .gitigore-裡面是你不想git的檔案 - choose a licence-保護你code的權益 ---- ## 回到Git現場 ```markdown git remote add origin 剛剛拿到的URL ``` ---- ### ㄊㄊㄊ ```markdown git push origin master(main) ``` - 把在staged的檔案丟到遠端同時狀態變成unmodified ---- ## 完成一套流程了a - 然後ㄋ? ---- ## 先讓我看看時間 ---- ## Branch ![](https://i.imgur.com/V2batCC.png =500x430) ---- ## branch ```markdown git branch ``` - 查看目前所有分支 ![](https://i.imgur.com/hwB1uOW.png) ---- ## 創一個檔案 - 以index.html為例 - add之後 commit - git status ![](https://i.imgur.com/OtNHo6v.png) ---- ## 為你的分支命名 ```markdown git branch hotfix ``` ![](https://i.imgur.com/3g2TqO7.png) ---- ## check it out - 切換到剛剛的分支 ```markdown git checkout hotfix ``` ---- ## Then? What happen? - 看起來一樣實際上不一樣(~~我知道聽起來很幹話~~) ---- ## 置換一下文字或圖片 - 再次add之後 commit上去吧 - 現在你的網頁等於是一個新的"版本" ---- ## 讓我們再切換一次 ```markdown git checkout master ``` - 把網頁reload 你會發現又變成原本的樣子 ---- ## 有沒有覺得... - 這就是版本控制嗎 ![](https://i.imgur.com/DquK04c.jpg =500x) --- ## Merge? ![](https://i.imgur.com/ZsCKBNr.gif) ---- ## 頭也不回地向前開 - 非常地無情 ![](https://i.imgur.com/8OCv81o.png) ---- ## 施主 放下屠刀 立地... ![](https://i.imgur.com/fi6B4ew.png) ---- ## 切到你欲合併的分支(被合併的 - 有些人可能不明白 讓我娓娓道來 - 假如你想要把hotfix這隻的進度合併到master,那你就切到master ```markdown git merge hotfix(要合併進來的branch) ``` ---- ## 你會發現 你會訝異 - 嘿 老兄 那超cool的 - 他並在一起了 ---- ## 事事並未如此順遂 - what happend? ![](https://i.imgur.com/PxyyIuS.png) ---- ## 騷年 Golden or Silver axe? - ~~勞贖?~~ 開始刪一刪 ![](https://i.imgur.com/P3Zvr96.png) ---- ## 一樣的操作再來一次 - add之後commit - add之後merge --continue - 差異?? ---- ## 先在這邊緩一下 ![](https://i.imgur.com/UDwPFjX.png) --- ## 啊我都自己操作 別人ㄋ ---- ## 先來了解一下目前的情況 ![](https://i.imgur.com/T2HfXV1.png) - 遠端就是你剛剛remote的地方 ---- ## 現在你的朋友想要一起開發 ![](https://i.imgur.com/v2lsng6.png) ---- ## Crtl + C? ```markdown git clone 你之前的那串URL ``` - 把遠端的資料抓下來 並自動設定remote ---- ## 現在你們擁有一樣的Code了 ![](https://i.imgur.com/1Z7Buve.png) - John就可以在他本地端做到剛才同樣的操作 ---- ## 關於我朋友是個工作狂人那檔事 - 一個晚上趕了兩個工作天的進度 ![](https://i.imgur.com/FiH4gPq.png) ---- ## 現在你想看看John寫的Code... ```markdown git pull origin master ``` ![](https://i.imgur.com/WDDUhwb.png) ---- ## 出conflict了 阿伯 - John的Code跟你改動的code有不一樣的地方 ![](https://i.imgur.com/b9RymtY.png) - 你的就是Current change - John的是Incoming change ---- ## 你超勇的啦 - 在你保留你的更動之後(Accept current change) - 記得add之後commit在push ![](https://i.imgur.com/i4GFQTb.png)->commit前狀態 ![](https://i.imgur.com/aTfmf5f.png)->commit後 ![](https://i.imgur.com/PB1Oa7l.png =300x200) ---- ## 這大概就是基本的Git ---- ## 一切都結束了嘛? ![](https://i.imgur.com/8IOorFk.png) --- ## 才沒有勒 **(σˋ▽ˊ)σ** ---- ## bonus ```markdown git stash git stash drop git stash list git stash pop stash@{number} git stash drop stash@{number} git stash apply stash@{number} ``` ---- ## Dont put binaries in your git ![](https://i.imgur.com/UQBbRW9.png) - exe是最後result的東西 只要有東西更改 exe也要跟著更改 - 每次算出來的hash值都不一樣 - git tree越來越大
{"metaMigratedAt":"2023-06-16T08:11:42.872Z","metaMigratedFrom":"Content","title":"SCM - Git","breaks":true,"contributors":"[{\"id\":\"11c710ab-a997-41f1-bfcc-1bd8000af1a7\",\"add\":5292,\"del\":550}]"}
    1520 views