Git

Posted zwq-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git相关的知识,希望对你有一定的参考价值。

一、介绍

版本控制: 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

git 就是一个分布式版本控制系统

分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。

既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在也不影响大家干活,只是用于交换文件内容。

二、安装与配置

Linux安装git:

三种安装方式--

1.yum安装
2.源代码编译安装
3.rpm包手动安装

这里用yum安装git:

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

2.一条命令安装git软件
 yum install git -y

3.安装git完毕,查看版本
[[email protected] yum.repos.d]#  git --version
git version 1.8.3.1

4.设置git的版本控制用户信息

git config --global user.name "John Doe"
git config --global user.email [email protected]
# 用这个命令就会在 ~/.gitconfig文件配置, 只对当前用户配置(一般用这个)

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

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

运行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 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

git config --global user.name "John Doe"
git config --global user.email [email protected]

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 "pyyu"  配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置

git config --global user.email "[email protected]"  配置当前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就是将本地文件(工作目录workspace)的文件,添加到暂存区(stage),然后提交到本地仓库(repository),最终可以协同开发,推送到远程仓库(remote)

工作目录(当前linux操作的目录)  >  暂存区   >  本地仓库 > 远程github

技术图片 

git操作一,建立git仓库

git版本库,也叫做git仓库(repository),也就是一个文件夹。

这个目录的所有内容被git软件管理,所有的修改,删除,git都会跟踪记录,便于可以跟踪历史记录,以后可以还原文件。

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

两种场景需求:

1.把已有的项目代码,纳入git管理

cd mysite    mysite项目所在代码
git init        初始化git仓库
git status 查看git状态,
查看git工作目录的文件,处于生命周期的哪一个状态 注意,只能在git工作目录中输入这个命令,他会去找.git文件夹
git init命令会创建一个.git隐藏子目录,这个目录包含初始化git仓库所有的核心文件。 此步仅仅是初始化,此时项目里的代码还没有被git跟踪,
因此还需要git add对项目文件跟踪,然后git commit提交到本地仓库

想知道.git文件做了什么事,请看git原理 >Git 内部原理 

2.新建一个项目,直接用git管理

cd 某个文件夹
git init mysite      此步会在当前路径创建mysite文件夹,mysite文件夹中包含了.git的初始化文件夹,所有配置

那么.git文件夹中有什么呢

技术图片
[[email protected] ~/git_learning/mysite 11:08:19]#tree .git
.git
├── branches
├── config    这个项目独有的配置
├── description
├── HEAD    head文件指示目前被检出的分支
├── hooks  hooks目录包含服务端和客户端的钩子脚本 hook scripts
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index  index文件保存暂存区的信息,只有git add之后才会生成,默认还没有这个文件
├── info    info目录是全局性排除文件,用于放置不想被记录在.gitignore文件中的忽略模式(ignored patterns)
│   └── exclude
├── objects  存储所有数据内容
│   ├── info
│   └── pack
└── refs  refs目录存储指向数据(分支)的提交对象的指针
    ├── heads
    └── tags

.git文件夹解析
.git文件夹解析

3.获取远程仓库代码

如果你想获取github上的代码,或者你公司gitlab私有仓库的代码,可以使用git clone命令,下载克隆远程仓库的代码。

git clone https://github.com/django/django.git

你会发现所有的项目文件都在这里,等待后续开发。

git操作二、记录更新到本地仓库

还记得git的四个区域吗?本地文件夹,暂存区,本地仓库,远程仓库吗?

本地文件夹未初始化,git是不认识的

本地文件git init后,就成了git仓库

请记住,在工作文件夹的每一个文件,只有两种状态,一个是未跟踪,一个是已跟踪

已跟踪指的是已经被纳入git版本管理的文件,在git快照中有他的记录

未跟踪是这个文件既不在git快照中,也不在暂存区

git init初始化时的工作文件夹,都属于已跟踪了,后续的编辑操作都会标记为,已修改文件,因此需要将修改后的文件,加入暂存区,然后提交暂存区的文件。

技术图片

 

3.git项目的第一次管理,初始化的流程演练

