GitHub多人协作简明教程

本文面向了解git的基本命令但是不熟悉如何使用GitHub进行多人协作开发项目的同学。

为简单起见,这里只设定有两个开发人员,HuanianLiDaxiangLi。他们在GitHub上的地址为:

  • HuanianLi: https://github.com/huanianli  # host  developer
  • DaxiangLi: https://github.com/daxiangli  # guest developer

HuanianLi将创建一个项目kaiba, 然后邀请DaxiangLi来一起开发。

1. 在GitHub上创建两个帐号(HuanianLi and DaxiangLi),(这里以HuanianLi为例)

1.1 打开GitHub的主页: https://github.com/

1.2 点击右上角的Sign up

1.3 跳转到注册页面后,开始Create your personal account,按照要求输入Username, Email Address, Password, 例如:

1.4 点击页面下方的"Create an account"按钮并按照后续提示完成注册。

2. 在Linux桌面上创建两个用户(huanianli and daxiangli), (这里以huanianli为例)

2.1 创建用户huanianli

root@idorax:~# useradd -d /home/huanianli -m -s /bin/bash -c "Huanian Li" huanianli

2.2 对用户huanianli的git进行设置 (这里直接编辑文件~/.gitconfig

huanianli@ThinkCentre:~$ vim ~/.gitconfig
huanianli@ThinkCentre:~$ cat -n ~/.gitconfig 
     1    [user]
     2        email = [email protected]
     3        name = Huanian Li
     4    [core]
     5        editor = vim
     6    [push]
     7        default = matching
huanianli@ThinkCentre:~$ 
huanianli@ThinkCentre:~$ git config -l
user.email=[email protected]
user.name=Huanian Li
core.editor=vim
push.default=matching
huanianli@ThinkCentre:~$ 

2.3 在huanianli的HOME目录下创建一个工作空间workspace

huanianli@ThinkCentre:~$ cd ~
huanianli@ThinkCentre:~$ mkdir workspace
huanianli@ThinkCentre:~$ ls
workspace
huanianli@ThinkCentre:~$ 

3. (Host Developer) HuanianLi在GitHub上创建一个项目kaiba

3.1 登录HuanianLi的GitHub空间,打开页面Repositories, e.g.

https://github.com/HuanianLi?tab=repositories

点击页面右边的New按钮, 进入创建一个新的代码仓库的页面。

点击"Create repository"完成创建。

3.2 进入HuanianLi的Linux桌面,clone在3.1创建的项目kaiba

huanianli@ThinkCentre:~$ cd workspace
huanianli@ThinkCentre:~/workspace$ git clone https://github.com/HuanianLi/kaiba.git
Cloning into 'kaiba'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
huanianli@ThinkCentre:~/workspace$ ls
kaiba
huanianli@ThinkCentre:~/workspace$ cd kaiba
huanianli@ThinkCentre:~/workspace/kaiba$ vi README.md
huanianli@ThinkCentre:~/workspace/kaiba$ cat -n README.md
     1    kaiba: A sandbox project of Kaiba
huanianli@ThinkCentre:~/workspace/kaiba$
huanianli@ThinkCentre:~/workspace/kaiba$ git add README.md
huanianli@ThinkCentre:~/workspace/kaiba$
huanianli@ThinkCentre:~/workspace/kaiba$ git commit -m "Initialize the project by adding README.md"
[master (root-commit) c0bd2ed] Initialize the project by adding README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
huanianli@ThinkCentre:~/workspace/kaiba$
huanianli@ThinkCentre:~/workspace/kaiba$ git log
commit c0bd2ed35e10180209726199af422a63a007355f
Author: Huanian Li <[email protected]>
Date:   Wed Jul 25 16:21:43 2018 +0800

    Initialize the project by adding README.md
huanianli@ThinkCentre:~/workspace/kaiba$
huanianli@ThinkCentre:~/workspace/kaiba$ git branch
* master
huanianli@ThinkCentre:~/workspace/kaiba$ 
huanianli@ThinkCentre:~/workspace/kaiba$ git push -u origin master
Username for 'https://github.com': HuanianLi
Password for 'https://[email protected]':
Counting objects: 3, done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/HuanianLi/kaiba.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
huanianli@ThinkCentre:~/workspace/kaiba$

在上面的操作中,关键的步骤是:

  • clone
git clone https://github.com/HuanianLi/kaiba.git
  • push
git push -u origin master

注意因为是第一次push, ‘-u’ 是必须的。

3.3 一旦完成git push之后,我们就可以浏览GitHub上的项目了

4. (Guest Developer) DaxiangLi登录他的GitHub,  然后进入(Host Developer) HuanianLi的GitHub空间,fork项目kaiba

4.1 DaxiangLi登录他的GitHub


 

4.2 进入(Host Developer) HuanianLi的GitHub空间, 点开项目kaiba

注意: 目前的 Fork 为0。

4.3 fork项目kaiba, 直接点Fork按钮

Fork 结束后, DaxiangLi的GitHub里就有了项目kaiba

5. (Guest Developer)DaxiangLi贡献代码给项目kaiba

5.1 DaxiangLi在他的Linux桌面上clone代码

daxiangli@ThinkPad:~/workspace$ git clone https://github.com/DaxiangLi/kaiba.git
Cloning into 'kaiba'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

两个问题:

  • DaxiangLi 能直接clone HuanianLi的GitHub里的代码吗?  A: 能。
  • DaxiangLi 能直接clone HuanianLi的GitHub里的代码,然后做修改后push回去吗? A: 不能。

5.2 DaxiangLi新建一个开发分支

daxiangli@ThinkPad:~/workspace/kaiba$ git checkout -b dev
Switched to a new branch 'dev'

其中, git checkout -b dev 等同于

1 git branch   dev
2 git checkout dev

5.3 把HuanianLi的项目添加到DaxiangLi的远程仓库

daxiangli@ThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git

5.4 将HuanianLi的分支取下来

daxiangli@ThinkPad:~/workspace/kaiba$ git remote update
Fetching origin
Fetching upstream
From https://github.com/HuanianLi/kaiba
 * [new branch]      master     -> upstream/master

5.5 将HuanianLi的master分支更新到本地

daxiangli@ThinkPad:~/workspace/kaiba$ git fetch upstream master
From https://github.com/HuanianLi/kaiba
 * branch            master     -> FETCH_HEAD

5.6 合并HuanianLi的分支到本地(注意:这一步在第一次其实不需要)

daxiangli@ThinkPad:~/workspace/kaiba$ git rebase upstream/master
Current branch dev is up to date.

5.7 DaxiangLi添加一个文件并提交commit

daxiangli@ThinkPad:~/workspace/kaiba$ git add foo.py
daxiangli@ThinkPad:~/workspace/kaiba$ git commit -m "DaxiangLi: Add foo.py"
daxiangli@ThinkPad:~/workspace/kaiba$ git push -u origin dev 

5.8 进入DaxiangLi的GitHub, 提交一个PR

Q: 什么是PR?

A: PR是Pull Request的缩写,是开发者使用GitHub进行协作的利器。简单来说,Pull Request是一种机制,让开发者告诉项目成员一个功能已经完成。一旦feature分支开发完毕,开发者使用GitHub账号提交一个Pull Request。它告诉所有参与者,他们需要审查代码,并将代码并入master分支。Pull Request不只是一个通知,还是一个专注于某个提议功能的讨论版面。Pull Request 需要两个不同的分支或是两个不同的仓库, 其工作原理大概是:

  1. 开发者在他们的本地仓库中为某个功能创建一个专门的分支;
  2. 开发者将分支推送到公共的GitHub仓库;
  3. 开发者用GitHub发起一个Pull Request;
  4. 其余的团队成员审查代码,讨论并且做出修改;
  5. 项目维护者将这个功能并入官方的仓库,然后关闭这个Pull Request。

现在点击Compare & pull request按钮,就创建一个PR,

点页面下方的"Create pull request"按钮即可。 生成的PR看起来是这样的:

6. (Host Developer) HuanianLi 查看PR并Merge

6.1 HuanianLi查看PR

HuanianLi可能在PR中加入comment, 要求DaxiangLi做相应的修改。 这里为简单起见,直接Review通过。

6.2 Huanli 点Merge pull request

到此为止,DaxiangLi成功地给HuanianLi贡献了一次代码!! 当然,这次贡献过程异常简单,因为未涉及到冲突解决。接下来将介绍更复杂的情况,这才是重点:-)

