前言
- 之前对于GitHub完全是当作一个存代码的远程仓库,或者是一个参考别人代码的网站
- 这篇文章可以看作GitHub进阶,告诉你如何建立分支,合并代码,与别人合作开发
参考文章
前期准备
- 简单的如何上传代码,可以看我的这篇博客
- 下载oh my zsh:
- oh my zsh是终端的一个插件,使用它在操作时可以更加方便
- 这篇文章的操作截图都将是使用oh my zsh后的效果
- 终端输入:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
defaults write com.apple.finder AppleShowAllFiles -bool true
在终端输入上述指令,显示所有隐藏文件,这样可以看到.git
最后需要重启Finder:窗口左上角的苹果标志-->强制退出-->Finder-->重新启动
预备知识
- 首先Xcode自带git,所以学会合作开发后,Xcode会开始展示他强大的一面
- 我们要明白几个概念:
- 仓库:仓库是存放所有代码的地方
- 分支:
- 分支首先有默认的主分支:master,所有最后的代码都要并到主分支
- 另外就是你可以建立自己的分支,在上面写自己的代码
- 所谓合作开发,其实就是你在你的分支开发,别人在别人的分支开发,最后都要合并到主分支
- fork:
- fork别人的仓库实际上相当于克隆了别人的仓库,可以这么理解,git clone指令是把别人的仓库克隆到本地,而fork确是将仓库在远程clone下来。
- 所以fork之后你也有了这样一个仓库,但并不是意味着你就能和别人同步开发了
先邀请你的伙伴吧
- 假设A, B, C三个人一起合作开发,首先是A在GitHub上建立了一个仓库叫Cooperative-Learning
- 接下来到仓库主界面点击contributor可以查看所有参与者,当然现在只有一个人
- 想要让其他人参与到这个仓库的代码合作上来需要点击settings,再点击左侧的Collaborators,此时输入密码
- 输入完你的密码后就可以拉人了,根据别人的用户名,邮箱搜索到这个人,然后向他发出邀请
- 假设A向B发出了邀请,而要接受邀请却并不是在GitHub上接受,这一点真的很值得吐槽,B要登陆自己注册GitHub的邮箱接受邀请(如果是QQ邮箱的话当然要记得是在PC端使用啊)
- 此时回到contributors界面就会发现多了一个人了(这是我之前的仓库,大家get到意思就行)
首先当然在本地搞出我们的git
- 这个步骤不同的人都会不一样,我的习惯是新建一个文件夹取名为仓库名+Demo
- 然后打开terminal
- cd + 上面的文件夹路径来进入该文件夹
- 复制我们新建仓库的SSH路径
- 输入g clone + SSH路径
- 比如我们输入g clone git@github.com:KevinAshen/Cooperative-Learning.git
- 此时就会出现一个仓库文件夹,里面应该有一个.git文件(隐藏文件)以及一个ReadMe
- 下一步切记:一定要在终端cd到那个仓库文件夹里!!!(可以看如果前面显示终端名master的话说明已经进入正确位置)
- 此时,我们有了本地的仓库了,该仓库已经和GitHub上的远程仓库链接
- 我们其实每次敲代码都是在本地仓库里,然后要将他上传到远程仓库,包括我们进行的分支切换都是本地的,这里其实已经包括了一个隐患,下面会提到
一人建一个分支喽
- 现在A需要修建自己的分支来作为自己代码的分支
- 指令:git checkout -b 分支名 (checkout是跳转分支,加上-b代表如果不存在直接新建)
- 比如我们输入git checkout -b branchA
- 所谓切换分支其实在某些角度上就意味着是一个新的仓库了,比如你在主分支里新建了工程,不做任何操作,直接切换到另一个分支,该工程在文件夹里直接没了,而你没有保存,在你返回主分支的时候它也不会出现,可能你一整天的工作都白费了
- 但是也不用太担心,git如果你没做好保存工作会阻止你的自取灭亡行为
- 此时就是安装oh my zsh的好处了 你能直接看到自己目前所在分支
- 现在,我们打开在这里直接新建工程
- 为了让任何一个人都看得懂,我新建的是一个C语言工程,让哪怕不是学习iOS开发的也看得懂
新建工程+简单的上传指令
- 我们打开Xcode,在本地仓库新建一个C语言工程,取名为Cooperative-LearningTest
- 此时我们还是在branchA分支哦,牢记
- 任何人,任何时候都不应该对master分支下建工程,写代码,而是应该在自己对分支写,最后合到主分支,很重要很重要
- 然后打开终端,输入g status (查看仓库状态)
- 这条指令极其有用,如果你追求谨慎的话,应该在每一个操作到前后都输入这条指令,查看状态,小心驶得万年船,一旦删库就GG
- 这个时候会罗列出你到等待提交的新文件有那些那些
- 使用add指令将这些添加到待提交区(自己取得名字。。。)
- g add . 会让所有为提交文件都被添加,也可以g add + 文件路径来提交个别的
- 为什么不直接所有都上传,因为可能有的代码你才写了一半不想直接上传
- 如果这种情况的话,可以使用git stash //保存工作现场
- 比如我在这个工程里写点代码,此时使用git status查看状态,会显示该文件modified(已修改)
- 之后使用git stash代码,你之前写的在编译器上都看不到了,算是被暂存了,可以使用git stash list查看,用git stash pop取出来
- add后下一步是commit
- git commit -m “提交备注”
- commit等于是将等待区的代码提交到本地仓库
- commit之后就是push
- git push origin + 分支名
- 此时就是git push origin branchA(这里很关键,如果你习惯使用GitHub提交代码,就是没试过合作开发,那这里你会很习惯的打出git push origin master,依然牢记一个原则,绝对绝对不要在master分支进行操作)
- push相当于就是把远端