Git 版本控制

GIt

Git 简介

Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。

Git 易于学习占地面积小,具有闪电般快速的性能。它超越了Subversion,CVS,Perforce和ClearCase等SCM工具,具有廉价的本地分支,便捷的临时区域多个工作流程等功能

Git 安装与初始化

git 使用方式

  1. 原生命令行,推荐使用
  2. GUI图形软件,实现git部分功能

linux 安装

源码编译安装

rpm包手动安装

使用yum 安装

  1. 配置阿里云的yum源,因为它下载快,下载软件包齐全
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  1. 一条命令安装git软件
yum install git -y
  1. 安装git完毕,查看版本
git --version
  1. 设置git的版本控制用户信息
针对当前linux登录的用户添加了一个配置,不会对他人造成影响
git config --global user.name "name"
git config --global user.email "email@163.com"
# 用这个命令就会在 ~/.gitconfig文件

#用--system就是对操作系统所有的用户,都设置这个配置
git config --system user.name "name"

  1. 查看全局版本用户信息
git config --global --list

windows 安装

在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

Git运行前的配置

同Linux安装时对git进行用户信息的配置

既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。 每台计算机上只需要配置一次程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

这个用户指的是linux用户

  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  2. ~/.gitconfig~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
  3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。 --local 当前仓库配置

Git 配置相关命令

yum install git -y  安装git

git --version  查看git版本

git config --system --list 查看系统所有linux用户的通用配置,此命令检查/etc/gitconfig

git config --global --list 查看当前linux用户的配置,检查~/.gitconfig文件

git config --local --list 查看git目录中的仓库配置文件,.git/config文件

git config --global user.name "name"  配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置

git config --global user.email "email@163.com"  配置当前linux用户全局邮箱

git config --global color.ui true 配置git语法高亮显示

git config --list 列出git能找到的所有配置,从不同的文件中读取所有结果

git config user.name  列出git某一项配置

git help 获取git帮助

man git man手册

git help config 获取config命令的手册

Git 基础

Git 的工作流程

工作目录(你当前linux操作的目录,workspace) > 暂存区(stage) > 本地仓库(repository) > 远程github (remote)

git的命令,就是将文件变化,在这四个区域,来回变动

初始化git版本库的方式

对已经有的代码进行 版本管理

  1. 对当前已经有的django项目进行git初始化
git init
# git init  初始化一个git版本库,会生成一个.git 文件夹,此时这个目录就是git仓库了.
  1. 查看git状态
git status
  1. 对代码,进行跟踪,标记 ,然后提交本地工作区的代码,到暂存区
git add .
  1. 提交暂存区的代码,到本地版本库
git commit -m "写入你的提交备注信息"   
# -m 是标记注释的意思
  1. 查看git提交日志
git log 

tips:

  1. git的各种命令,就是对四个区域来回切换,并且只能在git工作区下去敲,必须得在含有.git文件夹的目录,去敲命令,才可以
  2. 在git版本库目录下,新创建的文件,都会被标记为 Untracked files,代表未跟踪的文件
  3. 对新创建的文件,进行跟踪 git add .
  4. 修改文件会被标记为 modified,对修改过的代码文件,也必须git add 添加到暂存区
  5. 任何的对项目修改的操作,注意都要git status看一下

当前机器没有项目,直接进行git初始化,这个是管理一个空的目录

mkdir 目录名

git init 初始化这个空目录

远程克隆下载一个项目,从github,或者gitlab

远程克隆下载一个项目,从github,或者gitlab ,一台新的机器,啥也没有,把公司的代码下载出来,进行开发,以及版本管理

基本操作

  1. git回退历史
语法:	git reset --hard commit的id记录   --hard参数是强制性回退  commit的id记录从 git log中查
git reset --hard 954e6df1c0a2a71dd141850727d3eddd580518b3
  1. git穿梭未来
git 回退,前进版本,其实就是是对git的文件指针,来回切换
文件指针叫做head
git reflog  #查看所有回退历史记录的命令
然后再使用命令前进,其实就是修改了head指针
git reset --hard

  1. 撤回git修改的记录
对已经跟踪的文件app01/views.py进行修改,此时标记为了modified:   app01/views.py
git add .
如果你发现代码修改错了,git可以很方便的撤回
git checkout -- 文件名
git checkout -- app01/views.py 
  1. 修改git工作区的文件,重命名,以及删除文件
linux的命令如下
    rm 	删除 
    mv  移动目录,或者重命名
但是,你对git仓库中的代码,请使用git的命令
    git rm  删除git管理的代码
    git mv  对git管理的代码,改名
  1. git临时区的概念
使用场景:
git add  作用是?  是把本地工作区的代码,提交到暂存区
git commit   将暂存区的代码,提交到本地版本仓库中,提交完毕,这件事就结束了 