7. HuanianLi 查看kaiba并删除无用的commit

7.1 使用git pull更新本地空间

huanianli@ThinkCentre:~/workspace/kaiba$ git pull
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/HuanianLi/kaiba
   c0bd2ed..b8a0b63  master     -> origin/master
Updating c0bd2ed..b8a0b63
Fast-forward
 foo.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 foo.py

注意: 在顶端的commit不是我们想要的,需要把它移除掉。

commit b8a0b63d8b18f8466e79284ed6022340ca5a43a8
Merge: c0bd2ed 640f6f6
Author: Huanian Li <41667254[email protected]>
Date:   Wed Jul 25 18:55:02 2018 +0800

    Merge pull request #1 from DaxiangLi/dev
    
    DaxiangLi: Add foo.py

7.2 使用git rebase -i移除不需要的commit

huanianli@ThinkCentre:~/workspace/kaiba$ git rebase -i c0bd2ed35e10180209726199af422a63a007355f
Successfully rebased and updated refs/heads/master.

在弹出的交互界面中不做任何修改,直接保存退出即可。

7.3 使用git push --force强制更新远端的master分支

huanianli@ThinkCentre:~/workspace/kaiba$ git push --force
Username for 'https://github.com': HuanianLi
Password for 'https://[email protected]': 
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/HuanianLi/kaiba.git
 + b8a0b63...640f6f6 master -> master (forced update)

这下清爽啦!!

。。。TBD .....

参考资料:

猜你喜欢

转载自www.cnblogs.com/idorax/p/9366035.html
今日推荐