• github的版本控制master和branch develop


    一.git版本控制原理

    master(主分支), develop(分支),虽然是主分支和分支,却是平级关系,develop可以理解为开发库,master为生产库。

    本地版本:master, develop GitHub上: master, develop

    1.gitHub上master版本拉取代码到本地master。 2.本地创建develop(分支),在分支里开发。 3.修改本地开发代码后提交,提交到本地master(主分支)。 4.本地代码提交到GitHub上的Develop分支。 5.要出新版本或测试没什么问题后才提交到GitHub的master(主分支)。

    注意:多人开发的情况下,都提交代码到gitHub的develop(分支),从gitHub的develop(分支)拉去代码到本地的develop(分支),再进行开发和代码合并,所有都没问题的时候才合并的gitHub的master(主分支),生成版本。

    以上都是个人理解,如有异议,欢迎讨论学习 邮箱:jiang_yongchang@126.com

    二.gitHub上创建项目

    Screen Shot 2016-06-20 at 5.04.38 PM.png

    获取到项目地址:

     

    三.上传本地代码到GitHub

    提供两种方法: 1.方法一: 在Mac的终端上cd到上传代码的.git目录(要上传的代码必须有.git隐藏文件,Xcode创建工程的时候勾选的,默认就创建)

    Screen Shot 2016-06-20 at 5.38.44 PM.png

    上传代码如下:

    1.  
      git init
    2.  
      git add . // add后 空格 加 点
    3.  
      git commit -m "first commit"
    4.  
      git remote add origin https://github.com/jiangyongchang126/hah.git
    5.  
      git push -u origin master

    2.方法二:(推荐使用方法,下面也是按照这个方法)

    ①.在终端上cd到要存放的本地代码目录,
    例如:cd /Users/jiangyongchang/work


    Screen Shot 2016-06-20 at 5.46.56 PM.png

    ②. 克隆GitHub的代码到本地

    git clone https://github.com/jiangyongchang126/MD5_RSA_AES_BASE64.git

    Screen Shot 2016-06-20 at 5.51.59 PM.png

    现在在本地的/Users/jiangyongchang/work下已经有了MD5_RSA_AES_BASE64目录,打开目录看到:


    Screen Shot 2016-06-20 at 5.55.04 PM.png

    README.md就是项目简介,GitHub上创建了才有
    .gitignore 是上传git的忽略文件,比如cocopods导入的类库不上传等...
    .git文件是链接本地和GitHub的桥梁,不能覆盖(下面会用到)

    把要上传的代码copy到MD5_RSA_AES_BASE64下,.git 文件不用拷贝,.DS_Store文件也不能capy


    Screen Shot 2016-06-20 at 6.06.29 PM.png


    ③.把添加代码后的工程提交代GitHub master(本地master到GitHub master)

    终端cd到本地库.git隐藏文件目录

    1.  
      git branch // 看到分支情况,默认是只有master
    2.  
      git status // 看当前分支的状态
    3.  
      git add --all // 初始化时添加全部,平常提交代码是 git add+提交的文 件名 例如提交podfile文件:git add podfile
    4.  
      git commit -m 'first' //添加成功后提交 first是提交的注释
    5.  
      git push origin master:master // 提交本地代码到GitHub,origin相当于网路,master:master就是本地master推到GitHub master
    6.  
      例如:// git push origin master:develop // 把本地master推到远程develop

    看到分支情况,默认是只有master


    Screen Shot 2016-06-20 at 6.19.36 PM.png

    当前分支状态,红色文件为需要add的文件


    Screen Shot 2016-06-20 at 6.20.22 PM.png

    add 后再看那些文件状态变绿色


    Screen Shot 2016-06-20 at 6.20.43 PM.png

    提交


    Screen Shot 2016-06-20 at 6.20.56 PM.png

    提交代码到GitHub master


    Screen Shot 2016-06-20 at 6.21.10 PM.png

    此时,刷新GitHub,代码已上传

    四.develop master版本控制

    下面展开版本控制:终端的路径一致不变.git目录

    版本控制时,可以边操作边打开GitHub的客户端对比,当创建分支develop时,客户端上就会多一个分支develop(还没合并所有事空的),当把master的代码合并到develop时,客户端上的develop分支才有代码! 参照学习更加明显,在终端里面有时候显示的不明确。


    Screen Shot 2016-06-20 at 6.52.16 PM.png

    1.创建本地分支develop

    git branch develop

    现在 git branch一下发现有两个多了一个develop分支,且当前分支为master


    Screen Shot 2016-06-20 at 6.41.27 PM.png

    Screen Shot 2016-06-20 at 6.52.36 PM.png

    2.把本地master的代码merge(合并)到develop

    1.  
      git checkout develop // 切换当前分支为develop
    2.  
      git merge master // 把master分支的代码合并到当前分支(develop)

    Screen Shot 2016-06-20 at 6.45.02 PM.png

    致此,代码以合并到了develop,并且当前分支为develop

    3.merge(合并)代码到GitHUP develop(分支)

    git push origin master:develop   // GitHub上并没有develop分支,执行这句命令后会自动创建一个GitHub develop分支

    Screen Shot 2016-06-20 at 6.58.08 PM.png

    相应的GitHub上也出现了develop分支


    Screen Shot 2016-06-20 at 6.58.35 PM.png


    4.到此,本地develop、master和GitHub上develop、master都一致啦!
    重点来啦,怎么使用刚刚创建好的那些个develop、master?再创建一个本地分支develop1来模拟多人开发情况,本地的develope分支和develop1分支分别修改代码,然后提交到GitHub的develop分支,提交、拉去、冲突就能模拟多人开发环境了:

    ①.开发就用本地develop分支:查看分支状态,如果在master就切换当前分支到develop,

    git checkout develop

    打开Xcode写代码,之后把代码提交到本地develop,

    1.  
      git branch
    2.  
      git status
    3.  
      git add podfile MD5/EncryptionMD5.m MD5.xcodeproj/project.pbxproj
    4.  
      git commit -m '修改了podfile,viewcontrller'

    Screen Shot 2016-06-20 at 8.05.14 PM.png


    在develop分支下写的代码就会改变,而master和develop1中的不变,切换不同的分支,然后重新打开Xcode后发现确实如此! GitHub Desktop软件上也一致。

    ②.本地develop分支代码推到GitHub的develop分支。

    1.  
      // 应该先拉取 然后再推上去,
    2.  
      git pull origin develop:develop // 拉取到本地develop并合并,如果有冲突这个方法就不能用了,被拒绝拉取(下面的develop1分支会介绍另一种拉取方式)
    3.  
      git push origin develop:develop // 第一个develop是本地的,第二个是GitHub上的

    看下GitHub上的master和develop确实有变动


    Screen Shot 2016-06-20 at 8.12.27 PM.png

    Screen Shot 2016-06-20 at 8.11.46 PM.png

    ③.OK,切换到develop1分支然后修改代码,拉取,提交

    1.  
      git checkout develop1
    2.  
      git branch
    3.  
      git status
    4.  
      git add podfile
    5.  
      git commit -m '修改了podfile,添加了AFNetWorking'

    Screen Shot 2016-06-20 at 8.23.09 PM.png

    现在GitHub上develop分支的podfile文件是 pod 'SDWebImage',但是本地develop1分支的podfile文件是 pod 'AFNetWorking',会产生冲突。

    先拉取GitHub的develop分支到本地develop1,合并后再提交本地develop1到GitHub的develop分支。

    git pull origin develop:develop1

    Screen Shot 2016-06-20 at 8.29.03 PM.png

    rejected 被拒绝了,因为有冲突。

    现在换一种方法:

    1.  
      git fetch origin develop //更新GitHub的develop分支到当前本地分支(develop1)
    2.  
      git log -p develop1..origin/develop // 比较本地分支(develop1)和GitHub的develop分支的差别
    3.  
      git merge origin/develop // 合并冲突。
    4.  
      git status // 查看develop1分支的状态
    5.  
      vim podfile // 打开podfile文件
    6.  
      git add pod file
    7.  
      git commit -m '解决冲突'
    8.  
      git push origin develop1:develop // 将本地develop1合并到GitHub的develop

    Screen Shot 2016-06-20 at 8.41.16 PM.png

    podfile 文件有冲突


    Screen Shot 2016-06-20 at 8.39.55 PM.png

    ④.切换本地分支到develop

    1.  
      git checkout develop
    2.  
      git pull origin develop:develop // 更新本地develop分支的代码,如果遇到冲突,解决方法参考③里面的。

    目前来说,本地的develop、develop1和GitHub的develop分支保持一致啦,假设测试库的代码都已经测试通过了,要发版本!

    ⑤.合并代码到本地主master,合并代码到GitHub的master主分支

    1.  
      git checkout master // 切换到本地master主分支
    2.  
      git merge develop // 合并本地develop分支到本地master主分支。
    3.  
      git push origin master:master // 合并本地master主分支到GitHub的master主分支。

    ⑥.发布版本。

    五.参考的文章

    $ git pull
    $ git push
    $ git fetch
    $ fetch与push的区别

    加密的demo集成了MD5、RSA、AES、Base64:MD5_RSA_AES_BASE64下载

  • 相关阅读:
    [清华集训2016]温暖会指引我们前行——LCT+最大生成树
    BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
    NOIP2018游记
    BZOJ4832[Lydsy1704月赛]抵制克苏恩——期望DP
    BZOJ1906树上的蚂蚁&BZOJ3700发展城市——RMQ求LCA+树链的交
    BZOJ2822[AHOI2012]树屋阶梯——卡特兰数+高精度
    BZOJ4001[TJOI2015]概率论——卡特兰数
    BZOJ1805[Ioi2007]Sail船帆——线段树+贪心
    [IOI2018]排座位——线段树
    BZOJ3718[PA2014]Parking——树状数组
  • 原文地址:https://www.cnblogs.com/show58/p/12357967.html
Copyright © 2020-2023  润新知