# 多人使用Git场景

# 管理冲突

  1. 不同人修改不同文件的情况: 当一个人往服务器push,另一个人pull或者fetch下来,这个合并过程是自动合并的。

  2. 不同人修改同一个文件的情况: 同上面的情况一样,会进行自动合并。

  3. 不同人修改了同文件的同一区域的情况: 后提交的人merge时来管理冲突情况,合并完成后,再做一次commit提交到远端。 管理冲突的时候可以使用vi也可以使用有用户界面的文本编辑器或IDE管理。其格式如下: <<<<<<< HEAD

    =======

    >>>>>>> commitHashCode

  4. 多人协作时,如果有人变更了文件名,有人变更了文件内容: 后提交的人直接合并就能行,Git知道文件名的变更并将其他人的Git自动合并。

  5. 多人协作时,不同人把同一文件改成不同文件名的情况: 后提交的人管理冲突情况,使用git rm或git add来选择要保留的文件,再做一次commit到远端。

# 严禁出现的情况

  1. 禁止向集成分支执行push -f操作:

    git push -f remoteName branchName

    执行完该操作后会让远程仓库的分支信息丢失或发生严重改变。如果这个分支只有你一个人维护还好,但如果是集成分支的话是绝对不能执行该操作的。

  2. 禁止向集成分支执行变基操作:
    集成分支的commit是众人一点一点积累的,过去的commit历史不应该被改变,我们应该在前面commit基础上增加commit来完成我们的工作,否则在我们变基操作后其他人会很容易困惑,他们push的时候也会push不上去。

# Github使用

# 应用场景

  1. Git无法帮助开发人员寻找开源项目。
  2. 许多程序员开发了大量优秀开源项目,但却很难让他人了解这些项目。

# 发展历史

时间 用户数 存储库 评价
2007-2011 100万 200万 代码协作与软件社交
2012-2015 280万 460万 快速增长到无处不在
2015-2018 3000万 9000万 全球扩张

# 成功原因

  1. 找到一个需要解决的大问题,让Git社交化。
  2. 不断解决用户痛点,让开发人员能够方便快捷安全地使用它。

# 高级搜索

在readme中搜索关键词: 关键字 in:readme

stars大于n的项目: 关键字 stars:>n

比如要搜一个使用github搭建博客的仓库: blog easily start in:readme stars:>1000

搜索关于gitlab集成相关的: 'after_script'+'stage:deploy' filename:.gitlab-ci.yml

# 常见工作流

# 考虑的因素

  • 团队人员组成
  • 研发设计能力
  • 输出产品特征
  • 项目难易程度

# 工作流

mainDev

GitFlow

GithubFlow

GitLabFlow

GitLabFlow2

GitLabFlow3

# 集成分支

  • merge commits:将head分支的所有commit通过一个合并commit合并到base分支上。
  • squash merging:将head分支的所有commit合并到base分支的一个commit里面。
  • rebase merging:将head分支的所有commit单独地合并到base分支上。

在项目中会有多个分支,有先有后的合并到master里面。前两种在github可以直接用pull request合并,遇到冲突的时候解决下即可,但是第三种需要本地rebase变基操作,然后再在github上合并,有些麻烦,当有很多commit要进行rebase的时候,为了防止每个commit都要解决一次冲突,可以使用git的rerere特性。

# issue管理需求和任务

# 启用

在项目的setting面板-》option-》Features-》Issues中启用,也可以在这个地方设置模板,该模板会通过一个commit被加入到项目文件里面。

# 使用

Github中有project的概念,它可以用来管理项目,比如新建任务,给任务设置状态,进度最终,分享和讨论某项任务,设置触发事件。

我们可以在Issue中设置它属于哪个project,然后在project面板里进行设置。

# 如何进行CodeReview

项目Settings-》Branches-》Branch protection rule

在pull request中可以选择reviewer。

在这个地方如果安装了第三方应用比如Travis CI或codecov也会在这个地方有选项。

# Wiki文档

可以在项目的wiki文档部分使用markdown来编写项目文档。

wiki文档和项目是分开的,不在项目仓库中,如需在本地修改,需要单独克隆下来修改。

# GitLab

GitLab除了上面Github的功能外,还能让我们自己搭建Git托管系统,GitLab的project看板放到Issue里面,相对于Github的pull request,GitLab的对应code review机制叫merge request。GitLab的CI/CD需要先配置runner。