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 "1284915257@qq.com"
[git@git-server ~]$ cat .gitconfig
[user]
name = Kelsey1998
email = 1284915257@qq.com
版本库(仓库)创建
[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 "1284915257@qq.com"
[git@git-server ~]$ cat .gitconfig
[user]
name = Kelsey1998
email = 1284915257@qq.com
配置的用户名和邮箱地址将在版本库提交时用到
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 = 1284915257@qq.com
[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 git@github.com:an1iu520/anliutest.git
git push -u anliu master
git客户端
git clone git@192.168.213.122:gitrepo/simple-java-maven-app