Git简介
- Git 是一款免费, 开源的版本控制系统.
- Git 诞生在2005年, 创作者是 Linux 之父 Linus Torvalds.使用C语言编写.
- 分布式版本管理系统.
- 速度快, 适合大规模, 跨地区多人协同开发.
git快速入门
git安装
git 安装
1. yum 安装 yum install git -y 2. 源码编译安装 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y wget https://github.com/git/git/archive/v2.7.4.zip unzip v2.7.4.zip make prefix=/usr/local/git all make prefix=/usr/local/git install rm -rf /usr/bin/git ln -s /usr/local/git/bin/git /usr/bin/git git --version
git初始化配置
1. 命令行配置 [root@git ~]# git config ‐‐global 使用全局配置文件 ‐‐system 使用系统级配置文件 ‐‐local 使用版本库级配置文件 [root@node1 ~]# git --version git version 2.26.2 [root@node1 ~]# git config --global user.name "devops" [root@node1 ~]# git config --global user.email "node1@devops.com" [root@node1 ~]# git config --global color.ui true [root@node1 ~]# git config --list user.name=devops user.email=node1@devops.com color.ui=true [root@node1 git_data]# cat ~/.gitconfig [alias] hi = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short [user] name = devops email = node1@devops.com [color] ui = true 2. 编辑配置文件 git config --global --edit
git初始化仓库
[root@node2 ~]# mkdir git_data [root@node2 ~]# cd git_data/ [root@node2 git_data]# git init Initialized empty Git repository in /root/git_data/.git/
git目录说明
[root@node1 git_data]# tree .git/ .git/ ├── branches # 分支目录 ├── config # 定义项目特有的配置选项 ├── description # 仅供 git web程序使用 ├── HEAD # 指明了git branch(即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串,而是分支在refs中的表示,例如ref: refs/heads/master。 ├── hooks # 包含 git 的钩子文件 │ ├── applypatch-msg.sample │ ├── commit-msg.sample │ ├── fsmonitor-watchman.sample │ ├── post-update.sample │ ├── pre-applypatch.sample │ ├── pre-commit.sample │ ├── pre-merge-commit.sample │ ├── prepare-commit-msg.sample │ ├── pre-push.sample │ ├── pre-rebase.sample │ ├── pre-receive.sample │ └── update.sample ├── info # 包含一个全局排除文件(exclude)文件 │ └── exclude ├── objects # 存放所有数据内容,有info和pack两个子文件 │ ├── info │ └── pack └── refs # 存放指针数据(分支)的提交对象的指针 ├── heads └── tags index # 保存暂存区信息,在执行git init的时候,这个文件还没有
git操作流程
git四种状态
- Untracked(未跟踪)
- Unmodified(未修改)
- Modified(已修改)
- Staged(已暂存)
常用命令
git add [file|.] 将文件从工作区添加至暂存区 git commit -m '' 将暂存区数据添提交至本地仓库 git status 查看工作目录状态 git rm --cached file 从暂存区删除文件,提交从本地代码仓库删除 git rm -f 从暂存区删除文本并删除本地文件,删除本地仓库需要执行提交操作. git mv fname n_name 改名字 git diff 比对工作目录和暂存区的不同 git diff --cached 比对暂存区和本地仓库的不同 git log [--oneline|--decorate] 查看历史提交记录 git reflog 查看历史所有操作 git reset --head HEAD^ 回滚历史提交版本的上一次 git reset --head [hash值] 回滚到某一次
高级管理
忽略文件
在git仓库下创建 .gitignore 文件即可
cat .gitignore ### Go ### # Binaries for programs and plugins *.exe *.exe~ *.dll *.so *.dylib # Test binary, built with `go test -c` *.test
分支管理
分支管理命令
git branch 查看当前分支 git branch -v 查看当前分支以及最近提交的记录 git branch 分支名 创建分支 git checkout -b 分支名 创建分支并切换分支 git checkout 分支名 切换分支 git branch -d 分支名 删除分支 git merge 分支名 master上合并指定分支上的代码 git branch --merged 查看 合并的分支 git branch --no-merged 查看那些分支没有被合并 git stash #暂时保存分支 git stash list #查看保存的记录 git stash apply #恢复 git stash drop #删除当前保存记录 git stash pop #恢复自动删除
标签管理
标签管理命令
git tag 显示标签列表 git tag -l 'v1.0.*' 过滤标签 git tag -a v1.2.0 -m 'my version v1.2.0' 新建标签 git show v1.2.0 查看相应标签的信息 git push origin v1.2.0 推送标签 git push origin --tags 推送所有标签 git reset --hard v1.2.0 回滚 git tag -d v1.2.0 删除标签
远程仓库管理
git clone 克隆 git 仓库 git pull 拉取代码并合并到当前分支 git push origin master 上传代码到远程仓库 master 分支 git remote 查看当前配置的远程库 git fetch 拉去代码但不合并到当前分支 git add <别名> <url> 添加多个远程库 git remote rm 远程仓库别名 删除远程仓库
git仓库
简易Git仓库
简易 git 仓库不适合生产环境使用, 只有简单的 ssh 秘钥认证安全性比较低.
创建账户
groupadd git adduser git -g git
创建仓库
[root@node2 ~]# cd /data/ [root@node2 data]# mkdir git_project [root@node2 git_project]# git init --bare git_data.git Initialized empty Git repository in /data/git_project/git_data.git/ [root@node2 git_project]# chmod -R git:git /data/git_project/
免秘钥设置
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
[root@node2 git_project]# cd /home/git/ [root@node2 git]# mkdir .ssh [root@node2 git]# chmod 700 .ssh [root@node2 git]# touch .ssh/authorized_keys [root@node2 git]# chmod 600 .ssh/authorized_keys [root@node2 data]# cat /home/git/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQYr0j5xcrCvOYZzrPBu5Aqmqtl1LC1i8FDDsRsU0w/BxIqYL6mgrWsAj2xowE159WfNPf7mSZ81JWDWf7R70yKejAA28uyIzUHjxTGgITRFLXo7COek11VsVD4Wad1qSzanYsNQ1udTOK5FW4qp3Ox4/Xl+9/GvbMoAdqaM2gYBRmMKFnmdE5wtQdVn2SLFiAcoAiIMSi1l76kQpMR4GTnrODLdUttYIUxCcPUeZdilUPUufTmxPheLL+VYtottWYM+pu5EGhU/6LtkVn67nL+ZVf9yW3yCLazzl6+RRCacpLrlUSDrbRzuj8DQEjZNIZ546jbSNWy5ZB/KDJKdkyCCO3Pxsy77z5OdTXi4KSehse7UKD2uyXRm7Jmh0hcyCc3MB5WfRTrjeBBMrCsXn+3WX+b/WUOeANVaAv6xrd4dt2oyyR+h4cyFgC0RovQjyezl9GlwsmLuTCugEMDjmj6EtOZtsZl/Jg79+H+MXqwm9SM6f20LT2m4XisD2qRP8= root@node4.devops.com [root@node2 git_project]# chown -R git:git /home/git/.ssh/
禁止git登录
# 修改登录 shell git:x:503:503::/home/git:/bin/bash 改为: git:x:503:503::/home/git:/sbin/nologin
客户端验证
[root@node4 ~]# git clone git@172.16.0.62:/data/git_project/git_data.git Cloning into 'git_data'... warning: You appear to have cloned an empty repository. [root@node4 git_data]# git remote -v origin git@172.16.0.62:/data/git_project/git_data.git (fetch) origin git@172.16.0.62:/data/git_project/git_data.git (push)