zoukankan      html  css  js  c++  java
  • 版本控制工具-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

  • 相关阅读:
    vue + element-ui实现动态多级表头
    Linux 系统编程 学习:11-线程:线程同步
    Linux 系统编程 学习:10-线程:线程的属性
    Linux 系统编程 学习:9-线程:线程的创建、回收与取消
    Linux 网络编程的5种IO模型:信号驱动IO模型
    Linux 系统编程 学习:8-基于socket的网络编程3:基于 TCP 的通信
    Linux 系统编程 学习:6-基于socket的网络编程1:有关概念
    Linux 系统编程 学习:7-基于socket的网络编程2:基于 UDP 的通信
    Linux 系统编程 学习:5-进程间通信2:System V IPC
    Linux 系统编程 学习:2-进程间通信1:Unix IPC(1)管道
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/9382792.html
Copyright © 2011-2022 走看看