创建 Git 存储库和分支代码
介绍
如今,程序员分散在不同的建筑物、城市、国家(以及多个时区)协作完成一项或多项任务已是司空见惯。分布式版本控制系统(如Git)使这一切成为可能 - 从创建应用一直到添加、测试和发布新功能。
本指南并非Git的完整参考,而是创建和使用存储库的概述。因此,它假定您的系统上安装了该实用程序,并且您使用的是基于 Unix 的操作系统。如果您使用的是 Windows,Git命令是相同的,您只需要修改一些示例。
Git 介绍
直到 21 世纪初,软件开发人员还习惯于人与人之间分享他们的工作。随着越来越多的人参与同一个项目,这种方法变得耗时、容易出错,而且效率低下。版本控制系统是一套帮助团队共享文件并跟踪随时间变化的软件工具,它是为了满足这些需求而诞生的。
2002 年,Linux 内核社区率先采用了名为 BitKeeper 的版本控制系统。后来,Linus Torvalds 设计了Git,并在双方就许可条款发生公开冲突后于 2005 年 5 月推出。两个月后,一位名叫 Junio Hamano 的日本软件工程师被任命为维护者,他至今仍担任这一职务。
在我们进一步探讨之前,有必要先定义一些我们稍后会遇到的常用术语:
不要将基于 Web 的解决方案(例如GitHub、Bitbucket或GitLab )与Git本身混淆。这些工具仅提供在云中存储代码的空间以及执行多项操作的友好界面。在本指南中,我们将使用 GitHub,但如果您选择其他解决方案,则过程非常相似。
存储库是包含项目文件和子目录的文件夹。存储库可以是公共的,也可以是私有的,具体取决于谁有权访问(分别是任何人或仅限团队成员)。
分支是一条单独的开发路径(位于同一存储库中),通常用于在不干扰主项目的情况下开发新功能。代码经过审查和测试后,存储库管理员可以将更改合并到主分支中。
提交是存储库在某一时间点的快照。它允许用户添加评论并向其他人征求反馈。使用其哈希,可以根据需要轻松返回项目的先前状态。在提交文件和目录之前,我们需要指示Git跟踪它们。我们通常将此步骤简称为添加或暂存文件。
拉取请求是一种在将最近的更改纳入主要开发路径之前通知其他开发人员并讨论这些更改的方法。
分支是基于给定存储库的独立项目。与分支不同,它不是分支本地的,但也可以通过适当的拉取请求合并到分支中。
.gitignore文件可用于指示哪些本地内容不应提交到存储库。这对于避免在基于 Web 的解决方案中推送临时文件或暴露敏感信息(例如密码、SSH 或 API 密钥以及信用卡号)特别有用。
考虑到这一点,让我们学习如何使用Git并利用 GitHub 进行软件开发项目。虽然简单,但以下示例将帮助我们说明这些实用程序的基础知识。
创建存储库
首先,我们需要创建一个单独的目录,然后在其上初始化Git:
mkdir learn-git
cd learn-git
git init .
如图 1 所示,最后一条命令自动将我们置于 master 分支中,并生成一个名为.git的隐藏子目录。此文件夹包含允许Git管理存储库的所有文件和目录。
此时,我们有一个本地工作存储库,但尚未添加或提交任何文件。在此之前,我们将按照以下步骤在 GitHub 中创建一个空的远程存储库,我们将在其中推送代码。
- 单击右上角的加号并选择新建存储库,如图 2 所示:
- 输入存储库名称、可选描述,然后选择“公共”,如图 3 所示。此时不要使用 README 初始化存储库或添加.gitignore文件,因为我们稍后会执行这些操作 - 以及许可证。最后,单击“创建存储库”。
- 复制远程存储库 URL,并记下建议的命令,通过命令行将本地存储库推送到 GitHub,但不要运行它们。图 4 显示了我们案例中的这一步。
我们现在准备开始将文件添加到我们的暂存区并提交它们。
我们的第一个承诺
为了进行此测试,我们将创建一个名为disk_info.py的简短 Python 文件,其内容如下:
import shutil
def disk_percent_usage(directory):
'''
Return percent usage of disk where directory resides
'''
disk_info = shutil.disk_usage(directory)
return round(disk_info.used * 100 / disk_info.total, 2)
当使用此模块时,它会被编译为字节码,保存在扩展名为.pyc的文件中,通常位于同一目录或名为_ pycache _的子目录中。无论如何,我们当然希望将disk_info.py包含在我们的存储库中,但不包含关联的.pyc文件 - 这就是.gitignore发挥作用的地方。
为了避免跟踪字节码文件,我们可以向.gitignore添加一行,如下所示:
echo "*.pyc*" >> .gitignore
这样,让我们将两个文件(disk_info.py和.gitignore )添加到暂存区。图 5 显示了此步骤前后git status输出的差异。
git add disk_info.py .gitignore
下一步是将文件提交到存储库。-m选项允许包含一条消息来描述该操作。
git commit -m "Initial commit for Pluralsight guide"
在文件按照上述说明提交之前,它们不是存储库的一部分,尽管它们位于初始化的同一目录中。
最后,将本地存储库推送到 GitHub。请注意,系统将提示您输入凭据,如图 6 所示:
git remote add origin https://github.com/gacanepa/learn-git.git
git push -u origin master
如果我们现在浏览我们的 GitHub 存储库,我们应该会看到如图 7 所示的文件。提交哈希用红色矩形括起来,应该与之前git commit返回的哈希相同。
您始终可以通过该提交的 URL 查看该提交中引入的更改。在上面的示例中,它是https://github.com/gacanepa/learn-git/commit/1cbe0f3 。此外,完整的提交列表(包括消息、日期、哈希值以及负责每项更改的用户帐户)可通过git log获得。
分支代码
到目前为止,我们只使用了master分支,这是我们可用于生产的程序所在的分支。如果我们想添加新功能,我们应该考虑创建一个名为development的单独分支,尽管你也可以选择其他名称,然后在那里进行更改以开始。
git checkout -b development
上述命令不仅创建了分支,还将我们切换到该分支,如图 8 所示:
我们现在可以打开文本编辑器并创建一个名为system_info.py的新文件,其中包含以下行:
import platform
def kernel_info():
'''
Return Linux kernel information
'''
kernel_info = platform.uname()
return {'release': kernel_info.release, 'version': kernel_info.version}
接下来,我们将继续暂存文件、提交更改并将其推送到远程存储库。
git add system_info.py
git commit -m "Added function to retrieve kernel information"
git push -u origin development
要在 GitHub 中切换分支,我们可以使用如图 9 所示的下拉列表。如果我们选择development,我们应该会看到刚刚添加的文件。此外,我们可以比较分支并创建一个拉取请求以将development合并到master中,但我们稍后再讨论。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~