Git 讲解:正确的团队礼仪
正确的团队礼仪将帮助您的团队实现无缝协作和高效工作。这些规则通常是通过经验积累而形成的,因为大多数刚开始学习具有挑战性的新概念的开发人员并不会优先考虑正确的 Git 礼仪。尽管这些规则乍一看可能并不重要,但它们在调试、合并代码和管理拉取请求时非常有用。
本文旨在通过讨论创建分支和提交以及处理不必要的、私有的或大文件的礼仪指南,帮助您最大限度地利用 Git,让您的团队更好地使用 Git。此外,我们还将介绍一些不同的命令,用于纠正可能影响工作流程和团队协作的常见错误。
分支
每个代码库始终有一个名为 的主分支origin/master
,它反映了生产就绪状态或已部署的代码,开发人员可以从该分支进行分支和合并。在项目实施过程中,会创建许多支持分支。这些分支应该具有特定的用途、有限的生命周期和一个描述性的名称。以下是创建有效分支的一些准则:
为每个问题创建一个分支。为了将支持分支合并到主分支,你需要在某个时间点创建合并请求。合并请求是获得反馈的绝佳机会,有助于你的成长。过长的合并请求会被拖延,或者根本得不到详细审核。换句话说,你会错过来自团队的反馈,而这些反馈原本可以帮助你成长。
在分支名称开头使用 token。Token是团队约定的分组,用于快速传达每个分支所属的工作流程部分。一些常用的 token 包括feature/或feature-以及bug/或bug-。
注意:
/
如果使用 Jenkins 或其他第三方工具,命名约定中的可能会破坏您的 CI/CD 流水线。在选择代币名称约定之前,请务必与您的团队沟通。
此约定还允许您按组列出它们:
git branch --list “feature/*”
包含问题编号。当你的问题没有自动链接到分支时,这很有用。例如,我的团队目前使用 JIRA 来跟踪问题,并使用 Gitlab 作为我们的 Git 代码库托管服务。能够快速浏览某个分支并知道它属于哪个问题,这真的很方便。
使用描述性强的简短名称。尽量选择简短且定义明确的名称,清晰地表达任务的目的。
对于在票号 #28 下添加搜索栏的新功能,一个经过深思熟虑的分支名称示例如下:
feature/28-search-bar
如果你正在阅读这篇文章,突然意识到你的分支没有遵循任何这些规则……不要惊慌!让我们看看如何在本地和远程重命名你的分支:
重命名本地分支:
# if HEAD is in the branch you want to change
git branch -m [new-name]
# if HEAD is in another branch
git branch -m [old-name] [new-name]
重命名远程分支:
# Rename your local branch (step above)
# Delete your old remote branch
git push --delete remote branch-name
# Or use this shortcut
git push origin :[old-name]
# Push your new-name branch to remote
git push origin [new-name]
# Reset the upstream branch for the new-name local branch
git push origin -u [new-name]
清理未使用和已合并的分支。创建合并请求时,请确保选择合并后删除分支的选项。此外,请务必妥善管理本地和远程未使用的分支。
要修剪所有过时的引用远程分支:
git fetch --prune --all
要在本地删除分支:
# safely - Git prevents you from deleting it if it hasn’t been merged
git branch -d [branch-name]
# force delete
git branch -D [branch-name]
要远程删除分支:
git push origin :[old-name]
提交
清晰的提交信息至关重要,因为它能让你在回顾历史记录或团队成员审核你的合并请求时,清晰地解释你所做的更改以及更改原因。以下是一些撰写精准提交信息的指南:
一次提交应该只包含一个逻辑变更。这一点可能比较难,尤其是在多次提交之后,想要一次性提交所有变更,这很诱人。这里有一个标志可以帮助你:
git add --patch
它将逐一检查您所做的所有更改,并询问您是否要提交该特定更改。
请保持简短。请不超过 50 个字符。如果您要修改或重构现有代码,请简要解释一下进行该更改的原因。不确定提交信息中应该包含哪些内容?使用以下命令查看工作树中的更改列表:
git diff
以大写字母开头。并保持一致。
末尾不需要标点符号。没有必要。
用动词开头。你的提交信息应该完成以下句子:
“This commit will…[commit-message]”
好的例子:
“Redirect user to the requested page after login”
“Fix typo in introduction to the user tools”
你对上次提交不满意吗?使用以下命令进行更改:
git commit --amend -m “New message”
如果您想更改之前的提交,但希望保留之前的提交信息,也可以使用此命令。例如,有时我忘记删除一条日志信息,但又不想为此创建另一个提交。
git add changed/file.ts
git commit --amend --no-edit
忽略文件
Git 不应跟踪项目不需要的文件。了解哪些文件需要忽略非常有益,因为它能帮助你和团队成员维护一个整洁、安全的项目。以下是一些常见的需要忽略的文件类型:
- 操作系统文件
- 语言和框架文件
- 使用包管理器下载的文件
- 用户名和密码
- 调试日志
使用以下命令将本地.gitignore
文件添加到项目根目录:
touch .gitignore
在每一行中添加您希望 Git 忽略的文件或文件夹。以下是一些示例:
# Ignore operating system files
.DS_store
# Ignore SASS config files
.sass-cache
# Ignore npm dependencies folder
/node_modules
# Ignore API credentials
.env
# Ignore all logs
*.log
注意:一位 DEV 社区成员推荐使用gitignore.io.gitignore
一步生成.gitignore
为您的项目生成一个有用的文件!他们还提供文档,帮助您使用命令行访问他们的 API。
你是否已经提交了一个你本想忽略的文件?这种情况我们谁都会遇到!让我们来看看如何解决这个问题:
首先,您需要从您的仓库中删除该文件。以下命令将使 Git 停止跟踪 [file-name],但该文件不会从您的工作系统中删除。
git rm --cached [file-name]
然后将其添加到您的 .gitignore 文件并提交此更改。
# Ignore [file-name]
[file-name]
处理大文件
将大文件上传到 Git 并不常见,然而,你可能面临需要与团队成员共享一些大型数据文件的情况。这可能会带来问题,因为从存储大文件的仓库克隆、获取或拉取文件需要很长时间,因为需要下载每个大文件的每个版本。不要让你的团队成员为此头疼,而是通过 Git LFS(大文件存储)共享大文件,这是一个开源的 Git 扩展。此工具非常有用,因为它可以将仓库中的大文件替换为小型指针文件。以下是一些使用此工具的说明:
-
下载并安装Git LFS
git lfs install
-
跟踪大文件
git lfs track “files/*.csv”
此命令将创建或更新一个名为 的文件.gitattributes
,该文件用于绑定已跟踪的文件模式。您需要将此文件提交到您的代码库。
笔记:
- 要停止使用 Git LFS 跟踪文件,请将其从
.gitattributes
文件中删除。 - 从 Git LFS 克隆和提取与使用普通存储库相同。
这些是我在与不同项目的不同人员合作过程中学到的一些 Git 准则。每个人都有不同的偏好,但在团队协作时,选择一套一致的 Git 规则非常重要,这样才能确保每个人都能达成共识。如果您还有其他推荐的规则,请在评论区告诉我!
查看我之前的帖子:
Git 讲解:基础知识
Git 讲解:深入比较
我每周六都会探索、定义和解释 Git 概念!
文章来源:https://dev.to/milu_franz/git-explained-proper-team-etiquette-1od