zoukankan      html  css  js  c++  java
  • 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完毕,查看版本
    [root@fd 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 johndoe@example.com
    # 用这个命令就会在 ~/.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 johndoe@example.com

    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 "yc_uuu@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就是将本地文件(工作目录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文件夹中有什么呢

    [root@pyyuc ~/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 >>>幕布链接

      

  • 相关阅读:
    uva 165 Stamps
    uva 104 Bandwidth
    uva 812 Trade on Verweggistan
    Uva 1354 Mobile Computing
    uva_1422 Processor
    Codeforces Round #321 div2
    Codeforces Round #316 div2
    LightOj_1408 Batting Practice
    【共享单车】—— React后台管理系统开发手记:AntD Table高级表格
    【共享单车】—— React后台管理系统开发手记:AntD Table基础表格
  • 原文地址:https://www.cnblogs.com/zwq-/p/10720972.html
Copyright © 2011-2022 走看看