Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 113 Ad

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

Download to read offline

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

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

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

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

Advertisement

More from Alan Tsai (20)

Recently uploaded (20)

Advertisement

大家應該都要會的工具 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

Editor's Notes

  • 2005 問世
    2008 年搭配github往上升

×