zoukankan      html  css  js  c++  java
  • 【版本控制】GIT

    一、什么是GIT

      Git是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。Git最初是由Linus Torvalds 设计开发的,用于管理Linux内核开发。Git是根据GUN通用公共许可证版本2的条款分发的自由/免费软件,安装详见:http://git-scm.com

      GitHub是一个基于Git的远程文件托管平台。

      Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:

    • 无GitHub:在本地 .git 文件夹内维护历时文件
    • 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

    二、Git的使用

    • 进入程序目录
    • git init  git初始化

      初始化后,会在当前目录自动创建 .git 文件夹,该文件是Git中最重要的文件夹,因为Git相关文件以及版本都将保存在该文件夹中。

    • git add .  添加当前目录下所有文件到版本库
    • git commit -m '描述信息'        提交到版本库,并填写版本说明,方便以后回滚

      需要注意的是,执行git commit 命令时,可能会提示用户进行用户名和邮箱的配置,该配置用于记录当前版本由哪个用户提交

    • git config --local user.name 'Amos'
    • git config --local user.email 'you@example.com'

    Git把管理的文件分为了两个区域四个状态

      工作区:当前开发程序所在的目录,工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用【git status】命令查看。

      版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行【git add .】将所有文件提交到暂存区,然后再执行【git commit -m '第二个版本'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录。

    • git init         初始化
    •  git add .      当前目录中所有文件添加到【某个地方】
    •  git add *     当前目录中修改过的文件的添加到暂存区
    • git add 文件名  将指定文件添加到版本库的暂存状态。
    •  git commit -m '描述信息'     第一版本git已经生成
    •  git log          查看版本信息
    •  git status     查看git当前状态

    Git版本回滚

      回滚完成之后,要通过【git reflog】查看版本记录,之后用get reset回滚

      1.stash方法

      在开发过程中线上的版本出了问题,而我们需要紧急处理一下,就暂时需要保存手中的代码,回滚到之前没有修改过的状态,这个时候,就用得用stash了

      stash用于将工作区发生变化的所有文件获取临时存储在某个地方,将工作区还原当前版本未操作前的状态;

      之后stash还可以将临时存储在某个地方的文件再次拿回到工作区。

      需要注意的是:执行git stash pop 命令时,可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行git stash pop 的时候就会出现冲突,这个时候不要着急,手动解决冲突即可。

      冲突后git会提示错误信息:

      CONFLICT(content):Merge conflict in templates/index.html(合并时在某个文件出现冲突)

    stash相关常用命令:

    • git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    • git stash list        查看“某个地方”存储的所有记录
    • git stash clear     清空“某个地方”
    • git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    • git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
    • git stash drop      编号,删除指定编号的记录

     当然,我们遇到需要紧急修改bug的时候不止一种方法,那么下面我们就来介绍第二种方法,运用分支来进行高效率开发

    方案二:branch

      branch称为分支,默认仅有一个名为master的分支,一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。

    1. git branch dev        #创建新分支,即:拷贝一份当前所在分支代码到新分支
    2. git checkout dev  #切换到dev分支开发功能
    3. git add .        #将修改文件添加到版本库的暂存区
    4. git commit -m '新功能开发完毕'        #将暂晨曲的内容提交到当前所在分支,即:dev分支
    5. git checkout master        #切换回master分支
    6. git merge dev        #将dev分支内容合并到master分支

      如果遇到开发到一半需要临时修复线上版本bug的情况,可以按照下图的流程进行:

    1. git checkout master  #切换回master分支
    2. git branch bug        #创建bug分支
    3. git checkout bug        #切换到bug分支
    4. 修改bug
    5. git add .       #提交bug
    6. git commit -m '紧急修复bug完成'        #提交bug
    7. git checkout master  #切换回master
    8. git merge bug  #将bug分支内容合并到master分支,表示bug修复完毕,可以上线
    9. git checkout dev  #切换到dev分支,继续开发新功能,完成之后切换到master进行合并

      注意:git merge 时也可能会出现冲突,这个时候找到冲突文件慢慢修改就好

    branch相关常用命令:

    • git branch 分支名称  #创建分支
    • git checkout 分支名称        #切换分支
    • git branch -m 分支名称        #创建并切换到指定分支
    • git branch        #查看所有分支
    • git branch -d 分支名称        #删除分支
    • git merge 分支名称        #将指定分支合并到当前分支

    三、GitHub的使用

      GitHub,一个基于Git实现的代码托管的平台,可以将内容以及版本记录在远程也保存一份,这样就不用拿着U盘来回拷贝了,PS:类似GitHub的产品还有很多,如:GitLab、Bitbucket、码云等。

      基于GitHub实现代码托管,需要以下步骤:

    • 注册GitHub
    • 创建仓库,创建完仓库后会有一个URL代指该仓库,如:

    • git可以使用该URL进行向远程推送版本信息或获取版本信息

    学会使用github之后就有了这样的操作

      长此以往,将Git和GitHub结合使用,做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行【git pull origin 分支】命令等同于【git fetch origin 分支】+【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码由重合部分,那么就需要自己手动解决冲突然后再继续开发。

    四、协同开发

    • 合作者,将其他用户添加到仓库合作者中之后,该用户就可以向当前仓库提交代码。

      

    •  组织,创建一个组织,然后在该组织下可以创建多个项目,组内成员可以向组内所有项目提交。PS:也可以对某个项目指定合作者

      协同开发命令和以上步骤类似,此处就不再重新写代码,而是使用文件描述三人协同开发整个过程。

    • 创建程序
      • 用户A创建程序,提交到GitHub
      • 用户B克隆项目
      • 用户C克隆项目
    • 开发功能
      • 用户A开发功能1
      • 用户B开发功能2
      • 用户C开发功能3
    • 提交
      • 用户A提交功能1,并push(A用户手速快,先提交。)
      • 用户B提交功能2,无法push,因为GitHub上已经有其他人提交的新代码。
        解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能2。
      • 用户C提交功能3,无法push,无法提交,因为GitHub上已经有其他人提交的新代码。
        解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能3。
    • 获取最新代码
      • 用户A获取最新代码
      • 用户B获取最新代码
      • 用户C获取最新代码

      在上面红色标注的解决方法位置可以有三种方式操作,三者都可以完成合并并提交新功能,但是日志记录会有差异,如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁。

      • 先 git pull origin master   然后 git push origin master
      • 先 git fetch origin master 然后 git merge origin/master   再 git push origin master
      • 先 git fetch origin master 然后 git rebase origin/master  再 git push origin master

     提交bug:

      我们每天逛github的时候,看到别人有好的项目可以拿下来学习,但是也要有相应的贡献,如果发现了bug我们要提交上去,但是别人不可能给你搞成合作者什么的,那么怎么才能给别人贡献代码呢?那就是fork了、

    • 找到想搞的项目,fork一下,然后这个项目就在自己的仓库出现了
    • 从自己仓库获取代码并进行编辑提交
    • 创建并提交一个pull request,然后等待原作者是否同意这个pull request,如果同意,那么在作者的源代码中就会出现你提交的功能

     其他补充:

      1.配置文件

      Git 的配置文件有三个:

    • 系统配置:/private/etc/gitconfig
    • 用户配置:~/.gitconfig
    • 项目配置:.git/config

      2.配置忽略某些文件的修改,

      创建 .gitignore 文件,在里面写一些文件

    以斜杠“/”开头表示目录;
    
      以星号“*”通配多个字符;
    
      以问号“?”通配单个字符
    
      以方括号“[]”包含单个字符的匹配列表;
    
      以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
    =========================================
    示例:
    
        a.*     --表示以a命名的所有文件
        [abc]     --表示,abc中的一个
        test/[abc].py     --test目录下的a|b|c.py文件
    
        test/*
        !test/a.py     --test下除a.py以外的所有文件全部忽略,
    
        .idea/*
        *.pyc
        *.excel
    
        PS:git命令只能在     .git路径
    View Code
  • 相关阅读:
    user.table.column, table.column 或列说明无效
    spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务
    easyui-treegrid移除树节点出错
    jquery easyui easyui-treegrid 使用异步加载数据
    Java动态调用webService,axis2动态调用webService
    让IE支持Css3属性(圆角、阴影、渐变)
    float浮动之后高度自适应失效解决方案
    td中使用overflow:hidden; 无效解决方案
    jquery插件select2事件不起作用(select2-3.5.4)
    wsdl自动生成Java代码,根据wsdl生成Java代码
  • 原文地址:https://www.cnblogs.com/78pikaqiu/p/7543906.html
Copyright © 2011-2022 走看看