Git那些事

作者: 木可大大 | 来源:发表于2018-02-20 09:47 被阅读49次
image

简介

Git是一个快速的、开源的、分布式的版本控制系统。 相较于SVN等集中式版本控制系统,Git是分布式,分布式的最大的好处是去中心化,每台客户机都有本地仓库,即使你在没有网络的情况下或者中心服务器发生宕机的情况下,也能够提交文件,创建分支等,而SVN等集中式版本控制系统在上述情况下就不能使用了。

基本功能

  • 备份文件

  • 版本管理

  • 协同工作

  • 冲突解决(由于存在协同工作,那么就可能存在冲突,即同一个时刻,可能存在多个人对同一份资源进行操作,那么就可能存在冲突)

  • 分支管理(类似于文件拷贝)

  • 里程碑管理(tag)
    …等等

Git安装

  • Windows系统
    可以通过cmder中的choco install git,也可以通过普通安装完成

  • Mac系统
    brew install git

  • Linux系统
    yum install git

  • 检查安装是否成功
    git --version

Git用户配置

Git有三个级别的配置文件,分别是:

  • 版本库级别的配置文件:工程目录下,使用git config -e打开编辑

  • 全局配置文件:用户主目录下,使用git config -e –global打开编辑

  • 系统级别配置文件:/etc目录下,使用git config -e –system打开编辑

下面介绍配置的一些命令

可以使用命令git config user.name获取用户名,通过命令git config user.email获取邮箱
使用命令 git config [–global] user.name kwy 设置用户名
使用命令git config [–global] user.email kewy126@126.com 设置邮箱

git基本操作

  • git初始化
  1. mkdir -pv project

  2. cd project

  3. git init

执行完git init生成一个隐藏目录.git,每一个本地库有且只有一个关于版本库相关信息的目录(.git,是一个隐藏目录),这也是Git和SVN等集中式版本控制目录的区别,git目录如下:

  1. $ ls -al

  2. total 24

  3. drwxr-xr-x 10 keweiyang staff320 1 18 21:34 .

  4. drwxr-xr-x 3 keweiyang staff 96 1 18 21:34 ..

  5. -rw-r--r-- 1 keweiyang staff 23 1 18 21:34 HEAD //表示git项目当前处于哪个分支

  6. drwxr-xr-x 2 keweiyang staff 64 1 18 21:34 branches

  7. -rw-r--r-- 1 keweiyang staff137 1 18 21:34 config //表示项目的配置信息

  8. -rw-r--r-- 1 keweiyang staff 73 1 18 21:34 description //表示项目的描述信息

  9. drwxr-xr-x 11 keweiyang staff352 1 18 21:34 hooks //表示系统默认钩子脚本目录

  10. drwxr-xr-x 3 keweiyang staff 96 1 18 21:34 info

  11. drwxr-xr-x 4 keweiyang staff128 1 18 21:34 objects //表示Git本地仓库的所有对象

  12. drwxr-xr-x 4 keweiyang staff128 1 18 21:34 refs //标识项目里的每个分支指向哪个提交(commit)

需要注意的是,当我们从github上clone一个项目时,如果这个项目包含很多不同版本的代码时,我们可以设置--depth=1拉取最新代码,避免由于代码过多导致拉取时间过长的问题。

  1. git clone -b master --depth=1//-b:表示branch,--depth=1:表示拉取最新的代码
  • 提交命令
  1. vim readme.txt

  2. git add . //将文件保存到暂存区

  3. git commit -m "新增readme文件" // 将文件保存到本地版本库

  4. git push origin //将文件保存到远程仓库

  • 分支命令
    Git分支地址由主机名/分支名确定,可以通过git remote命令查看,比如:origin master,其中,origin就是远程主机名称。
  1. git remote

  2. git remote -v

  • 切换分支
    Git因为有了本地仓库,因此我们才可以创建、合并、删除分支。
  1. git branch //查看当前属于哪个分支

  2. git branch hotfix //创建一个叫做hotfix的分支

  3. git checkout hotfix //切换到hotfix分支

  4. git status

notes

  1. 当在主分支中创建readme.txt,然后切换到hotfix分支中,这是没错误的,因此此时hotfix库为空的(库中并没有readme.txt),所以并不会和工作区中的readme.txt发生冲突

  2. 接着hotfix分支对readme.txt内容进行修改,并commit,然后checkout 到master分支,此时也不会出错

  3. 然后在master分支对readme.txt内容进行修改,但是没有进行commit(即使执行add命令),接着checkout到hotfix分支,此时会报错,因为,不同版本分支对应同一个工作区和暂存区,如果上一个版本都一个两个版本都有的内容进行修改,但是没有进行commit,然后,进行checkout操作,如果这个操作不报错的话,会导致上一个分支对内容修改的丢失

针对这个问题,有以下几种方法来解决:

  1. 把本地变更(commit),再切换分支

  2. 把本地变更储藏(stash)起来,再切换分支,切换前的状态可以在checkout回来之后执行stash apply恢复

  3. 丢失本地变更,使用-f参数强制checkout(不建议这么做)

  • 合并分支
    合并有两种方式:
  1. merge:把两个分支的最新快照和以及两者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交,如果没有冲突的话)

  2. rebase :提取目标分支引入的补丁和修改,然后在当前分支的基础上依次在应用一次

  • 远程分支
    如果你要本地所有分支(不包括tags分支)变更都推送到远程仓库,那么可以使用–all参数
    git push <remote> --all
    如果要推送tags分支
    git push <remote> --tags
    如果推送某一分支
    git push <remote> <branch>

  • 打上标签
    git tag -a v1.0.0

image image

相关文章

  • Git那些事

    简介 Git是一个快速的、开源的、分布式的版本控制系统。 相较于SVN等集中式版本控制系统,Git是分布式,分布式...

  • Git那些事

    Github从无知到运用 1.基本认识git、github Git是一个开源的分布式版本控制系统,用以有效、高速的...

  • git那些事

    git那点事 我以前只会 git 的clone、remote、pull、add、commit、push、merge...

  • 关于git那些事

    一、注册登录 点击这里在github上免费注册一个github账号 二、新建一个仓库 三、下载git 一般使用的是...

  • 程序猿的工具集锦

    Git 从零开始学Git【新手高效入门必备】 git入门,先学会这几个姿势 SVN SVN使用时应注意的那些事 M...

  • 关于Git的那些事

    基础概念 工作区:与.git文件夹同级的其他文件夹或者子文件夹 版本控制库暂缓区分支:git不像SVN那样有主干和...

  • Git 分支合并那些事

    1、查看远程分支 $gitbranch-a *br-2.1.2.2 master remotes/origin/H...

  • 聊聊git的那些事

    git是什么?一个高端大气上档次的分布式版本控制系统。相信小伙伴们对于git 并不陌生。对它当中文件的三种状态:已...

  • 关于Git的那些事

    Git的特点 最优的存储能力 非凡的性能 开源的 很容易做备份 支持离线操作 很容易定制工作流程 Git官网安装 ...

  • 开发中关于Git那些事(Git rebasing)

    我之前询问过一些人,讨论到Git这块,他们当中有的直接使用GUI,说简单省事。其实,每一个GUI都有它的侧重点,并...

网友评论

    本文标题:Git那些事

    本文链接:https://www.haomeiwen.com/subject/mttgtftx.html