Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

大家應該都要會的工具 Git 從放棄到會用1-基礎篇

1,524 views

Published on

在2017/06/24 study4 的6月台中場次介紹
http://study4.tw/Activity/Details/6
有篇回顧那個場次的反饋:http://to.alantsai.net/20170624-blog-ss
主要是source tree + TortoiseGit + 指令介紹基本日常使用情境,一些常見設定

Published in: Software

大家應該都要會的工具 Git 從放棄到會用1-基礎篇

  1. 1. 大家應該都要會的工具 git By Alan Tsai 2017-06-24 從放棄到會用 – 基礎篇
  2. 2. 關於我 2 ▰Alan Tsai 蔡孟玹 ▰後端(攻城)工程師 ▻Web Developer - 主要使用 .Net/C# 和 Asp .Net Mvc ▰看小說 ▰找到我 – contact@alantsai.net ▻http://blog.alantsai.net - Alan Tsai 的學習筆記 ▻{服務}.alantsai.net ▻http://fb.alantsai.net - fb ▻http://ln.alantsai.net – linkeding ▻http://ss.alantsai.net - slideshare
  3. 3. 為什麼要有版控 3 ▰每次有個工作 ▰估算工時 ▻拆解任務 ▻5個工作 ▻每做完一個就做記錄嗎? ▻還是做完一個任務才記錄? ▻怎麼保留每一次的記錄? ▻怎麼知道每一次記錄修改什麼?
  4. 4. 為什麼要有版控 4 ▰問題點 ▻請問那個版本是最新的? ▻請問送出的版本是哪一個? ▻假設送出之後又有來調整,那個 是修改過的? ▻每一個修改之間的原因是什麼? ▻是誰修改的?
  5. 5. 為什麼要有版控 5
  6. 6. 目錄 6 ▰介紹篇 ▰準備篇 ▰基本介紹 ▰進階指令 ▰結語(暫時)
  7. 7. 介紹篇 7
  8. 8. 沒有版控 – 無法協同工作 8
  9. 9. 第一代 – 一個人的時代 9 ▰沒版控最大問題是,同時修改怎麼辦? ▰使用Lock技術 ▻同時只能一個人來 ▰軟體都是由少數個人寫出來的 ▰不能協同工作? ▰大型軟體怎麼辦? 來源:Pro Git P28 Figure1-1
  10. 10. 第二代 – CVCS(Centralized) 集中式版控 10 ▰有個中央Server記錄版本 ▻可以多人使用 ▰第一代問題是容易雙方互等 ▻在commit(提交)的時候針對有重複的去做修正 ▰典型程式有 ▻Subversion (SVN), Team Foundation Server (TFS), CVS, SourceSafe, 來源:Pro Git P29 Figure1-2
  11. 11. 第三代 – D(Distributed)VCS – 分散式版控系統 11 ▰不再只有一個中央系統 ▻任何人裡面有記錄就是一個Repository ▻隨時可以commit ▻merge before commit 來源:Pro Git P30 Figure1-3
  12. 12. 黑暗時代 – 沒有版控的世界 12 ▰遊戲世界來說就像
  13. 13. 黑暗時代 – 沒有版控的世界 13 ▰遊戲世界來說就像
  14. 14. 第二代 – 問題 14 ▻沒網路要開發怎麼辦? ▻不同團隊如何並行開發? ▻Server掛掉怎麼辦?
  15. 15. 第三代 15 ▰模擬器 ▰遊戲外面可以存檔
  16. 16. 為什麼選git 16 ▰隨時存檔 – 不用擔心影響別人 ▰速度快 ▻建立分支變態的快 ▰不需要任何其他裝備就可以開始使用 ▰可以接其他的版控 ▻git svn - 開始使用git - 用git操作svn repo ▻Git tfs
  17. 17. 為什麼選git 17 https://insights.stackoverflow.com/survey/2017#technology
  18. 18. 為什麼選git 18 ▰微軟的Windows Code轉git ▰世界上最大的repo ▻300GB ▰2周後的survey https://blogs.msdn.microsoft.com/bharry/2017/05/24/th e-largest-git-repo-on-the-planet/
  19. 19. Git 適合什麼類型的檔案 19 ▰任何類型的專案 ▰純文字類型的檔案較好 ▻比對比較容易 ▻Word就比較不適合 ▰預設不適合(但是有額外套件幫忙處理) ▻大型檔案 ▻Binary ▻圖片
  20. 20. 為什麼git不好學 20
  21. 21. 為什麼git不好學 21 ▰cli不好上手 ▰同一個指令有太多不同參數 ▰和Windows有些水土不服 ▻雖然好很多了 ▰透過GUI減少這些困擾
  22. 22. 準備篇 22
  23. 23. 準備篇 23 ▰ 需要了解 ▻ 安裝git ▻ CLI ▻ Gui ▻ 設定Git ▻ 必須的設定 ▻ 常見設定
  24. 24. 準備篇 安裝Git 24
  25. 25. 安裝git 25 ▰Git 本身是CLI工具 ▰安裝內容 ▻CLI工具 – 必要 ▻Posh-git – 讓Powershell作為CLI界面 – 非必要 ▻GUI界面 – 非必要
  26. 26. Git的功能(相對值) 26 ▰CLI ▻100%功能 ▰GUI ▻60%~80% ▰IDE類型整合 ▻Visual Studio Code ▻Eclipse ▻40%~60%
  27. 27. 使用組合 27 ▰ CLI (powershell) + TortoiseGit ▻ CLI做一般操作 ▻ TortoiseGit 做 歷史查詢(log),檔案比對(diff)和處理 conflict ▰ Source Tree + TortoiseGit ▻ Source Tree有點ide的感覺 ▻ TortoiseGit在歷史查詢比較清楚
  28. 28. 安裝git – CLI工具 28 ▰Git for Windows ▰包含git.exe、git bash、 git gui 、git lfs、git flow和Windows Credential Manager ▻https://git-scm.com/download/win ▻chocolate #沒安裝過choclate 用 admin開啟 cmd 然後執行 @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin" choco install git.install -params ‘“/NoShellIntegration”'
  29. 29. Git for Windows 安裝1 29 ▰Windows Explorer Integration ▻建議不要勾,因為其他Gui工具就有提供
  30. 30. Git for Windows 安裝2 30 ▰Use Git from Git Bash only ▻只有Git Bash能夠跑Git ▰Use Git from the Windows Command prompt ▻在Path上面加git – cmd就可以執行git ▰Use Git and optional Unix tools from Windows Command Prompt ▻在Path加上git 和 安裝一些Unix工具
  31. 31. Git for Windows 安裝3 31 ▰Windows 斷行吃 CRLF 而Unix吃 LF ▻Windows建議選第一個 ▻Unix建議選第二個 ▰這邊是設定版控儲存的斷行方式 ▰這個可以安裝完成之後透過 git config設定 git config --system core.autocrlf “true” #第一個選項 git config --system core.autocrlf ”input” #第二個選項 git config --system core.autocrlf ”false” #第三個選項
  32. 32. powershell作為替代工具(非必要) 32 ▰我是powershell和gui交叉使用 ▻Gui用來看log和做diff(比對)和merge(合併) ▻Powershell 用來做其他操作 ▰Posh-git (https://github.com/dahlbyk/posh-git ) ▻對git的一些指令有tab completion ▻Prompt提供詳細資訊
  33. 33. posh-git安裝方式 1(非必要) 33 ▰Chocolate ▰或 ▰Powershell Gallery ▻預設Windows 10 有安裝 – 其他需要到Powershell Gallery做下載 choco install poshgit Set-ExecutionPolicy RemoteSigned Install-Module posh-git -Scope CurrentUser
  34. 34. posh-git安裝方式 2(非必要) 34 ▰重開powershell ▰試試看指令 ▰是否會自動補全變成fetch ▰如果沒有執行 git fe <tab> Import-Module posh-git Add-PoshGitToProfile -AllHosts
  35. 35. Git Gui 35 ▰TortoiseGit (俗稱 小烏龜,TortoiseSvn) ▻支援Windows ▻https://code.google.com/p/tortoisegit/ ▰SourceTree ▻支援Windows 和 Mac ▻https://www.atlassian.com/software/sourcetree/overview ▰GitHub For Windows ▰ 更多 Gui 工具 ▻ https://git-scm.com/downloads/guis
  36. 36. Source Tree安裝 36
  37. 37. Source Tree安裝 37
  38. 38. Source Tree安裝 38 ▰何謂ssh?在Windows下如何使用ssh?如何在 Windows透過ssh下載和上傳程式到github?
  39. 39. Source Tree安裝 39 ▰也可以管mercurial – 沒在用選最後一個
  40. 40. 準備篇 設定篇 40
  41. 41. 設定檔案的層級和位置 41 System 層級 Unix - /etc/gitconfig Windows – {Git安裝路徑}etcgitconfig 使用者層級 Unix - ~/.gitconfig 或者 ~/.config/git/config Windows - %userprofile%.gitconfig 專案層級 在專案下的 .git/config 輕
  42. 42. 設定檔案修改的方式 42 ▰CLI ▻Powershell
  43. 43. 設定檔案的層級和位置 43 System 層級 Unix - /etc/gitconfig Windows – {Git安裝路徑}etcgitconfig 使用者層級 Unix - ~/.gitconfig 或者 ~/.config/git/config Windows - %userprofile%.gitconfig 專案層級 在專案下的 .git/config 輕git config –-system {參數} git config –-global {參數} git config {參數}
  44. 44. 設定檔案修改的方式 44 ▰CLI ▻Powershell ▰Gui ▻TortoiseGit ▰直接改檔案 ▻檔案位置直接改 ▻注意 檔案斷行是 LF(Unix系統) ▻Notepad會斷行錯誤 ▻新的編輯器就正常:Visual Studio Code 、Notepad++
  45. 45. 必設定參數 45 ▰姓名和Email為必設欄位 ▻Cmd ▻透過TortoiseGit ▻透過直接改檔案 ▻路徑 - %userprofile%.gitconfig git config --global user.name“Alan Tsai“ git config --global user.email “alan@alantsai.net”
  46. 46. 必設定參數 - global 46
  47. 47. 必設定參數 – 專案層級 47 ▰有開專案情況下 ▰右邊的Setting
  48. 48. 非必設定參數 – log編碼問題 48 ▰Git log 指令 中文訊息被編碼 ▰原因是git log使用page,需要設定編碼到 環境變數 ▻開啟[系統管理](Win 8以上快速鍵Win+x y) – 或者點[我的電腦] 點[右鍵]選[系統] ▻參數名稱: ▻參數值: LC_ALL C.UTF-8
  49. 49. 非必設定參數 – 路徑編碼問題 49 ▰git status 顯示的中文路徑 ▰設定是否用quotepath git config --global core.quotepath false
  50. 50. 預設編輯器 50 ▰如果不適用cli就可以忽略 ▰預設git會用vi做commit的編輯器 ▻一般Windows使用者進去就出不來了!!! ▰可以使用自己喜歡的編輯器 ▻範例 – 設定使用Visual Studio Code git config --global core.editor “Code --wait”
  51. 51. 確認目前設定值 51 ▰由於設定值有不同層級 ▻要確認目前啟用的設定可以用 ▰專門看某一個值 git config --list git config user.name
  52. 52. 基本介紹 52
  53. 53. Git指令結構 53 ▰git {動作} {參數} ▰{動作}稱之為command ▻git init ▻git status ▰{參數} 讓動作有不同效果 ▻通常有兩個版本 ▻簡短版: 一個減號搭配一個字母,例如:-v ▻ 組合版版: 一個減號搭配多個字母,例如:-vn == -v -n ▻ 完整版:兩個減號搭配完整字,例如:--verbose
  54. 54. 求救指令 – git help 54 ▰git help ▻列出基礎幫助 ▰git help {command} ▻例如 ▻帶你到官方文件 ▰git {command} –h ▻重點介紹 ▰不過大家應該還是google比較快 git help add git add -h
  55. 55. 建立本機Repository 55 ▰Repository像是整個版控的資料庫 ▻要開始使用git要先建立Repository ▰建立方式 ▻使用指令 ▻使用TortoiseGit git init
  56. 56. 建立本機Repository 56
  57. 57. .git 資料夾 57 ▰執行完之後多出一個 .git資料夾 ▻如果沒有看到,打開系統檔案和顯示副檔名 ▻這個資料夾絕對不能刪掉 – 刪掉就沒任何記錄了
  58. 58. 作業流程 58 沒有任何 修改 修改檔案 準備要上 版的內容 儲存 git status git diff git add . git commit
  59. 59. 加入一個檔案到版控 59 ▰先在資料夾加一個叫做 ReadMe.md 的檔案 ▰下一個git status指令來看目前版控情況 ▰下add把檔案加到staging - .(點)代表所有檔案 ▰下commit (輸入訊息) 把staging內容存到版控 git status git add . git commit
  60. 60. 加入一個檔案到版控 – Source Tree 60 ▰建立一個ReadMe.md的檔案 ▰切換到Source Tree 1. Stage All = git add . 2. 進入到Staging 會被commit的內容 3. 寫入這次記錄的原因 4. Commit(儲存)
  61. 61. 加入一個檔案到版控 - TortoiseGit 61 ▰先在資料夾加一個叫做 ReadMe.md 的檔案 ▰[右鍵] -> [Git commit -> “master”] ▰選擇ReadMe.md ▰ 輸入commit訊息 ▰[Commit]
  62. 62. 3個儲存空間 62 ▰Repository (版控的”資料庫”) ▻整個版控歷史記錄。 ▻就是.git資料夾 ▰Working Directory ▻目前的工作資料夾 ▻任何修改尚未進入Staging 或者 版控的修改 ▰Staging Area (index) ▻任何被git add過的檔案 ▻下次git commit會進入的版控的內容 git add . git commit
  63. 63. 3個儲存空間 63 ▰TortoiseGit看不出來這個概念 Working Directory Stage Area (index)
  64. 64. 關鍵字 – 在賣場買東西 64 ▰Working Directory = 推車 ▻你把要買的東西放到推車裡面 ▰Staging Area = 準備排隊結帳輸送帶 ▻排隊結帳會把東西從推車放到輸送帶 ▰Commit = 結帳 ▻當工作人員幫你刷購買物品結帳 ▻
  65. 65. 檔案的狀態 65 Working Directory
  66. 66. 基本介紹 git status 66
  67. 67. git status – 檢查目前檔案狀態 67
  68. 68. 檔案的狀態 Source Tree 68 ▰Not Tracked ▻尚未在版控的資料庫裡面 ▰Added ▻準備加入到版控 ▰Modified ▻已在版控的內容有被修改 ▰刪除 ▻當在版控的內容被刪除時
  69. 69. Git status – 同一個檔案 stage之後又修改 69
  70. 70. Git status – 指令 70
  71. 71. Git status – 同一個檔案 stage之後又修改 71
  72. 72. Git status 其他參數 72 ▰精簡版 git status -s
  73. 73. TortoiseGit – Check Modification 73
  74. 74. FAQ 為什麼看不到資料夾修改 74 ▰Q ▻為什麼我加入了一個資料夾,但是 git status 沒有列出來呢? ▰A ▻git是管理檔案內容 – 所以假設只是為了建立資料夾結構,可 以在那個資料夾下面建立一個空檔案 ▻習慣使用 .gitkeep 作為空檔案
  75. 75. 基本介紹 git add 75
  76. 76. Source Tree – 把檔案加入staging 76
  77. 77. Source Tree – 加入整個檔案 77
  78. 78. Source Tree – 加入檔案的部分內容 78 ▰同等於 git add -p {file path}
  79. 79. git add 79 ▰把檔案從Work Space加入到 Stage ▰把檔案部分修改內容加入stage ▰把已存在版控的檔案加入stage ▰互動式加入 git add git add -p {file path} git add -u git add -i
  80. 80. TortoiseGit add 80
  81. 81. 設定忽略檔案 - .gitignore 81 ▰並不是所有檔案都要進入版控 ▻原則上能夠重新產生出來都不要進去 ▻例如編譯過的dll、exe ▰放在和.git同一個層級,建立.gitignore檔案即可 ▰全域可以用 ▰gitignore 檔案可以參考: https://github.com/github/gitignore git config --global core.excludesfile “{路徑}”
  82. 82. Git add 效果 82 .git (repo) Stage (index) Working Directory git add
  83. 83. 基本介紹 git reset 83
  84. 84. Git reset - 從 stage 放回working directory 84 git reset {檔案路徑} .git (repo) Stage (index) Working Directory git add git reset
  85. 85. Source tree 85
  86. 86. 基本介紹 Git checkout 86
  87. 87. Git checkout – 從repo蓋掉working directory 87 ▰還有其他用途 ▻未來介紹branch在介紹 git checkout {檔案路徑} .git (repo) Stage (index) Working Directory git add git reset git checkout 注意: 執行這個有修改的內容 會被刪掉
  88. 88. Source Tree – 還原 88
  89. 89. TortoiseGit revert 89
  90. 90. 基本介紹 Git commit 90
  91. 91. 把stage存到repo 91 ▰從stage存入到repoo ▻自動跳出設定的編輯器 ▻必須輸入一段訊息 ▰不跳出編輯器 git commit git commit –m {訊息} .git (repo) Stage (index) Working Directory git add git reset git checkout git commit
  92. 92. 如何寫好commit 訊息 92 ▰訊息字數 ▻標題 每行 50 個字 ▻標題和內文空一行 ▻內文每行72個字 ▰訊息內容 ▻寫 為什麼 而不是 做了什麼 ▻結合Issue Tracking的號碼 – 例如 fix #211 –表示關掉issue 211
  93. 93. 取得之前輸入過的訊息 93
  94. 94. 修改上一個commit 94 ▰少加入檔案或想要調整訊息 ▰注意,這個指令不要對有送出去到外部的commit做
  95. 95. 基本介紹 Git log 95
  96. 96. Git log –歷史 96 ▰用git log指令可以看到歷史記錄 ▻這個指令有很多參數 git log git log --oneline --abbrev-commit --all --graph
  97. 97. 用TortoiseGit的Show log 97
  98. 98. 比對工具設定 98
  99. 99. TortoiseGit 在對office文件比對 99 ▰雖然說git版控office文件容易造成空間大 ▰但是以TortoiseGit來說 ▰比對的時候會呼叫原生word做比對 ▰因此版控office文件變得容易 ▻其他gui也可以透過設定達到類型效果
  100. 100. IDE類型很適合日常的操作 100 ▰例如VS Code ▻Commit ▻比對 ▻切換分支
  101. 101. 進階指令 101
  102. 102. 暫存功能 – git stash 102 ▰功能做到一半臨時需要去處理別的怎麼辦? ▰暫存目前在Working Directory的任何修 ▰取回第一筆暫存並且把這個暫存刪掉 ▰看目前有那些暫存 git stash git stash pop git stash list
  103. 103. Stash 103
  104. 104. 兇手就是你 104 ▰有時候要針對當一個檔案每一行修改的時間和誰修 改 ▰請使用git blame ▰更進階可以用 ▻DeepGit
  105. 105. 提供檔案給別人 105 ▰Export
  106. 106. Best Practise 106
  107. 107. 多久commit一次 107 ▰請記住一個原則 ▰每一個commit是minimum working unit ▻意思是最小可運作的單位 ▻換句話說,至少能夠build即可 ▰請不要一個commit裡面有3~4個不同性質功能的 修改 ▰建立好的commit歷史記錄對於未來很有幫助
  108. 108. Commit 訊息很重要 108 ▰請參考commit 篇 ▰不管用什麼CVS,請記住一定要寫 ▻因為太重要了,因此git逼你一定要寫 ▰寫的好在3個月回來看你才容易知道什麼時間改了什麼,為什麼 改 ▻在debug很有幫助 ▰我個人習慣會在前面用先表示是什麼功能 ▻例如:[前台][首頁]左邊banner跑版調整
  109. 109. 結語 109
  110. 110. 版控的重要性 110 ▰版控是一切的基石 ▰只有版控做好了,其他地方才能夠往下做 ▰早幾年提到ALM的時候,版控就是其中一塊,也是 比較容易開始的一塊 https://blogs.msdn.microsoft.com/africaapps/2013/05/2 9/application-lifecycle-management-part-1-of-5/
  111. 111. 其他資源 111 ▰Git官網 https://git-scm.com/ ▻Pro Git https://git-scm.com/book/en/v2 ▰Git指令圖解說明 ▻http://marklodato.github.io/visual-git-guide/index-en.html ▰連猴子都能夠懂的Git入門指南 ▻http://backlogtool.com/git-guide/tw/ ▰關注我的部落格 – 特別是git標籤 - http://blog.alantsai.net/search/label/Git
  112. 112. 112 Q&A 感謝大家 任何問題都可以在 contact@alantsai.net 部落格-Alan Tsai 的學習筆記 找到我
  113. 113. CREDITS Special thanks to all the people who made and released these awesome resources for free: ▰ Presentation template by SlidesCarnival ▰ Photographs by Startup Stock Photos 113

×