Git和Github使用指南

作者: 前端辉羽 | 来源:发表于2020-01-22 17:22 被阅读0次

    本文目录:

    • 1.版本管理
    • 2.分支
      1. 暂时保存更改
    • 4.Github
    • 5.Git和SVN两者之间的区别

    1.版本管理

    1.1什么是版本管理

    版本管理是一种记录文件变化的方式,以便将来查阅特定版本的文件内容

    人为维护文档版本的问题

    • 文档数量多且命名不清晰导致文档版本混乱
    • 每次编辑文档需要复制,不方便
    • 多人同时编辑同一个文档,容易产生覆盖

    1.2 Git是什么

    Git是一个版本管理控制系统,它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。

    1.3 安装Git

    去Git官网把git下载到电脑上,一路默认配置安装就可以,然后右键git bash here就可以打开属于git的命令行工具,学习git也就是学习git的命令行操作语句。
    第一个命令 git --version
    出现版本号则代表git安装成功。

    1.4 Git基本工作流程

    Git仓库 =>用于存放提交记录
    暂存区 =>临时存放被修改文件
    工作目录 =>被Git管理的项目目录

    git流程图.png

    操作流程:开发者每一次提交代码的时候都是从工作目录把修改的文件提交到暂存区,然后再把暂存区的文件提交到Git仓库

    1.5 Git的使用

    1.5.1使用前配置

    在使用Git前,需要告诉git你是谁,在向git仓库中提交时需要用到
    1.配置提交人姓名:git config --global user.name 提交人姓名
    2.配置提交人姓名:git config --global user.email 提交人邮箱
    2.查看git配置信息:git config --list
    3.删除全局配置
    git config --global --unset alias.xxx
    git config --global --unset user.xxx

    注意
    1.如果要对配置信息进行修改,重复上述命令即可。
    2.配置只需要执行一次。

    1.5.2 提交步骤

    1.git init 初始化git仓库
    进入想要纳入git管理的项目文件夹,然后执行git init,这代表要在这个项目文件夹下新建一个空的git仓库,初始化会在对应的项目文件夹下生成一个.git文件夹
    2.git status 查看文件状态
    git只能查看到项目文件夹下未被管理的文件(Untracked files)
    3.git add 文件列表 追踪文件
    第三步也就是将文件添加到暂存区,提交了之后再次查看git status,会有new file的文件状态显示,这代表该文件目前存放在在暂存区
    4.git commit -m 提交信息 向仓库中提交代码
    5.git log查看提交记录
    git log可以查看每一次commit的具体信息,重点是有一长串字符,是该次提交的id

    1.5.3 撤销

    • 将暂存区的文件覆盖工作目录中的文件:git checkout 文件
    • 将文件从暂存区中删除:git rm --cached 文件
    • 将git仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录:git rest --hard commitID
      当恢复到以前的提交记录时,在被恢复的那次提交记录之后的提交记录都会被清除。

    2.分支

    为了便于理解,可以认为分支就是当前工作目录中代码的一份副本。
    使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。
    有了分支之后,我们可以在不同的分支上去做不同的事情,比如在一个分支上开发新功能,在另一个分支修复bug
    分支细分
    1.主分支(master):第一次向git仓库中提交更新记录时自动产生的一个分支。
    2.开发分支(develop):作为开发的分支,基于master分支创建
    3.功能分支(feature):作为开发具体功能的分支,基于开发分支创建

    分支命令

    • git branch 查看分支
    • git branch 分支名称 创建分支
    • git checkout 分支名称 切换分支
      在切换之前当前分支的工作状态和暂存区需要保持干净的状态
    • git merge 来源分支 合并分支
      注意:经过这个命令,被合并的分支依然存在
    • git branch -d 分支名称 删除分支(分支被合并后才允许删除 -D强制删除)

    3. 暂时保存更改

    在git中,可以暂时提取分支上所有的变动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。

    使用场景:分支临时切换

    • 存储临时变动:git stash
    • 恢复改动:git stash pop
      注意:这个临时存储是独立于分支的,也就是说在其它任何的分支执行恢复改动命令,都会把临时存储的改动覆盖到当前分支上。

    4.Github

    在版本控制系统中,大约90%的操作都是在本地仓库中进行的:暂存,提交,查看状态或者历史记录等等。如果仅仅只有你一个人在这个项目里工作,那么完全不需要设置远程仓库。
    只有当你需要和你的开发团队共享数据时,设置一个远程仓库才有意义,你可以把它想象成一个“文件管理服务器”,利用这个服务器可以与开发团队的其它成员进行数据交换。

    注册
    1.访问github首页,点击Sign up连接。(注册)

    4.1.多人协作开发流程

    • A在自己的计算中创建本地仓库

    • A在github中创建远程仓库
      在github点击“Start a project”进入创建新的远程仓库的页面

    • A将本地仓库推送到远程仓库
      github的仓库首页,就会有对应的仓库地址(HTTPS)
      用HTTPS地址方式进行远程操作需要输入github账号密码进行登录验证,win10系统会在初次输入的时候记录登录信息,所以初次以后的远程仓库操作都是默认使用第一次登录时的github账号,如果要更改所使用的github账号,则需要在系统的控制面板的凭据管理器中进行删除github账号操作。
      ①git push 远程仓库地址 分支名称
      ②git push 远程仓库地址别名 分支名称
      ③git push -u 远程仓库地址别名 分支名称
      -u记住推送地址及分支,下次推送只需要输入git push即可
      ④git remote add 远程仓库地址别名 远程仓库地址
      这个方法是给远程仓库起别名

    • B克隆远程仓库到本地进行开发
      git clone 仓库地址

    • B将本地仓库中开发的内容推送到远程仓库
      远程仓库的创建者A必须要赋予B权限,B才能推送代码到远程仓库
      在github远程仓库中的settings中的collaborators(合作者)界面,可以添加B的账号(添加之后生成邀请链接,B同意后就成为该项目的合作者了)

    • A将远程仓库的最新内容拉到本地
      l拉取远程仓库中最新的版本git pull 远程仓库地址 分支名称

    4.2.解决冲突

    在多人同时开发一个项目,如果两个人修改了同一个文件的同一个地方,就会发生冲突,冲突需要人为解决。
    模拟场景:程序员A修改了项目代码,并将最新版本推送到了远程仓库,这时候程序员B也在自己的本地仓库修改了项目代码,想把本地代码也推送到远程仓库,因为这时候远程仓库的版本是高于程序员B的本地仓库的,所以B需要先pull,才能push,而pull的时候发生了代码冲突(因为A和B修改了项目的同一个文件的同一个地方)
    解决方法:当Bpull的时候,git命令行工具会提示conflict,此时B发生冲突的项目文件的代码中会多出来以下代码

    <<<<<<< HEAD 
    ============
    >>>>>>>xxxxxx
    

    这代表着发生代码冲突的区域,我们将这三行多出来的代码删掉,然后对发生冲突的地方进行处理,处理之后将该文件重新commit到暂存区,然后push到远程仓库。

    4.3.跨团队协作

    • 程序员Cfork仓库
    • 程序员C将仓库克隆到本地进行修改
    • 程序员C将仓库推送到远程
    • 程序员C发起pull request
    • 原仓库作者审核
    • 原仓库作者合并代码

    流程详解:
    当程序员C发现了程序员A的一个项目代码比较好的时候,可以先fork一下,fork的意思是将这个远程仓库复制一份到自己的远程仓库中,这个时候C就可以clone自己的远程仓库中的代码到自己本地,然后在本地对代码进行修改,改完之后把最新的代码推送到自己的这个远程仓库中。
    下一步就是向该项目的原作者A的远程仓库发出修改代码的请求。
    点击“Pull requests”界面中的“New pull request”按钮,然后点击“Create pull request”创建请求,在创建请求的页面中就可以添加自己要发送给原作者的请求主题以及内容等信息,写完后就可以点击“Create pull request”进行发送。
    原作者A的远程仓库中就会收到这样一个请求(Pull request),在Pull request界面,可以和程序员C进行远程对话,同时在Files changed界面可以看到程序员C提交的代码变化,确定无误后,可以点击“Merge pull request”=>"Commit merge"同意程序员C提交的代码合并到自己的仓库中。

    4.4.SSH协议

    向远程仓库提交代码可以分为两种方式,一种是根据远程仓库的https地址,这种方法的局限性是需要输入账号密码进行身份验证。另外一种是ssh免登陆。
    在ssh协议中是通过密钥形式进行验证的,密钥分为公钥和私钥,公钥和私钥是否匹配决定了验证是否通过。把公钥存放在github账户中,私钥存放在开发者的电脑中(公钥也是开发者在自己的电脑上生成的)。
    如果生成密钥?
    生成密钥ssh-keygen
    密钥存储目录:C:\Users\用户.ssh
    公钥名称:id_rsa.pub
    私钥名称:id_rsa

    把公钥复制一下,添加到github账户中“SSH and GPG keys”中的SSH keys中就可以了

    这样在远程仓库“Clone or download”中选择“use SSH”就可以看到改远程仓库的ssh地址
    接下来push代码就可以使用ssh地址代替HTTPS地址进行免登录操作了(SSH也可以使用remote的方法起别名)。

    4.5.git忽略清单

    将不需要git管理的文件名字添加到此文件中,在执行git命令的时候,git就会忽略这些文件。
    git忽略清单文件名称: .gitignore
    将工作目录中的文件全部添加到暂存区:git add .

    4.6.readme.md

    这个文件会默认显示在远程仓库的文件列表下方,一般会写一些项目的使用说明。

    5.Git和SVN两者之间的区别

    5.1.GIT是分布式的,SVN是集中式的

    这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
    GIT跟SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然能够提 交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。
    同样,这种分布式的操作模式对于开源软件社区的开发来说也是个巨大的恩赐,你不必再像以前那样做出补丁包,通过email方式发送出去,你只需要创建一个分支,向项目团队发送一个推请求。这能让你的代码保持最新,而且不会在传输过程中丢失。GitHub.com就是一个这样的优秀案例。

    5.2.GIT分支和SVN的分支不同

    如果查看一个项目的源码库,用git branch -r命令,你会发现有几十个甚至近百个分支,如果你只用svn的话,你一定完全无法想象。但这就是git分支的优势,因为git是基于差异来管理分支的,其分支的代价极小,同时因为GIT的分布式特点,所以其切换分支也极为方便和快捷。SVN适合管理没有大量分支并行开发、合并的需求的项目。

    5.3.GIT没有一个全局的版本号,而SVN有

    这方面是SVN的优势,但是git每次提交产生的40位(160bit)哈希值,是完全可以等同于svn全局id的作用的,之所以说这方面GIT不如SVN,只是因为不好记而已。

    5.4.GIT的内容完整性要优于SVN

    GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

    5.5各自的优缺点

    1.SVN优缺点
    优点:
    1、 管理方便,逻辑明确,符合一般人思维习惯。
    2、 易于管理,集中式服务器更能保证安全性,管理员集中管理,开发人员commit、update即可,操作简单。
    3、 代码一致性非常高。
    4、 适合开发人数不多的项目开发。
    缺点:
    1、 服务器压力太大,数据库容量暴增。
    2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
    3、 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
    2.Git优缺点
    优点:
    1、适合分布式开发,强调个体。
    2、公共服务器压力和数据量都不会太大。
    3、速度快、灵活。
    4、任意两个开发者之间可以很容易的解决冲突。
    5、离线工作。
    缺点:
    1、学习周期相对而言比较长。
    2、不符合常规思维。
    3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

    相关文章

      网友评论

        本文标题:Git和Github使用指南

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