【版本控制】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
原文地址:https://www.cnblogs.com/78pikaqiu/p/7543906.html