Git团队协作和版本控制思路 | 青训营

76 阅读4分钟

Git与Github进行项目协作开发

  • 通过Github创建远程仓库
  • 使用git进行版本控制

Github建立远程仓库

image.png 选择公开,填写仓库名,仓库描述。
在1024中配置SSH,可以通过1024平台直接控制仓库。(参考1024中git操作提示)
设置远程仓库:git remote add origin git@github.com:username/repo.git
小型团队协作项目,可以选择合作者模式。合作者模式与通常的开源项目合作过程不同,合作者拥有直接操作仓库的权限,类似管理员,不需要每次提交合并都需要仓库所有者操作。
通过用户名或者邮箱在仓库设置中添加合作者,合作者通过邮箱接受请求后即可。

本地开发

git clone直接将项目克隆到本地,通过创建开发分支进行开发,测试完成后进行分支合并,并推送到远程仓库,需要进行app连接测试,可以在1024平台同步代码并运行,得到外部的服务链接进行测试。
分支管理相关命令:

  • git branch 分支创建分支
  • git checkout 分支切换分支
  • git checkout -b 分支创建并切换分支
  • git checkout master git merge 分支切换到主分支并进行合并
  • git branch -a 查看所有分支,包括远程,当前分支有*标记
  • git branch -d 分支合并过后不要的分支删除
    合并后可能产生冲突,出现类似以下的信息:
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

此时合并已经产生,但是没有创建一个新的合并提交,使用git status查看未合并unmerged状态的文件。这些文件中加入了冲突标记:

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

通过=====的分隔符,上面是主分支的,下面是合并分支的,处理冲突之后使用git add暂存,表示冲突已经解决,再使用git commit提交合并。

远程分支

考虑到合作开发的场景,需要在远程仓库同步主分支和开发分支。
在Clone项目时,自动建立了本地分支和远程分支的同步关系。
在本地设置分支远程没有的分支时,第一次推送是需要设置分支绑定关系:git push -u origin dev,将推送dev分支到远程的dev分支,如果没有则创建出来并设置对应关系。有了对应关系之后,在本地的该分支操作pull或者push时就可以直接操作。

远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时 “master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用, “origin” 是当你运行 git clone 时默认的远程仓库名字。 如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master

当然在Github上也可以直接创建出分支。当远程存在分支只是本地尚未和远程关联,使用命令git branch -u origin/dev就可以绑定分支。

合作流程

  1. 新建分支时,先pull最新的代码,再创建分支,以此为基础进行开发。
  2. commit时,先add到暂存区;如果是多人开发的分支,在commit之后,pull当前分支的最新代码,如果有冲突,解决冲突。
  3. 测试分支功能稳定之后,切换到主分支,合并代码到主分支
  4. commit信息尽量填写清楚

rebase变基

使用另一种合并提交方式rebase

image.png git checkout experiment
git rebase master

image.png 提交的历史就合并成了一条线,这时候切换回master分支,并merge一次就可以将master指向C4'。
变基的实质是丢弃一些现有的提交,然后新建一些内容一样但不同的提交。
使用rebase还是merge:对于自己本地的分支修改,使用rebase使提交历史更加清晰;对于已经推送到远程仓库的,不要再进行rebase,否则其他人在pull时要使用git pull --rebase选项,以rebase的方式拉取远程仓库的修改。

参考:Git - Book (git-scm.com)