Git簡介
Git是一種分佈式版本控制系統
git與SVN對比
項目 | GIT | SVN |
---|---|---|
操作 | 概念複雜,命令多,不易上手 | 簡單易操作 |
分支價格 | 分支廉價 | 分支昂貴 |
代碼管理 | 分佈式管理 | 集中式管理 |
保存 | 保存歷史版本的完整文件 | 保持差異文件 |
git核心
Git最核心的一個概念就是工作流
- 工作區(Workspace)是電腦中實際的目錄
- 暫存區(Index)類似於緩存區域,臨時保存你的改動
- 倉庫區(Repository),分爲本地倉庫和遠程倉庫
通常提交代碼分爲3步:
git add
從工作區提交到暫存區
git commit
從暫存區提交到本地倉庫
git push
從本地倉庫提交到遠程倉庫
git的安裝與配置
安裝git服務端
#安裝yum依賴及軟件
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y
yum install -y git
# 創建用戶組及用戶
groupadd git
useradd git -g git
passwd git
# 初始化空的git版本庫
[root@git-server ~]# mkdir /home/git/gitrepo
[root@git-server ~]# cd /home/git/gitrepo
[root@git-server gitrepo]# git init --bare runoob.git #不指定默認爲.git
[root@git-server gitrepo]# cd ..
[root@git-server git]# chown -R git:git gitrepo
# 克隆官方的倉庫到本地倉庫
git clone https://github.com/jenkins-docs/simple-java-maven-app.git
git服務端配置
cd /etc/ssh
vim sshd_config
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
systemctl restart sshd
cd /home/git
mkdir .ssh
chown -R git:git .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
chown -R git:git authorized_keys
systemctl restart sshd
在服務端authorized_keys寫上客戶端的公鑰ip_rsa.pub
[git@git-server ~]$ git config --global user.name "Kelsey1998"
[git@git-server ~]$ git config --global user.email "[email protected]"
[git@git-server ~]$ cat .gitconfig
[user]
name = Kelsey1998
email = [email protected]
版本庫(倉庫)創建
[git@git-server ~]$ mkdir -p workspace/demo
[git@git-server ~]$ cd workspace/demo #工作區
[git@git-server dome]$ git init
Initialized empty Git repository in /home/git/workspace/demo/.git/
# 查看git版本庫
[git@git-server demo]$ ls -ld .git
drwxrwxr-x. 7 git git 119 May 30 16:17 .git
表項 | 目錄 |
---|---|
版本庫 | workspace/demo/.git 又叫倉庫 |
工作區 | workspace/demo .git版本庫所在的目錄 |
git全局文件
用戶主目錄下的.gitconfig 用戶個人
系統文件/etc/gitconfig 全局
git用戶名和郵箱地址
[git@git-server ~]$ git config --global user.name "Kelsey1998"
[git@git-server ~]$ git config --global user.email "[email protected]"
[git@git-server ~]$ cat .gitconfig
[user]
name = Kelsey1998
email = [email protected]
配置的用戶名和郵箱地址將在版本庫提交時用到
git別名
[root@git-server ~]# git config --system alias.st status
[root@git-server ~]# git config --system alias.co checkout
[root@git-server ~]# git config --system alias.ci commit
[root@git-server ~]# git config --system alias.br branch
[git@git-server ~]$ cat /etc/gitconfig
[alias]
st = status
co = checkout
ci = commit
br = branch
git命令高亮顯示
[git@git-server ~]$ git config --global color.ui true
[git@git-server ~]$ cat .gitconfig
[user]
name = Kelsey1998
email = [email protected]
[color]
ui = true
級別 | 有效目錄 |
---|---|
Local | 當前項目有效(工作目錄/.git/config) |
Global | 當前用戶有效(用戶目錄/.gitconfig) |
system | 所有用戶有效(Git目錄/etc/gitconfig) |
git命令
git status
- git status
查看項目的當前狀態 - git status -s
--short,輸出標記爲兩列,第一列是對staging暫存區而言,第二列是對workspace工作區而言
狀態 | 含義 |
---|---|
? | 未被添加到緩存 |
A | 本地新增的文件 |
M | 文件的內容或者mode被修改了 |
AM | 文件在被添加到緩存之後又有改動,需要再次被git add |
D | 本地刪除的文件 |
R | 修改文件名 |
git add
git add 將文件添加到緩存
git add . #添加當前項目的所有文件
git add <filename1,filename2> #添加指定文件
git reset HEAD
git reset HEAD <filename>
取消已緩存的內容
git diff
git diff 顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別
應用場景 | 命令 |
---|---|
尚未緩存的改動 | git diff |
查看已緩存的改動 | git diff --cached |
查看已緩存的與未緩存的所有改動 | git diff HEAD |
顯示摘要而非整個diff | git diff --stat |
git commit
git commit 將緩存區內容添加到倉庫中
git commit -m "description"
git rm
git rm <file> #從Git中移除某個文件
git rm --cached <file> #把文件從暫存區域移除(保留在當前的作目錄中)
git rm -f <file> #把文件從暫存區域移除(不保留在當前的作目錄中)
git rm -r <dir> #遞歸刪除
git mv
git mv 移動或重命名一t個文件、目錄、軟連接
提交到Github
git remote add anliu [email protected]:an1iu520/anliutest.git
git push -u anliu master
git客戶端
git clone [email protected]:gitrepo/simple-java-maven-app