从git入门到多人协作

前言

这是一篇给像我这样的新手或者是熟悉图形工具的老鸟看的。仅作为快速入门的教程。 git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中。 初学者非常容易被各种命令,参数命令,参数 吓哭(不要怕,一切命令行都是纸老虎)。但实际上刚上手你并不需要了解所有命令的用途。你可以从掌握一些简单,强大的命令开始,逐步去学习。(这就是这篇文章要讲的)。好了,闲言少叙,老司机开始发车! 开始

简要了解

git命令是一些命令行工具的集合,它可以用来跟踪,记录文件的变动。比如你可以进行保存,比对,分析,合并等等。这个过程被称之为版本控制。还有很多的版本控制系统。

Git是分布式的,这意味着它并不依赖于中心服务器,任何一台机器都可以有一个本地版本的控制系统,我们称之为仓库。如果是多人协作的话,你需要还需要一个线上仓库,用来同步信息。这就是GitHub, BitBucket的工作。

安装git

安装git非常直接:

Linux(ubuntu为例,如果有arch老鸟的话,可以教我玩一玩)

$ sudo apt-get install git-all  //不加all也可以

windows: 推荐使用git for windows ,它包括了图形工具以及命令行模拟器。

OSX: 最简单的方式是使用homebrew安装,命令行执行

$ brew install git // brew需要提前安装

git工作流程

git 工作流程

配置git

$ git config --global user.name "My Name"
$ git config --global user.email myEmail@example.com

常用git命令

  1. git常用命令速查列表

git 命令速查

常用的命令有哪些?

基本以上全部。。

怎么会这样!!!

下面的内容演示在github上一个repo的创建到建立远程连接的过程(单人开发)。

需要用到的命令:

// initial a git repo
$ git init 
// 新建一个名字叫hello的文件后,需要将这个文件加入暂存区。
$ git add .
// 提交到本地分支上,提交信息一定要有意义,一定一定。
$ git commit -m "your msg"
/*熟悉ssh的同学同样可以使用ssh方式连接github,不过需要增加一步创建秘钥的过程。
*假设我们在用户名为stanlazy的github用户上,新建了一个名字叫test的库,不一定非要非空
*/
$ git remote add origin https://github.com/stanlazy/test.git 
// 然后push
$ git push -u origin master

这样基本就是一个库的新建到同步的过程(标准版)既然这是标准版,一般都有较为简单的快速新建版的。

不要打我

方法二:

  1. 在登录你的github,创建一个新的库

github pic

  1. 将库clone到本地

    $ git clone https://github.com/stanlazy/test.git

  2. 进行 add commit push 之类的操作。

git如何进行多人开发?

这是一个比较高端的操作了。确定继续?确定你不会用小拳拳打我胸口?

小拳拳

刚才提到过,我们在做完某个功能时候,会向远程的remote库进行push代码,那么多人进行协同开发的时候,就会有以下几个问题:

  1. 我如何同步别人的代码
  2. 代码冲突了怎么整,如何解冲突?

同样会引入一个新的概念:分支

分支

当你在做一个新功能的时候,最好是在一个独立的区域上开发,通常称之为分支。分支之间相互独立,并且拥有自己的历史记录。这样做的原因是:

  1. 稳定版本的代码不会被破坏
  2. 不同的功能可以由不同开发者同时开发。
  3. 开发者可以专注于自己的分支,不用担心被其他人破坏了环境
  4. 在不确定之前,同一个特性可以拥有几个版本,便于比较

创建新的分支:

// 新建一个dev分支(development,开发分支之意),一般dev分支走在生产分支的前面
$ git branch  dev
/* 将当前开发的分支切换到dev分支
*注意:各分支相互独立,意味着你在dev分支上修改的内容
*无法直接显示到master分支上,需要使用marge操作
*/
$ git checkout dev

marge(融合)分支:

// 将其他的分支融合到当前的活动分支,所以我们先回到master分支
$ git checkout master
// 将dev分支融合到master分支上
$ git marge dev
// 是不是删除dev分支你自己决定咯
$ git branch -d dev **看着是不是蛮简单的,但是请思考一下以下场景:**

如果代码出现了冲突怎么办?git不会那么智能,它不会知道你到底会想要哪一部分代码,所以它会告诉你,代码冲突了。当然,通知方式是英文。而且在命令行。。 我推荐使用图形工具去解决代码冲突。因为用vim去解决代码冲突简直是一场灾难。

宝宝委屈

具体的如何解决代码冲突说起来会比较难理解,所以先上代码,稍后集中简单说原理。

$ git add.
$ git stash
$ git pull --rebase
$ git stash pop
// 然后就是解决冲突,这个自己上手一次就明白了,故不赘述

借用一下我们在百度效率云的提交代码规范:

git add .(添加到暂存区)

git stash (贮藏当前的变动)

git pull –rebase (拉取远程库代码)

git stash pop (释放贮藏的代码)

如发生冲突,处理冲突,可使用IDE自带的Resolving Conflicts图形化工具。

git add .(添加到暂存区)

git commit -m “message” (message 注意规范)

git push origin HEAD:refs/for/master (HEAD:refs/for/master 不要写错,不然会建新分支)

Code Review 未通过,代码有问题,返回修改

git add .(添加到暂存区)

git commit –amend(此处一定不要修改上次的message,不要修改ChangeId等任何内容!!!)

git push origin HEAD:refs/for/master

基本的git多人协作过程已经差不多说完了

你以为git就这么点东西吗?

native

怎么可能

附参考资料链接

  1. 30分钟git命令入门到放弃 :讲的很深入,目前我在学习
  2. git从入门到放弃,最骚的就是你 :很基础的一个教程,手把手教你如何注册github账号到提交

附继续学习链接

  1. 怎样使用 GitHub?文科妹子写的 Github 入门教程 :特别好玩,我刚开始使用github就是参考的这个教程,内容生动风趣
  2. 初探github,webstorm IDE手把手配置git环境 :三个月前我写的一篇文章,在知乎上骗到了30多个赞,但是现在看起来写的还不是十分的如意,有时间再继续进行完善。
Table of Contents