使用流程,场景,在你开发新功能的时候,突然线上代码有问题,你必须得改线上代码,
将你目前已经开发好的功能,临时存储起来,
待你修复bug完毕之后,再把这个临时存储的代码,回退回来即可:
    1.git stash  # 将你暂存区提交的代码,放到一个stash临时区中
    2.修复bug完毕
    3.拿回stash的代码
    git stash pop  

    4.查看stash是否还有临时代码
    git stash list 

    5.注意未标记的,已修改的文件,都得git add 添加到暂存区之后,才可以提交到本地仓库
    git add .

    6.如果你想提交这个代码
    git commit -m "提交注释信息"
  1. git分支功能,每个人都有自己的分支,不直接影响本体代码,在自己的分支上,写完代码后,通过管理员吧分支的代码,合并到主干上即可
git branch  # 查看当前所在的分支
git branch  b1  #创建b1分支
git branch  b2  #创建b2分支

git checkout b1  #切换到b1分支

	分支开发使用流程
		1.创建新的分支
			git branch b1 
		2.切换分支
			git checkout b1 
		3.在分支下,写自己的代码
			........ add , commit 
		4.切换到主干分支上
			git checkout master 
		5.合并分支的代码,此时b1开发提交的代码,就被合并到master了
			git merge  b1 
			
			
	分支冲突怎么办?手动解决冲突的代码即可
	思路:master分支和b3分支,同时操作一个文件,对同一行代码进行写入
		
		0. git branch b3  创建另一个分支
		1.用master主干分支,操作一个文件,并且提交commit
		git branch # 当前是主干master
		模拟对一个文件的第二行写入代码
		
		2.master提交本次修改记录
		git add . 
		git commit -m "提交注释"
			
		3.切换分支,也对同一个文件,进行写入代码,且提交
		git checkout b3 
		模拟对同一个文件,写入同一行代码,肯定会和master冲突
		git add .
		git commit -m "分支提交的注释"
		
		4.回到master主分支,合并b3分支,然后手动解决
		git checkout master 
		
		git merge b3 
		如果出现了冲突,就手动编辑这个文件,删除git自动添加的冲突注释
		
		5.再次提交
		git add . 
		git commit -m  "master最终合并的注释"
		
		
    git分支的命令
        git branch 分支名linux     创建分支linux
        git checkout 分支名linux    切换分支到linux
        git branch    查看当前分支情况,在哪一个就有*符
        git check -- filename 一键还原文件,将git仓库的文件覆盖当前文件,危险命令
        git checkout -b name  创建+切换新的分支
	

常用命令

git init 初始化
git status  查看git版本库的状态
git add 指定文件或者 . 
git commit -m "提交的注释"  提交暂存区的内容到本地仓库
git checkout  文件名  #撤回对文件的修改
git checkout 分支名 #切换不同的分支
git log   #查看git提交的日志记录
git reflog  #查看所有提交以及回退的记录
git reset --hard  commitID  #回退到某一个提交的id版本下
git config --global user.name "你的名字"
git config --global user.umail "你的邮件"
git branch   		#查看分支
git branch 分支名  #创建一个新的分支
git branch -d  分支  #删除这个分支
git checkout -b 分支名 #创建并且切换到一个新的分支下
git stash   #将暂存区的记录,临时放到一个区域 ,先git add之后,再git stash
git stash pop  #删除最后一个stash记录,放回暂存区
git rm  #删除git版本库中的文件
git mv  #改名
git remote add 别名 github仓库的地址
用法如下
git remote add origin git@github.com:examole/example.git

git push 别名 分支名  
用法
git push origin master #推送本地git仓库到github仓库了

git pull origin master  #下载github远程仓库到本地来

Github 使用

流程

  1. 注册一个github账号 https://github.com

  2. 登录后,添加创建一个新的github仓库,用于传输本地代码

  3. 新建github仓库,填写github仓库的名字,描述信息,以及redame文件,以及忽略文件(忽略编程语言的一些缓存文件)

  4. 添加ssh秘钥,让github和linux机器进行免密登录 windows设置

    1. linux推送代码到github有2个登录方式

      1. 一个是账号密码方式
      2. 一个是ssh秘钥方式
    2. 选择ssh秘钥,安全性更高

      1. ​ ssh是一个远程安全登录的命令,可以通过ssh-keygen命令生成一对公私钥(其实就是2个秘钥文件),然后把公钥发给github,私钥自己本地保留

      2. 操作

      3. [root@fd dj220]# ssh-keygen   # 这个命令生成一对公私钥,一路回车
        ...
        # 公私钥内容如下  id_rsa是秘钥   id_rsa.pub 是公钥 
        
        
  5. 把公钥的内容,赋值粘贴发给github

    1. # 查看公钥
      [root@fd .ssh]# cat /root/.ssh/id_rsa.pub 
      # 将如下公钥信息,复制
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKfEGqHrIf8n6NrawBFt0/slRobTVuI9HoLxBax0SdhIj+ATKgsEoVryG1S3WXulStagDqF4dBSTRbNPFO/rrMdyURYRnSceQBKdNe+SmW2ttb/bfxd4JOnsC2ARCBK+DCTB48gtoSx+x4AUx3HGMUkOlgCjhHxk55CaMY8BarBvdBAuOtUrv2RVOiheTTI+Sr8OJL/7lHEkZWGkW1n+xnx4/Urph4oa6lg8gQgFaWlLA9z5+cN8ZrQUi0MLX4p2e8sYfMnkzra5sasUKQulqRsATaD8RK4FD+VEDWYwGfbdncCIMgiqol6gEQXKc4OJ/mU/xQMx5RQFwQGXa4hFFX root@fd
      
  6. 此时你的linux 机器和github已经建立ssh通道了

  7. 获取你的github项目仓库地址

    1. 比如 git@github.com:example/example.git
  8. 在linux机器上配置远程仓库别名

    1. git remote add 都是关键字 然后给你的 github 项目地址添加一个别名叫做 origin
    2. git remote add origin git@github.com:example/example.git
  9. 下载代码 pull

    1. 保证你的本地代码,和远程github仓库内容一致,如果不一致,会失败,先pull下载代码,保证一致性
    2. git pull origin master #向远程的github origin别名下的master分支下载代码
  10. 此时可以把你本地的代码,推送到 github 仓库了

    1. git push origin master
    2. git push 是推送的意思 origin是远程仓库地址的别名 master 推到远程仓库的master分支上
    3. 得到git管理的版本仓库下敲
  11. 去github去查看代码

