版本控制工具-Git

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)

Gitolite 部署GiT 仓库

 点我进:>>>>>>>>>>>

GitLab

原文地址:https://www.cnblogs.com/yanshicheng/p/9382792.html