目錄
一、關鍵概述
二、核心概念
三、常用命令
四、優勢因素
五、應用方案??
六、使用建議
一、關鍵概述
提問:Git 是什么? ?
回答:一句話,分布式版本控制系統(DVCS),用來跟蹤文件(主要是源碼)隨時間的變化,讓多人協作變得高效、安全、可追溯。
二、核心概念
1. 倉庫(Repository) ?
? ?項目的完整歷史 + 所有分支,存在 `.git` 目錄里。 ?
? ?- 本地倉庫:每個開發者電腦上都有一份。 ?
? ?- 遠程倉庫:GitHub、GitLab、Gitee 等服務器上的副本。
2. 工作區(Working Directory) ?
? ?你正在編輯的文件目錄。
3. 暫存區(Index / Stage) ?
? ?介于“工作區”與“倉庫”之間的緩沖區,決定哪些改動將進入下一次提交。
4. 提交(Commit) ?
? ?用 SHA-1 哈希唯一標識的快照;一旦提交就不可更改。
5. 分支(Branch) ?
? ?輕量指針,指向某個提交;創建/切換幾乎瞬間完成。
6. 合并(Merge) / 變基(Rebase) ?
? ?把不同分支的修改整合到一起。
三、常用命令
git init ? ? ? ? ? ? ? ? # 新建本地倉庫
git clone <url> ? ? ? ? ?# 克隆遠程倉庫
git status ? ? ? ? ? ? ? # 查看狀態
git add <file> ? ? ? ? ? # 把改動放入暫存區
git commit -m "msg" ? ? ?# 提交
git log --oneline ? ? ? ?# 查看歷史
git branch <name> ? ? ? ?# 創建分支
git checkout <branch> ? ?# 切換分支
git merge <branch> ? ? ? # 合并分支
git push origin <branch> # 推送到遠程
git pull ? ? ? ? ? ? ? ? # 拉取并合并遠程更新
四、優勢因素
-
離線也能提交、查看歷史。 ?
-
分支/合并極快,鼓勵頻繁分支開發(Feature Branch Workflow)。 ?
-
內容完整性——任何篡改都會被哈希校驗發現。 ?
-
生態龐大——GitHub/GitLab/Gitee、CI/CD、代碼審查、Issue 管理全部圍繞 Git。
五、應用方案??
1. Swiss Army JavaGit(https://gitlab.com/bit-man/SwissArmyJavaGit) ?
2. JGit(Eclipse 官方出品:https://gerrit.googlesource.com/jgit)
維度 | Swiss Army JavaGit | JGit |
---|---|---|
定位 | 早期社區項目,API 簡潔;最新一次提交 2013 年 | Eclipse 官方維護,活躍開發,功能最全 |
協議 | LGPL 2.1 | EDL(類 BSD,商業友好) |
Maven 坐標 | 需自己?mvn install ?本地構建 | org.eclipse.jgit:org.eclipse.jgit:6.10.+ |
初始化倉庫 | DotGit.getInstance(dir).init() | Git.init().setDirectory(dir).call() |
創建分支 | git.branchCreate().setName("feature").call() | 同上 |
合并分支 | git.merge().include(...).call() | 同上 |
底層實現 | 調用本機 Git 可執行文件 | 純 Java 實現,無需本地 Git |
JGit 簡單示例
<dependency><groupId>org.eclipse.jgit</groupId><artifactId>org.eclipse.jgit</artifactId><version>6.10.0.202406032230-r</version>
</dependency>
import org.eclipse.jgit.api.Git;
import java.io.File;public class JGitQuickStart {public static void main(String[] args) throws Exception {// 1. 創建并初始化倉庫try (Git git = Git.init().setDirectory(new File("/tmp/demo")).call()) {// 2. 創建并切換到新分支git.checkout().setCreateBranch(true).setName("feature").call();// 3. 以后任何 commit、merge、push 等操作均可通過 git.xxx() 完成System.out.println("當前分支: " + git.getRepository().getBranch());}}
}
Swiss Army JavaGit使用說明
1. 克隆源碼——git clone (https://gitlab.com/bit-man/SwissArmyJavaGit.git)
2. mvn install安裝到本地倉庫(`~/.m2/repository/javagit/javagit/0.01-SNAPSHOT`) ?
3. 在pom.xml文件中加入依賴:
<dependency><groupId>javagit</groupId><artifactId>javagit</artifactId><version>0.01-SNAPSHOT</version>
</dependency>
4. 詳細示例用法見官方Cookbook。
六、使用建議
-
新項目建議直接選JGit,維護活躍、API 清晰、無需本地 Git
-
維護老代碼或特殊場景才考慮 Swiss Army JavaGit