使用GitHub的十个最佳实践

2019 年 2 月 20 日

使用GitHub的十个最佳实践

9.保护主分支,不要在其上直接提交代码


主分支中的任何内容都应该是可部署的,所以不应该直接在默认分支上提交代码,而且 Gitflow 工作流已成为标准。使用分支保护可以防止直接提交代码,当然,所有内容都应该通过 pr 进行管理。



8. 避免无法识别的提交


也许你正使用一个新环境,或者没有注意到的 Git 配置不正确导致用户使用了错误的电子邮件地址提交代码。现在,他们的提交与用户无关,并且几乎不可能追溯谁写了什么。


确保你的 Git 客户端配置了正确的电子邮件地址并链接到了你的 GitHub 用户。在代码审查期间检查你的 pr 是否存在无法识别的提交。



7. 为每个存储库定义 codeowners


使用 codeowners 功能可以定义哪些团队和人员被自动选为存储库的 reviewer。该功能会自动请求存储库 owner 进行审核。现在,组织动辄有数十个存储库,codeowners 可以从整个组织中选择定义 repo 的维护者。



6. 将源代码和 secret 凭证分离开


在构建 Cloud Native 应用时,我们保护了许多 secret - 帐户密码,API 密钥,私人令牌和 SSH 密钥。 千万不要将任何 secret 提交到代码中。可以使用从安全存储外部注入的环境变量。


你可以使用 Vault 和 AWS Secrets Manager 等工具来帮助在生产环境中进行 secret 管理。


有许多很棒的工具可以识别代码中现有的 secret 并防止出现新的 secret。例如,Git-secrets 可以帮助识别代码中的密码。使用 Git Hooks 可以构建一个预提交 hook 并检查每个 pr 的 secret。



5. 避免在项目中提交依赖


将依赖推到远程源将增加存储库大小。删除存储库中包含的所有项目依赖,并让包管理器在每个构建中下载它们。如果你担心“依赖的可用性”,你应该考虑使用 Jfrog 或 Nexus Repository 等二进制存储库管理器解决方案。查看 GitHub 的Git-Sizer


4. 将源代码和配置文件分离开


强烈建议不要将本地配置文件提交到版本控制中。 通常,本地配置文件包含 secret,个人偏好,历史记录等私有配置文件,你是不会想将其推送到远程的。这些信息应当只保留在本地环境中。


3. 为项目创建一个有意义的.gitignore 文件


每个存储库中都必须使用.gitignore 文件来忽略预定义的文件和目录。它将帮助你防止密码,依赖关系以及代码中许多其他可能的差异。可以从Gitignore.io中选择相关模板。



2. 归档不再维护的库


随着时间的推移,由于各种原因,我们的存储库可能已经无法维护了。也许你为一个临时用例打开了一个新的存储库(或者你想要 POC 一个新技术),或者你有一些包含旧的/不相关代码的存储库。 问题是相同的:这些存储库在达到目的之后不再被积极开发,你也不想再维护它们。最佳实践是归档这些存储库,设置为“只读”模式。



1. 锁住包版本


您的清单文件包含所有软件包版本的信息,以便在每次安装应用程序依赖项时保持一致的结果,不会破坏代码。最佳做法是使用清单锁定文件以避免任何差异,并确认每次都获得相同的软件包版本。 否则你的代码组件版本不精确,不确定将在下一个版本中安装哪个版本,并且代码可能会被破坏。


0. 对齐包版本


虽然你使用的是相同的软件包,但不同版本的发行版会使在各种项目中重用代码和测试变得更加困难。


如果你有一个在多个项目中使用的包,请至少尝试在不同的存储库中使用相同的主要版本。



原文链接:https://datree.io/blog/top-10-github-best-practices/


2019 年 2 月 20 日 15:034146
用户头像
张婵 InfoQ 技术编辑

发布了 87 篇内容, 共 44.4 次阅读, 收获喜欢 210 次。

关注

评论

发布
暂无评论
发现更多内容

零代码简史

明道云

SaaS

莱卡、宾利都在用,英特尔oneAPI渲染工具带来高质量视觉体验

intel001

MySQL redo与undo日志解析

Simon

MySQL Redo MySQL日志

币期权DAPP 8月28日全球同步耀世上线,掀起币圈追捧热潮

InfoQ_967a83c6d0d7

【Elasticsearch 技术分享】—— ES 查询检索数据的过程,是什么样子的?

程序员小航

Java elasticsearch 搜索 ES Lucene Elastic Search

Docker 镜像构建之 Dockerfile

哈喽沃德先生

Docker 容器 微服务 容器技术 容器化

温故知新——Spring AOP(二)

牛初九

spring aop ioc

云原生技术采用增加,全球60%后端开发人员都在使用容器 | 趋势分享

博云技术社区

云计算 容器 云原生 PaaS 博云

新金融分布式架构之SOFAStack解决方案

阿里云金融线TAM SRE专家服务团队

Flink-键值分区状态-10

小知识点

scala 大数据 flink

面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》

小傅哥

Java 数据结构 小傅哥 面试题 ArrayList

CRM企业到底该不该做PaaS?

ToB行业头条

PaaS SaaS CRM

从6大应用场景,看边缘计算落地生根

博云技术社区

边缘计算 PaaS 容器云 云平台 博云

第11周总结+作业

林毋梦

Redis系列(二):Redis的5种数据结构及其常用命令

简爱W

华为云会议的前世今生

华为云开发者社区

直播 云服务 华为云 视频编码 视频会议

GrowingIO AWS 成本优化之路

GrowingIO技术专栏

AWS 成本优化

面试官再问你Http请求过程,怼回去!

架构师修行之路

HTTP TCP/IP

有选择才会有困惑

escray

学习 面试 面试现场

Android |《看完不忘系列》之dagger

哈利迪

android

使用 K8s 进行作业调度实战分享

后端进阶

学习 Kubernetes 容器 k8s 调度式分布

Luajit字节码分析之KSTR

whosemario

lua

难以遏制的人因差错-Go的日志工具之痛

田晓亮

go 微服务

炒股不要看K线图(分享最近学习投资的一点心得)

Nick

投资 理财

“全球+”浪潮下,企业出海选择合适的“技术船舶”成关键

华为云开发者社区

网络 华为云 企业出海 网络加速 宽带

我也没想到 Springboot + Flowable 开发工作流会这么简单

程序员内点事

java 14

硬核科技:莱克立式吸尘器,引领家居清洁“新态度”

InfoQ_967a83c6d0d7

Java | 你知道快速搭建一个spring boot项目该怎么做吗?

简爱W

Redis系列(一):Redis简介及环境安装

简爱W

性能相关,内存

Linuxer

性能

usdt承兑跑分系统开发,区块链支付跑分系统搭建

WX13823153201

usdt承兑跑分系统开发

使用GitHub的十个最佳实践-InfoQ