技术图片
        1.git init  对django代码初始化
    2.git status 查看git版本库的状态
    3.对django代码,进行跟踪,标记 ,然后提交本地工作区的代码,到暂存区
    git add . 
    4.提交暂存区的代码,到本地版本库
    git commit -m "写入你的提交备注信息"
        # -m 是标记注释的意思
    
    5.查看git提交日志
    git log 
    
    6.git的各种命令,就是对四个区域来回切换,并且只能在git工作区下去敲
    必须得在含有.git文件夹的目录,去敲命令,才可以
    
    7.在git版本库目录下,新创建的文件,都会被标记为  Untracked files,代表未跟踪的文件
    
    8.对新创建的文件,进行跟踪 
    git add .
    
    9.修改django的url.py,写入新功能,也是对文件进行修改标记    modified
    对修改过的代码文件,也必须git add 添加到暂存区
    
    git add .
    
    
    10.任何的对项目修改的操作,注意都要git status看一下
    
    
    11.查看git提交日志
    git log 
    
    12.git回退历史
    
    语法:    git reset --hard commit的id记录   --hard参数是强制性回退
    
    git reset --hard 954e6df1c0a2a71dd141850727d3eddd580518b3

    再次回到另一个提交版本信息,
    git reset --hard 2444fd8ed876eab2a95a697d039916510b356104
    
    13.git穿梭未来 
    git 回退,前进版本,其实就是是对git的文件指针,来回切换
    文件指针叫做head
    
    git reflog  #查看所有回退历史记录的命令
    
    14.撤回git修改的记录
    对已经跟踪的文件app01/views.py进行修改,此时标记为了modified:   app01/views.py
    如果你想提交本次修改动作
    git add .
    如果你发现代码修改错了,git可以很方便的撤回
    git checkout -- 文件名
    git checkout -- app01/views.py 
    
    
    15.理解git命令
    git init  初始化一个git版本库,会生成一个.git 文件夹,此时这个目录就是git仓库了!!!
    
    16.修改git工作区的文件,重命名,以及删除文件
    
    linux的命令如下
    rm     删除 
    mv  移动目录,或者重命名
    但是,你对git仓库中的代码,请使用git的命令
    git rm  删除git管理的代码
    git mv  对git管理的代码,改名
    
    17.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 "提交注释信息"

    18.git分支功能,每个人都有自己的分支,不直接影响本体代码,在自己的分支上,写完代码后,通过管理员吧分支的代码,合并到主干上即可
    git branch  #查看当前所在的分支
    git branch  wupeiqi  #创建吴佩琪分支
    git branch  alex  #创建艾利克斯分支
    
    git checkout wupeiqi  #切换到吴佩琪分支
    
    分支开发使用流程
        1.创建新的分支
            git branch wupeiqi 
        2.切换分支
            git checkout wupeiqi 
        3.在分支下,写自己的代码
            ........
        4.切换到主干分支上
            git checkout master 
        5.合并分支的代码,此时吴佩琪开发提交的代码,就被合并到master了
            git merge  wupeiqi 
        
    分支冲突怎么办?手动解决冲突的代码即可
    思路:master分支和wupeiqi分支,同时操作一个文件,对同一行代码进行写入
    
        1.用master主干分支,操作一个文件,并且提交commit
        git branch #当前是主干master
        模拟对一个文件的第二行写入代码
        2.master提交本次修改记录
        git add . 
        git commit -m "提交注释"
        
        
        3.切换分支,也对同一个文件,进行写入代码,且提交
        
        git checkout wupeiqi 
        模拟对同一个文件,写入同一行代码,肯定会和master冲突
        git add .
        git commit -m "分支提交的注释"
        
        4.回到master主分支,合并吴佩琪分支,然后手动解决
        git checkout master 
        
        git merge wupeiqi 
        如果出现了冲突,就手动编辑这个文件,删除git自动添加的冲突注释
        
        5.保存文件退出
        git add . 
        git commit -m  "master最终合并的注释"
        
        
        6.git分支的命令
            git branch 分支名linux     创建分支linux
            git checkout 分支名linux    切换分支到linux
            git branch    查看当前分支情况,在哪一个就有*符
            git check -- filename 一键还原文件,将git仓库的文件覆盖当前文件,危险命令
            git checkout -b name  创建+切换新的分支
    
生命周期演练

 

git >>>幕布链接

 

 

  

 

以上是关于Git的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

如何管理在每个 git 版本中添加私有代码片段?

使用 Git 来管理 Xcode 中的代码片段

markdown Git代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段