Git是一個開源的分布式版本控制系統(也可以叫工具或是軟件)。
## 一段歷史
Linux之父 Linus Torvalds與BitMover公司創始人Larry McVoy曾是很要好的朋友, BitMover開發了一款還不錯的分布式SCM(軟件配置管理)軟件-Bitkeeper。
基于Linux的影響力,Larry McVoy說服了Linus使用Bitkeeper管理Linux
* 1999年12月, Linux PowerPC項目首 先開始使用BitKeeper;
* 2002年2月,開始用它來管理Linux內核代碼主線。
但是作為一個商業付費的軟件,雖然提供了一個可以免費使用的精簡版本,但是不允許修改。
Linus內核開發從2002年到2005年的3年時間里,使用BitKeeper,Linux的開發步伐加快了兩倍。但是作為開源精神的領頭羊,使用非自由軟體來進行Linux核心代碼的管理,除了受到其他自由軟件大佬(Richard Stallman)的批評外,Liunx團隊內部也是非議很多。
2005年, Samba文件服務器開發人Andrew Tridgell寫了鏈接BitKeeper存儲庫的簡單程序,被Larry McVoy指控對BitKeeper進行逆向工程,Linus多次協調無效,McVoy還是決定停止BitKeeper對Linux的支持。一怒之下,Linus在BitKeeper的使用經驗基礎上, 在一個周末的時間創造了Git, 將Bitkeeper送入了末路。
## 集中式與分布式:
與其他的版本控管工具相比, Git 最大的特點就是分布式。
與分布式對應的是集中式, 也就是服務器-客戶端的模式。這種模式的特點是有一臺中央的代碼控管服務器, 不同的開發機器作為客戶端從服務器獲取代碼和進行代碼提交。
而對于分布式的Git來說, 每個客戶端的機器都可以作為代碼控管的服務器, 可以進行代碼的檢出和上傳。
但是, Git 也有中央服務器的概念,而且在大部分的狀況下都會使用到中央服務器。
對于習慣集中式代碼控管工具的開發者來說(比如Perforce), 可以這樣來理解集中式:
如果在每臺機器的本地安裝一個Perforce 服務器, 再到一臺共用的服務器上架設一臺Perforce服務器作為中央服務器。代碼先提交到本地的服務器, 再從本地的服務器匯總到中央服務器。只是Perforce等工具沒有這樣的功能, Git 做到了。
因為本地也是服務器, 也可以進行提交等動作, 所以不聯網也可以進行代碼的提交和控管, 等到網絡恢復才推送到中央服務器。除此,Git 還支持多種協議和提交方式, 在一些Git的平臺上可以使用網頁的方式進行代碼改動,提交和管理
- 前言
- 第1章 概念篇
- 1.1 版本控管的概念與歷史
- 1.2 Git概述
- 1.3 Git 安裝
- 1.4 工作區、暫存區和版本庫
- 1.5 本地庫與中央庫
- 1.6 Git術語匯總
- 1.7 GitHub
- 1.8 裸倉庫
- 第2章 基于本地庫的操作
- 2.1 初始化庫
- 2.2 提交代碼
- 2.3 日志查看
- 2.4 差異比較
- 2.5 提交撤銷
- 2.6 刪除文件
- 第3篇 中央庫命令及操作
- 3.1 中央庫搭建
- 3.1.1 SSH協議中央庫搭建
- 3.1.2 SSH協議中央庫搭建問題解決
- 3.2 推送遠端庫
- 3.3 沖突處理
- 第4章 進階篇
- 4.1 分支與合并
- git整合分支的兩種方式 merge 和 rebase
- 最簡單的git merge 和git rebase 區別介紹和示例演示
- git merge 合并
- git rebase 變基
- 取消merge
- 4.2 標簽
- 4.3 忽略不需要控管的文件
- 4.4 Git工作流程
- 4.5 HEAD 究竟是什么?
- 4.6 .git實現原理解密
- 4.7 代碼拉取與提交
- 4.8 查看提交記錄
- 查看前一個月提交記錄
- 4.9 git reset 和 git revert的區別和適用場景
- 第5章 命令與工具篇
- 5.1 Git常用命令一覽
- 5.2 Git命令索引
- git clone
- git init
- git checkout
- git revert
- git reset
- 5.3 Git GUI使用
- 5.4 Git 可視化工具
- 第6章 實戰篇
- 6.1 GitHub使用介紹
- 6.2 代碼覆蓋與沖突解決
- 6.3 Clone項目到非空目錄
- 6.4 檢出指定的目錄-稀疏檢出
- 6.5 單個文件的回退
- 回退到指定版本
- 提交丟失場景
- 6.6 常用命令
- 6.7 分支合并
- 最簡單最常見的Merge
- 取消單個文件的自動merge
- Excel 文件合并處理
- Pull request
- Bitbucket Pull request
- 分支合并之git merge ,git rebase
- 6.8 已控管文件去除版本控管
- 6.9 本地非空目錄與遠端庫對應
- 6.10 如何使用Gitee 控管代碼
- 6.11 提交和分支等記錄查詢
- git log 提交日志及圖形化顯示
- 6.12 Linux/Windows 免輸密碼
- 6.13 嵌套目錄的代碼控管
- 6.14 從遠端Tag新建分支并提交到遠端
- 6.15 從本地庫撤銷已經添加的文件或目錄
- 6.16 遠端庫回退
- 神鬼不知之Git遠端庫回退更改
- 6.17 merge 之后使用git checkout會導致修改丟失嗎
- 6.18 將Git遠程倉庫中的項目遷移到另一個遠程庫, So easy
- Git 切換Origin
- 第7章 常見問題及解決
- 7.1 Not a valid object name: ‘master’
- 7.2 error: Pulling is not possible because you have unmerged files.
- 7.3 SSL certificate problem
- 7.4 fatal: ambiguous argument 'HEAD^'
- 7.5 You have not concluded your merge (MERGE_HEAD exists)
- 7.6 Please commit your changes or stash them before you merge.
- 7.7 error: path 'xxx' is unmerged
- 7.8 unable to get local issuer certificate
- 7.9 github 無法取code之WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!問題解決
- 問題收集
- git clone 出現 SSL certificate problem: self signed certificate in certificate chain 問題怎么解決
- This branch is out-of-date with the base branch Merge the latest changes from main into this branch.
- 第8章 快速使用
- 快速
- 參考