开发流程 - 新环境

  1. 配置ssh秘钥

  2. 在一个目录,克隆一个新项目代码

    1. git clone git@github.com:examole/example.git
  3. 在 github 仓库下,在浏览器中,新建一个分支,名字是development

  4. 下载最新的github代码

    1. 下载最新的github代码
  5. 此时项目,默认只有一个master分支,所以需要新建一个分支去开发,便于维护master的代码

    1. 在本地新建一个dev分支,并且和远程的github的dev分支建立关系
    2. git branch development origin/development
  6. 在项目中使用development分支去开发

    1. ...开发代码省略...
  7. 提交本地开发

    1. git add .
    2. git commit -m "提交代码标记,注释"
  8. 提交分支本地的代码,到 github 中

    1. git push origin development
  9. 合并分支代码,推送到 master 主干线中

    1. git checkout master 
      git merge development # 合并分支的代码
      git push origin master  # 推送本地master的代码到github中
      

gitlab

gitlab私有仓库的搭建, github共有仓库不安全,虽然现在也有私有仓库的功能了

搭建流程

  1. 环境配置,至少4G内存的虚拟机

  2. 通过yum安装gitlab,阿里云的源也没有gitlab这个软件包

    1. 解决方案:

      1. 选择gitlab官网提供的yum仓库地址
      2. 还是去找一个第三方,拥有gitlab软件包的yum仓库
    2. 配置清华大学的yum源

      1. 找到yum仓库目录
        /etc/yum.repos.d
        然后手动创建一个 以.repo结尾的文件
        touch  gitlab.repo 
        
    3. 写入如下信息

      1. [gitlab-ce]
        name=Gitlab CE Repository
        baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
        gpgcheck=0
        enabled=1
        ~        
        
    4. 安装gitlab

      1. yum install gitlab-ce
        
  3. 启动gitlab

    1. gitlab-ctl reconfigure # 初始化gitlab,只能执行一次
      gitlab-ctl status/stop/start   # 启动gitlab
      gitlab-ctl status  # 确保你的gitlab启动了
      
    2. 如无法启动

    3. 确保服务器内存足够,可以用如下三个命令,清空buff内存缓存

      1. [root@DD-Server-9F ~]# echo 1 > /proc/sys/vm/drop_caches
        [root@DD-Server-9F ~]# echo 2 > /proc/sys/vm/drop_caches
        [root@DD-Server-9F ~]# echo 3 > /proc/sys/vm/drop_caches
        
  4. 访问方式

    1. 直接访问你linux服务器的ip即可

      1. 相关配置

      2. 通过浏览器访问页面服务器ip,默认开启了nginx的web端口,设置初始密码,操作类似github
        第一次访问会设置新密码 至少8个字符
        
        默认登录用户 root
        密码 ********
        即可看到 gitlab 
        
    2. 配置linux防火墙

      1. # 以下操作为关闭防火墙
        iptables -F #清空规则 
        systemctl stop firewalld 
        systemctl disable firewalld 
        # 临时关闭selinux,也是一个防火墙
        setenforce 0
        # 永久关闭selinux,修改/etc/selinux/config 
        
  5. 启动了gitlab之后,修改了账号密码

  6. 配置ssh公钥,发送给gitlab

  7. 下载私有的gitlab仓库

    1. git clone git@192.168.15.2:root/example.git
  8. 进入gitlab下载的代码中,此时就可以pull push代码了

参考

超哥带你学GIT

posted @ 2019-08-12 15:50  写bug的日子  阅读(128)  评论(0编辑  收藏  举报