# 多人使用Git场景
# 管理冲突
不同人修改不同文件的情况: 当一个人往服务器push,另一个人pull或者fetch下来,这个合并过程是自动合并的。
不同人修改同一个文件的情况: 同上面的情况一样,会进行自动合并。
不同人修改了同文件的同一区域的情况: 后提交的人merge时来管理冲突情况,合并完成后,再做一次commit提交到远端。 管理冲突的时候可以使用vi也可以使用有用户界面的文本编辑器或IDE管理。其格式如下: <<<<<<< HEAD
=======
>>>>>>> commitHashCode
多人协作时,如果有人变更了文件名,有人变更了文件内容: 后提交的人直接合并就能行,Git知道文件名的变更并将其他人的Git自动合并。
多人协作时,不同人把同一文件改成不同文件名的情况: 后提交的人管理冲突情况,使用git rm或git add来选择要保留的文件,再做一次commit到远端。
# 严禁出现的情况
禁止向集成分支执行push -f操作:
git push -f remoteName branchName
执行完该操作后会让远程仓库的分支信息丢失或发生严重改变。如果这个分支只有你一个人维护还好,但如果是集成分支的话是绝对不能执行该操作的。
禁止向集成分支执行变基操作:
集成分支的commit是众人一点一点积累的,过去的commit历史不应该被改变,我们应该在前面commit基础上增加commit来完成我们的工作,否则在我们变基操作后其他人会很容易困惑,他们push的时候也会push不上去。
# Github使用
# 应用场景
- Git无法帮助开发人员寻找开源项目。
- 许多程序员开发了大量优秀开源项目,但却很难让他人了解这些项目。
# 发展历史
时间 | 用户数 | 存储库 | 评价 |
---|---|---|---|
2007-2011 | 100万 | 200万 | 代码协作与软件社交 |
2012-2015 | 280万 | 460万 | 快速增长到无处不在 |
2015-2018 | 3000万 | 9000万 | 全球扩张 |
# 成功原因
- 找到一个需要解决的大问题,让Git社交化。
- 不断解决用户痛点,让开发人员能够方便快捷安全地使用它。
# 高级搜索
在readme中搜索关键词: 关键字 in:readme
stars大于n的项目: 关键字 stars:>n
比如要搜一个使用github搭建博客的仓库: blog easily start in:readme stars:>1000
搜索关于gitlab集成相关的: 'after_script'+'stage:deploy' filename:.gitlab-ci.yml
# 常见工作流
# 考虑的因素
- 团队人员组成
- 研发设计能力
- 输出产品特征
- 项目难易程度
# 工作流
# 集成分支
- 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。