TortoiseGit入門教程(個人用 存在問題)
TortoiseGit入門教程(個人用 可能存在問題)
git是什麼
是版本控制系統 是一個記錄某個檔案的各個變動版本並有詳細註釋 如下面表格就是記錄了 修改人 修改時間修改內容 這樣在我們需要找到一些歷史版本的時候就清晰明瞭
版本 | 檔名 | 使用者 | 說明 | 日期 |
---|---|---|---|---|
1 | service.doc | 張三 | 刪除了軟體服務條款5 | 7/12 10:38 |
2 | service.doc | 張三 | 增加了License人數限制 | 7/12 18:09 |
3 | service.doc | 李四 | 財務部門調整了合同金額 | 7/13 9:51 |
4 | service.doc | 張三 | 延長了免費升級週期 | 7/14 15:17 |
老師使用word的例子也很形象的描述了git
我們用word寫報告 隨著情況變化 有些地方需要再調整 但是原來的東西未必之後不會用上 所有我們就另存為 一個新word 名字叫 報告2020年10月9日 12:08:46.word 後面又遇到更多的情況 為了安全自然繼續另存為 結果到最後就會出現這樣
版本控制系統的分類
- 集中式 如cvs svn
- 分散式 git
集中式和分散式的區別
集中式是需要一臺伺服器專門儲存檔案和歷史備份 每次程式設計師都需要從伺服器上下載程式碼下來 修改完畢再上傳上去 一切的操作實際上都圍繞這臺伺服器來進行
分散式是沒有一臺伺服器專門儲存檔案和歷史備份 或者說 程式設計師每個人的電腦都是一個儲存檔案和歷史備份的伺服器(本地倉庫) 需要更新修改和備份 電腦之間相互推送下自己的修改和備份給其他人就可以了 實際上很多時候會選出一個電腦(或者是gitub或者gitee)作為遠端倉庫 在這個平臺上只是負責儲存各個的備份
安裝配置git和TortoiseGit
- git下載地址 windows下安裝 下一步下一步就好 沒什麼要說的
- git和TortoiseGit的區別:Git本身就是Git,然後Github for windows和TorToiseGit都是Git的一個Gui包裝(理解為是git的一個外掛
- TortoiseGit下載(git小烏龜) 下載TortoiseGit本體和簡體中文語言包 自然是先裝本體然後再安裝語言包
- Git小烏龜的安裝及使用
- 更詳細的可以看開頭的教程連結 包含安裝期間的注意事項和初始配置 語言包的安裝等等 2020黑馬Git教程(2小時從入門到精通)【已完結】 的第三節 有完整的流程
git的四個區域和相互關係
-
workspace 工作區
- 作用:我們編輯修改程式碼的地方
- 位置:在生成git版本庫的指定資料夾下 除了隱藏的.git目錄 剩下的都是工作區
-
reposiroty 本地倉庫(版本庫)
- 作用:自然是儲存檔案和對應的各個版本快照 還有一些其他的內容
- 位置:在自己的機器 就是整個的.git隱藏目錄 在index暫存區 commite 到本地倉庫儲存
- 包含的內容:
- index暫存區(stage)
- 分支
- HEAD指標 預設指向master分支
- 各個檔案快照
-
index 暫存區
- 作用 :版本庫的一部分 工作區中修改完畢後 git add命令把程式碼送到暫存區存放 等到這批修改都放入暫存區再統一的用commit壓入到本地倉庫 不過在TortoiseGit中暫存區的存在感想當的薄弱 因為提交命令是add+commit 提交直接到了本地倉庫 省略了中間過程
- 位置:實際是放在.git目錄下的index檔案 該檔案會記錄該暫存區所記錄的檔案及變動
- 檢視:用git status 來檢視當前暫存區的內容
-
remote 遠端倉庫
-
作用:本地倉庫使用git push來提交資訊到這裡 也可以pull從遠端倉庫拉取
-
位置:可能是其他電腦 也可以是github 或者gitee等等
-
-
本地閉環結構和之間的相互關係
-
完整的閉環結構
git檔案的4種狀態和三種圖示
工作區下的三種檔案圖示:
- 紅色歎號表示 檔案有變動 而且沒有被commit
- 藍色加號表示已經新增新增到了暫存區 但是沒commit
- 綠色對勾表示檔案已經被commit
狀態:
-
Unknown:新增的檔案,也不在版本庫
-
Added:新增的檔案,在版本庫
-
Modified:檔案修改,在版本庫
-
Missing:檔案被刪除,在版本庫有快照 但是工作區下已經刪除沒了
基本流程
- 從遠端倉庫拉取最新變動的工程到本地倉庫
- 在工作區對檔案新增、修改檔案;
- 將修改後的檔案放入暫存區域;
- 將暫存區域的檔案提交到本地倉庫;
- 將本地倉庫的修改推送到遠端倉庫。
TortoiseGit下的基本操作(非命令列)
-
建立本地倉庫
- 開啟TortoiseGit:注意TortoiseGit在windows下是附著在資源管理器上的 只需要開啟資源管理器 然後滑鼠右鍵選擇TortoiseGit的操作就可以進行對應操作了
- 建立本地倉庫流程:選擇要建立本地倉庫的目錄- 滑鼠右鍵 -選擇Git在這裡建立版本庫 - 彈出視窗千萬不要勾選製作純版本庫- 點選確定 - 彈出提示初始化空本地倉庫的視窗 - 建立成功
- 檢視本地版本庫的儲存的檔案和目錄:選中版本庫目錄 - 滑鼠右鍵 - TortoiseGit - 版本庫瀏覽器 -- 可以檢視目前在版本庫中儲存的檔案
- 克隆遠端倉庫到本地生成本地倉庫:
- 注意本地資料夾不能有.git目錄 不然不會出現克隆選項
- 從github或者gitee上 克隆下載 按鈕 點選 找到 連結 是https還是ssh可以選擇 複製連結
- 本地資料夾 - 右鍵 - 克隆 - 窗口裡面填寫 複製的連結 設定下載的本地資料夾 點確定就行
-
新增檔案到本地倉庫
- 新增的檔案要求:該檔案必須在本地版本庫目錄內才可以新增
- 新增檔案流程:首先把檔案放置到本地版本庫目錄內 - 滑鼠右鍵 -TortoiseGit - 新增 - 加入完成視窗 - 點選確定按鈕 (這裡點確定只是把檔案送到暫存區 如果點選了提交了才直接送到本地倉庫)
-
修改檔案並提交到本地倉庫
-
繼續提交檔案到本地倉庫:接上面的操作 選中檔案 - 滑鼠右鍵 - 提交 XXXX - 出現提交視窗 - 寫上該檔案的日誌資訊 - 最好勾選 作者和日期 - 點選提交按鈕 - 點選關閉按鈕即可
-
檢視某個檔案的歷史快照:選中該檔案 - 滑鼠右鍵 - TortoiseGit - 顯示日誌 - 可以檢視過往的歷史快照
-
-
將工程整個新增到本地倉庫
- 忽略某些工程檔案 不新增到本地倉庫:
- 忽略某些檔案目錄的原因:要新增某個工程到本地倉庫 工程裡面的有些私人檔案或者資料夾是不能新增到本地倉庫的 因為很可能後面上面上傳到遠端倉庫被大家都看到 洩露隱私
- 忽略檔案目錄流程:進入工程目錄內 找到要忽略的檔案或者目錄 滑鼠右鍵 - TortoiseGit - 新增到忽略列表 - 選擇檔案或者目錄名而不是副檔名 - 出現忽略視窗 - 一般都選擇遞迴忽略和忽略檔案放到檔案目錄所在目錄 - 點選確定 - 在本地就會生成一個忽略列表檔案來記錄哪些是被忽略的 - 注意 這個自動生成的忽略檔案也要提交到本地倉庫 不要忘記了
- 工程資料夾新增進本地倉庫:
- 把工程資料夾複製到本地倉庫目錄裡面 因為只有到了本地倉庫目錄 才能把他們新增到本地倉庫 否則連新增都沒法新增
- 設定忽略檔案或者目錄 生成忽略檔案
- 選中工程目錄 - 滑鼠右鍵 - TortoiseGit - 新增 - 新增整個工程資料夾到暫存區 然後根據需要提交到本地倉庫 即可
- 忽略某些工程檔案 不新增到本地倉庫:
-
刪除本地倉庫的檔案
-
從版本庫中徹底刪除檔案: 在資源管理器中直接刪除或者TortoiseGit下的刪除 然後把這改動提交到本地倉庫就行
在版本庫目錄下 - 滑鼠右鍵 - GIt提交 master - 出現提交視窗 - 視窗下方有檔案呈現缺失狀態 勾選它- 寫入刪除日誌 - 提交 - 即可從版本庫中完全刪除
-
誤刪檔案但是想還原:在版本庫目錄下 - 滑鼠右鍵 - TortoiseGit - 還原 其實是從本地倉庫的該檔案的歷史快照還原了一下而已
-
刪除版本庫裡面的該檔案對應的歷史快照 但是不刪除本地檔案:選中該檔案 - 滑鼠右鍵 - TortoiseGit - 刪除並保留本地副本 然後再 滑鼠右鍵 - GIt提交 master - 出現提交視窗 - 視窗下方有檔案呈現缺失狀態 勾選它- 寫入刪除日誌 - 提交 -
-
-
檢視檔案的歷史快照和還原指定版本
-
快速找到需要的歷史快照:日誌資訊視窗的最上部那行 可以選擇提交時間段 備註關鍵字 作者名 標籤等等很多條件查詢
-
檢視歷史快照的檔案內容和檔案變動 :日誌資訊視窗 - 選中歷史快照 - 右鍵 - 和工作副本比較 - 就可以看到歷史快照的該檔案和當前工作區的對應檔案的比較 檔案變動 日誌資訊視窗 - 選中歷史快照 下面是涉及到的檔案變化列表
-
對比不同的歷史快照的檔案內容差異: 日誌資訊視窗-按住 Ctrl -> 選中兩個歷史版本 -> 滑鼠右鍵 -> 比較版本差異 - 出現比較差異視窗 下面雙擊檔名 就可以檢視詳細的對比;
-
還原指定歷史版本(版本回溯): 選中該檔案 - 滑鼠右鍵 - TortoiseGit - 顯示日誌 - 選擇你要回溯的歷史快照-- 右鍵 - 重置master到此版本 - 重置視窗 - 選擇硬重置hard選項 ( 注意的是 這個選擇會讓工作區的檔案和結構也會返回歷史快照的狀態 會覆蓋當前的工作區檔案內容 如果有需要備份當前工作區的檔案內容 以防萬一) - 點確定 - 還原指定歷史版本完成(臨時貯藏本地檔案 :這裡臨時備份下工作區文件 可以使用 滑鼠右鍵 - TortoiseGit - 貯藏更改 - 等到還原完畢了 再 滑鼠右鍵 - TortoiseGit -彈出貯藏 - 就可以恢復工作區的原來內容了)
-
還原歷史快照的操作日誌的檢視: 滑鼠右鍵 - TortoiseGit 顯示引用記錄 可以檢視
-
本地倉庫還原歷史版本對遠端倉庫推送的影響:因為遠端倉庫是最新的 本地倉庫還原到老版本 把本地老版本推送到遠端倉庫的最新版本 自然會失敗 如果想執意把遠端倉庫更新到本地的老版本 不要使用同步視窗來推送 用 在版本庫目錄下 - 滑鼠右鍵 - TortoiseGit - 推送 出現推送介面勾選 強制 已知變更 (意思就是強制推送 強制讓遠端倉庫更新到本地還原的那個版本)- 確定 即可 但是要慎用 因為會覆蓋掉遠端倉庫的資料
-
-
推送本地倉庫到遠端倉庫 以gitee為例
-
建立遠端倉庫之gitee
- 註冊gitee賬號 登入進入
- 建立遠端倉庫 右上有+號 點開 - 選擇 新建倉庫- 輸入你要建立的版本庫名字和版本庫描述資訊 - 選擇public 如果選擇private會收費畢竟違背開源精神 不要勾選任何預置檔案 比如readme之類的統統不要 要一個乾淨的版本庫 -建立
- 檢視遠端倉庫 登入進來右上最右邊的三角點開 - 個人主頁 - 倉庫
-
選擇連線方式配置連線遠端倉庫
-
常見的ssh https方式介紹
-
ssh的作用:本身是一個網路協議 主要是實現安全遠端登入 安全的通訊協議 基於金鑰的安全 需要建立2個 私鑰加密 公鑰解密 公鑰私鑰的知識 私鑰保留下來 不要傳送給別人 非對稱加密
-
ssh的基本原理:圖解SSH原理
-
https的作用:是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性
-
https和ssh的區別:
1、前者可以隨意克隆github上的專案,而不管是誰的;而後者則是你必須是你要克隆的專案的擁有者或管理員,且需要先新增 SSH key ,否則無法克隆。
2、https url 在push的時候是需要驗證使用者名稱和密碼的;而 SSH 在push的時候,是不需要輸入使用者名稱的,如果配置SSH key的時候設定了密碼,則需要輸入密碼的,否則直接是不需要輸入密碼的。
-
-
https方式連線遠端倉庫(推薦簡單直接 ssh配置有點複雜)
- 登入gitee獲取 賬號密碼 進入要連線的 遠端倉庫 右側的 橘色按鈕 克隆下載 點擊可以檢視到https方式連線的url 複製
- 滑鼠右鍵 - TortoiseGit - 設定 - 選擇git左側欄 - 輸入使用者和email - 選擇 遠端 - 輸入遠端名 和剛才複製的url 因為不是ssh 無需設定金鑰 要標籤 點確定 嘗試連線 第一次連線會要gitee的賬號和密碼
-
ssh方式連線遠端倉庫
- 在win7系統下使用TortoiseGit(烏龜git)簡單操作Git@OSC 詳細流程直接看這個
- 用putty生成金鑰對 獲得公鑰私鑰
- 在gitee上傳公鑰 獲取ssh地址
- 在tortository上配置使用者名稱 email 和 遠端的名字 連線地址 和對應的putty的私鑰檔案
- 配置好後開始推送嘗試 注意第一次推送會要gitee的賬號和密碼 記得寫好 一旦報錯 可以直接控制面板找憑證管理器 裡面找到gitee的賬號密碼資訊 修改為正確的就行
-
-
推送到遠端倉庫
-
沒什麼說的 滑鼠右鍵 - TortoiseGit - 推送 - 窗口裡面 選擇要推送的本地分支 一般都是master 下面還要選擇 遠端 -點確定
-
同步介面來推送 滑鼠右鍵 - 同步 (推薦使用這個來) 主要是和遠端倉庫進行同步操作的 包含了 拉取 獲取 推送 提交 檢視日誌 歷史檔案比較 檢視等待提交 等待推送 的內容等等功能 是一個綜合性的介面 非常值得仔細研究
-
-
常見遇到的問題
-
推送失敗的常見原因圖示 其實很多時候拉取失敗也是類似的問題 程式碼衝突也和這個沾邊
-
一般都是推送失敗的情況 可以把失敗的反饋 搜尋下 基本就有解決辦法 比如本地倉庫還原到了歷史快照 但是遠端倉庫卻還是最新的 會出現無法推送到遠端倉庫 這類情況就強制推送 推送介面勾選 強制 已知變更 然後推送 這就是最終手段 會覆蓋遠端倉庫的資料 慎用
-
比較常見的推送失敗處理流程: 先貯藏下當前工作區的改動(滑鼠右鍵 - TortoiseGit - 貯藏更改) 然後從遠端倉庫拉取一下最新的的版本庫- 然後再彈出貯藏 - 可能會出現程式碼衝突 - 衝突檔案上編輯衝突 - 檢視衝突和解決衝突 - 儲存標記衝突解決 - 提交 - 再推送**到遠端倉庫 具體細節可以看程式碼衝突部分
-
-
-
拉取遠端倉庫到本地倉庫
- 滑鼠右鍵 - TortoiseGit - 拉取 或者 滑鼠右鍵 - 同步 使用同步介面拉取
- 推薦拉取 因為拉取其實是2個命令 一個是fetch 一個是merge(合併) 而獲取fetch只是單單獲取而已 但是拉取有點不好的是會自動把同名檔案的不同內容自動合併到一起了 從而產生程式碼衝突
- 拉取失敗 搜尋錯誤關鍵字吧 或者也是用 貯藏的路子試試
-
出現程式碼衝突問題的解決
-
其他衝突可以自行百度必應 而且反饋的錯誤資訊並不難懂
-
程式碼衝突基本出現在多人同時對一個專案進行操作的情況下 一般出現在推送 拉取 還原歷史快照 本質上是同一個檔案被多個人同時修改而內容產生了差異導致TortoiseGit不知道如何處理這些差異
-
程式碼衝突測試(人工模擬一次程式碼衝突)
-
直接在gitee上修改1,txt檔案內容為0123
0 1 2 3
-
在本地工作區的1.txt檔案內容改為0224
0 2 2 4
-
然後在嘗試從gitee上拉取工程到本地倉庫 結果是
隨後有一個彈窗提示
-
如何找到這個衝突檔案呢。滑鼠右鍵 - TortoiseGit - 解決衝突(不是編輯衝突) - 出現衝突視窗 列表裡面就顯示當前出現程式碼衝突的檔案 - 雙擊檔案
-
官方處理流程
-
衝突視窗雙擊衝突檔案開啟預設的差異對比工具
-
切換差異部分來編輯合併後的1.txt內容 直到滿意為止 這裡把合併的內容隨便改為了0 2 4 8
-
點選標記為已解決 然後在點選儲存 關閉 對比工具
-
再次提交 這次的合併修改操作 出現一個意外提示 提示強調這次的提交涉及到程式碼合併 千萬確定好了再提交之類的balabala..... 點選確定 - 重寫提交的日誌資訊 - 提交到本地倉庫
-
順便推送到遠端倉庫就好
-
-
自己處理流程 (官方流程很好 但是需要用到官方工具來處理衝突 使用起來不太順手 還是使用語言對應的編輯工具處理比較好)
-
依然是開啟衝突視窗找到衝突檔案 在資源管理器裡面找到了該檔案 用對應的編輯器開啟他 這裡用notepad演示
-
直接把內容改為我們需要的內容 儲存
-
滑鼠右鍵 - TortoiseGit - 解決衝突(不是編輯衝突) - 出現衝突視窗 勾選衝突檔案 點選確定 - 點選提交 (這步其實就是設定衝突已解決而已)
-
出現提交視窗和一個提醒當前是合併程式碼的提交balabala之類的 寫提交日誌 點提交按鈕 - 提交完畢
-
順便推送到遠端倉庫 完畢
-
-
-
分支的各種操作 沒搞明白 後面再說吧