• 版本控制工具(下)——Git的远程仓库、分支管理与其它操作


    预备知识:

      SSH协议参考资料http://blog.csdn.net/vevenlcf/article/details/43273405

      图解公钥和私钥:http://blog.csdn.net/linuxnews/article/details/51119862

      百度百科https://baike.baidu.com/item/ssh/10407?fr=aladdin

      基于密钥的安全验证,就是提供一对密钥,把公钥放在需要访问的服务器上,如果连接到SSH服务器上,客户端就会向服务器发出请求,
    请求用密钥进行安全验证,服务器收到请求之后,先在该服务器的主目录下寻找公钥,然后把它和发送过来的公钥进行比较。如果两个密钥一致,
    服务器就用公钥加密“质询”并把它发送给客户端。客户端收到“质询”之后就可以用私钥解密再把它发给服务器端。基于这种方式,相对比较安全。

    一、远程仓库

      在上一节已经学习了基本配置,接下来开始学习与SVN最大的不同点之一——远程仓库

       配置SSH Key

       为了学习这个,我们先创建一下SSH Key

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

      一路回车,使用默认完成配置:

      

      之后,就可以看到公钥(.pub)和私钥了:

      

        在Github上配置SSH Key——允许配置多个!

      打开下图中对应的位置,输入公钥内容即可:

      

        添加远程库

      首先在github上创建一个仓库(只要输入必填的仓库名和可选的描述即可)

      

        github会给一些建议与提示等:

      

      我们根据上面的提示也可以看到将本地仓库与远程仓库关联的步骤:

      在本地仓库中运行命令关联远程仓库

    git remote add origin git@github.com:jiangbei01/myGit.git

     // 请注意用户名和仓库名,不使用github给出的https的协议原因之一是速度慢!

       将本地分支内容推送到远程仓库

    git push -u origin master

      // 然后每次都可以通过push命令同步仓库了,完美!

      从远程仓库克隆

      先在github上创建一个仓库:

      

      之后,在本地运行clone命令即可克隆仓库了!

    git clone git@github.com:jiangbei01/myCloneGit.git

     二、分支管理

      分支概念:

        分支概念部分请参见:何谓分支

         廖雪峰老师的概念讲解参见:分支管理

      分支管理:

        创建并切换到dev分支:

    git checkout -b dev

        上面的-b参数表示创建并切换,他们相当于下面的两条分开的创建与合并:

     git branch dev
     git checkout dev

        示例:

        

        查看当前分支:

    git branch

        示例:

      

      

      接下来我们在dev分支上开发,修改readme.txt的内容:

      

      正常提交(还记得怎么提交吗):

       

      再切换回主分支:

    git checkout master

      

      再次查看时发现主分支上readme.txt的内容并未添加,因为我们是在master分支上,这点可以在概念里看到具体解释

      接下来进行分支合并:git merge用于合并指定分支

    git merge dev

      

      此时,分支开发的添加内容又回来了,这里上面红框的“快进”式的添加方式后面将会补充

      分支合并完成确认后就可以删除分支了:删除现有分支之前,请切换到其他分支。

    git branch -d dev

      

       冲突解决

      创建并切换到新分支

     git checkout -b feature1

      

      修改readme.txt的最后一行(请注意ctrl+S保存):

      

      在当前分支提交:

      

      切换到master分支

    git checkout master

      

      再修改readme.txt文件

      

       同样的,提交当前分支:

       

      经历以上操作后,master和feature1分支各自都有自己的提交的分支,我们尝试进行合并

    git merge feature1

      由于修改的是同一处的内容,git无法进行快速合并,并且产生了合并的冲突!

      

      使用git status可以看到具体的冲突文件:

      

      我们打开readme.txt文件可以看到变成了冲突的版本:

      

      很明显,HEAD到=======之间是当前所在分支的版本,======到feature1之间的为对应feature1分支的版本

      当然,使用git diff也可以查看到冲突细节:

      

      我们手动处理一下冲突,处理后的结果如下:

      

      保存确认后,进行提交:

      

      可以查看当前的分支图:

    git log --graph
    git log --graph --pretty=oneline --abbrev-commit

      

      正常处理冲突正确合并后,删除分支:

    git branch -d feature1

       bug分支——现场保存

      相关情景与概念介绍请参见廖雪峰老师的:Bug分支

      修改了内容但不想提交,需要先切换到其它分支修复bug,先看下当前状态

      

      使用git stash(贮藏)

    git stash

      

      之后就可以切换分支,修复bug,修复完成后合并分支,删除临时分支,然后再回到贮藏时候所在的分支来

      回来后使用git stash list查看工作现场:

    git stash list

      

      恢复现场有两种方式:

    git stash apply stash@{0}
        恢复但不删除stash@{0},可以使用git stash drop进行删除
    git stash pop
        恢复并删除stash的贮藏信息

      

      feature分支

      想要删除一个未合并的分支,使用-D参数强行删除:

    git branch -D <name>

     三、标签管理

      Git的版本号都是一串无意义的非常大的数字,有时候难以记忆,这时就可以给特定的版本打上tag标签,进行快读定位某版本了!

      创建标签

      切换到需要的打标签的分支,使用git tag <name>进行打标签操作

    git tag v1.0

      这样默认给当前分支最新的提交打了标签,并且使用git tag可以查看所有标签(和查看分支一样)

      

      使用

    git log --pretty=oneline --abbrev-commit

      查看版本提交信息,通过commit id进行特定版本打标签

      

      使用

    git show <tagName>

      查看标签信息

      

      标签操作

      和分支操作类似的删除操作

    git tag -d v0.1

      

      推送特定分支或者全部分支到远程仓库

    git push origin v1.0
    git push origin --tags

      删除远程仓库标签

    git tag -d v0.9 先删除本地
    git push origin :refs/tags/v0.9 再删除远程
  • 相关阅读:
    充满了艰难的造题之幼儿园测试【历史考试】
    【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
    windows下nginx的安装使用及解决80端口被占用nginx不能启动的问题
    使用hMailServer搭建免费邮件服务器(亲测可用)
    $.ajax()方法详解
    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
    $.ajax()调用.cs里的方法实现ajax操作示例
    Asp.Net URL重写的具体实现(通过URLRewriter.dll)
    数据图
    C#解析JSON字符串总结
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7712064.html
Copyright © 2020-2023  润新知