zoukankan      html  css  js  c++  java
  • Git使用

    内容:

    1.Git介绍与安装与原理

    2.Git基本操作

    3.分支管理

    4.远程仓库

    5.多人协作

    6.github使用 - 开源项目

    参考: 

    http://www.cnblogs.com/alex3714/articles/5930846.html

    https://www.cnblogs.com/wupeiqi/p/7295372.html

    注:本节主要以git命令操作为主

    1.Git介绍与安装

    (1)关于Git

    git是一个用于帮助用户实现版本控制的软件
    git的作用: 版本控制

    (2)Git安装

    最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行

    Linux上安装:

    1 sudo apt-get install git

    Windows or Mac:

    下载安装包自己安装:https://git-scm.com/downloads

    后面的例子以Windows系统为例,Windows系统成功安装Git后,右键点击文件夹或桌面选项中将会出现两个Git开头的选项。选择Git Bash Here,打开的窗口就是写Git命令的地方,如下所示:

    (3)Git原理

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

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

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

    上述图片中常用命令:

    • git init,初始化,表示即将对当前文件夹进行版本控制。
    • git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
    • git add 文件名,将指定文件添加到版本库的暂存状态。
    • git commit -m '提交信息',将暂存区的文件提交到版本库的分支。
    • git log,查看提交记录,即:历史版本记录

    2.Git基本操作

    (1)创建仓库 -> git init

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”

    所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录,建了空目录然后在此目录下执行git init 目录即可创建仓库:

    如上所示瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository)

    (2)添加文件 -> git add

    在文件夹中新建一个文件后通过git add 添加到仓库中:

    注:git add . -> 一次性添加所有文件 

    (3)提交代码 -> git commit

    接着使用git commit命令将文件提交到仓库中:

    (4)代码修改并提交 -> git add 和 git commit

    修改文件中的内容,运行git status命令查看如下:

    虽然Git告诉我们test.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。查看具体修改内容可以使用git diff命令:

    输出中+号绿色显示的就是修改或新增的内容,-号红色显示的就是去掉或被修改的内容

    知道了对源文件作了什么修改后,再把它提交到仓库就放心多了,再次提交到仓库先使用git add再使用git commit:

    (5)代码回滚 -> git log 和 git reflog 和 git reset

    在实际工作中Git仓库中的历史记录,可以用git log命令查看:

    git log命令依次显示从最近到最远的提交日志,上面那一大串数字和字符的混合体是版本号,是一个SHA1计算出来的一个非常大的数字,用十六进制表示

    接下来我们要开始回滚要把第二次提交回滚到第一次提交,使用git reset命令,后面带上--hard参数以及要回退到的版本号:

    回滚倒是完成了,如果想要在回到第二次提交的版本怎么办呢?不能像以往通过【git log】来查看记录再回滚了,再回去需要这么搞:

    (6)撤销修改 -> git checkout 和 git reset 

    人都是犯错的,有时候在文件中可能写错了一些东西需要我们去撤销修改,Git中撤销修改的命令是git checkout -- file(当然没添加的时候一般都是手动撤销修改)

    git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令  

    加入你git add文件到了暂存区,庆幸的是,在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交

    此时可以用命令git reset HEAD file把暂存区的修改撤销掉,重新放回工作区:

    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

    (7)删除操作 -> git rm 和 git checkout

    在Git中,删除也是一个修改操作,假如在文件夹中删除了一个文件,这个时候,Git知道你删除了文件

    因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除:

    此时有两种选择:

    • 从版本库中删除该文件,那就用命令git rm删掉,并且git commit提交删除
    • 删错了,但版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本

    第一种选择(删除版本库中的):

    第二种选择(撤销工作区中的删除):

    git checkout本质上是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

    3.分支管理

    (1)什么是分支

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

    (2)分支操作

    branch相关常用命令:

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

    注:git merge 时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交,此处不再敖述

    实例: 

    依然使用上述的库,新建一个文件test.txt(在前面删除了):

     

    新建dev分支并切换到dev分支:

    在dev分支上修改文本内容修改完后提交到dev分支上然后切换到主分支上:

    切换到主分支后查看文件内容:

    接着在把dev分支合并到主分支上:

    主分支上的文件内容:

    (3)补充 - stash

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

    stash相关常用命令:

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

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

    4.远程仓库

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

    (1)自行注册github,并进行相关设置

    由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

    第1步:创建SSH Key

    在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步

    如果没有,随便哪个位置打开Shell(Windows下打开Git Bash),创建SSH Key:

    1
    ssh-keygen -t rsa -C "youremail@example.com"

    把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码

    一切顺利的话可在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人

    第2步:登陆GitHub 添加ssh key

    打开“Account settings”,“SSH Keys”页面

    然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

    点“Add Key”,然后就可以添加成功了

    (2)完成上述操作后,点击new repository创建新仓库

     

    (3)在上面点击create repository之后显示如下

    详细解释如下:

    (4)把本地文件提交到github网站上的仓库

    push完了之后就可以去github上查看,当然也可以从github中的仓库上把某个分支pull下来继续开发,使用git pull origin 分支名 

    注:push和pull之前必须配置了ssh否则不能使用!

    (5)克隆远程仓库

    使用git clone命令可以克隆远程仓库(随便克隆),也就是下载远程仓库中的代码,步骤如下:

    先随便进入一个仓库然后点击右上角的clone or download,然后复制链接

    复制链接之后,使用git clone 链接 即可克隆该仓库

    上述内容可整理成如下一张图:

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

    另外,git rebase可以保持提交记录的整洁

    5.多人协作

     1 (1)允许他人操作程序
     2     - 合作者(在github上允许别人)
     3     - 在github上创建组织
     4 
     5 (2)分支 
     6     - master
     7     - dev 
     8     - xdb
     9     - zhh
    10 
    11 (3)规则
    12     - 一起合并
    13     - 合并时间:1/2
    14 
    15 大概总结:个人在自己的分支上开发,功能开发完了把github上的dev拉下来然后把自己的分支合并到dev分支上,测试没问题合并到master分支上
    16 合并的时候一起合并,小功能完结之后就合并(大概一两天)
    17 
    18 
    19 问题:
    20     $ git push origin dev
    21     To https://github.com/WuPeiqi/dbhot.git
    22      ! [rejected]        dev -> dev (fetch first)
    23     error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git'
    24     hint: Updates were rejected because the remote contains work that you do
    25     hint: not have locally. This is usually caused by another repository pushing
    26     hint: to the same ref. You may want to first integrate the remote changes
    27     hint: (e.g., 'git pull ...') before pushing again.
    28     hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    29 
    30 (4)做代码review
    31     如何做代码review?
    32         - 创建review分支(在上面的合并到dev之前进行)
    33     谁来锁代码review?
    34         - 组长
    35         - 带你的人    

    6.github使用 - 开源项目

    (1)关于开源项目

    我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的

    其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目

    但是在GitHub上,利用Git极其强大的克隆和分支功能,我们可以自由的参加各种开源项目

    (2)如何参与开源项目

    访问项目主页点fork克隆项目仓库(一定要从自己的账号下clone仓库,这样你才能推送修改)

    如果你想修复项目的一个bug,或者新增一个功能,立刻就可以开始干,干完后,往自己的仓库推送

    如果你希望别人能接受你的修改,你就可以在GitHub上发起一个pull request(对方是否接受你的pull request就不一定了。)

    小结

    • 在GitHub上,可以任意Fork开源仓库

    • 自己拥有Fork后的仓库的读写权限

    • 可以推送pull request给官方仓库来贡献代码(别人可以同意也可以不同意)

  • 相关阅读:
    等额本息计算公式推导
    使用Charles抓取APP之HTTPS请求
    服务端如何安全获取客户端请求IP地址
    HTTPS到底是个什么鬼?
    了解数字证书、数字签名与常见的加密算法
    centos下如何使用sendmail发送邮件
    Android Studio快捷键——编辑篇
    Universal-Image-Loader源码分析(二)——载入图片的过程分析
    Universal-Image-Loader源码分析(一)——ImageLoaderConfiguration分析
    Volley源码分析(五)Volley源码总结篇
  • 原文地址:https://www.cnblogs.com/wyb666/p/9462613.html
Copyright © 2011-2022 走看看