Git 学习笔记:6 GitHub

账户的 创建和配置

GitHub是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心。大部分 Git 版本库都托管在 GitHub 上,很多开源项目使用 GitHub 实现 GIt 托管、问题追踪、代码审查以及其它事情。所以,尽管这不是 Git 开源项目的直接部分,但如果想要 专业地使用 Git ,你将不可避免地与 GitHub 打交道,所以这依然是一个绝好的学习机会。

你所需要做的第一件事就是创建一个免费账户。直接访问 https://github.com,选择一个未被占用的用户名,提供一个电子邮件地址和密码,点击写着 “Sign up for GitHub” 的绿色大按钮即可。

在这里插入图片描述
你将看到的下一个页面是升级计划的价格页面,目前我们可以直接忽略这个页面。GitHub 会给你提供的电子邮件发送一封邮件。尽快到你的邮箱进行验证,这是非常重要的。

注意:GitHub 为免费账户提供了完整功能,限制是你的项目都将被完全公开(每个人都具有读权限)。GitHub 的付费计划可以让你拥有一定数目的私有项目。

SSH访问

现在,你完全可以使用 https:// 协议,通过你刚刚创建的用户名和密码访问 Git 版本库。但是,如果仅仅克隆共有项目,你甚至不需要注册——刚刚我们创建的账户是为了以后fork 其他项目,以及推送我们自己的修改。

如果你习惯使用SSH 远程,你需要配置一个公钥。(如果你没有公钥,请参考 生成 SSH 公钥)使用窗口右上角的链接打开你的账户设置:

在这里插入图片描述
然后在左侧选择 “SSH keys” 部分。

在这里插入图片描述
在这个页面点击 “Add an SSH key”按钮,给你的公钥起一个名字,将你的 ~/.ssh/id_rsa.pub(或者自定义的其他名字)公钥文件的内容粘贴到文本区,然后点击“Add key”

注意:确保给你的SSH密钥起一个能够记得住的名字。你可以为每一个密钥起名字(例如,我的笔记本电脑或者 工作账户等),一遍以后需要吊销密钥时能够方便区分。

头像

下一步,如果愿意的话,你可以将生成的头像换成你喜欢的图片。首先,来到“Profile”标签页(在 “SSH Keys”标签页上方),点击“upload new picture”。

在这里插入图片描述

我们选择了本地磁盘上的一个 Git 图标,上传之后还可以对其进行裁剪。

在这里插入图片描述
现在,在网站任意由你参与的位置,人们都可以在你的用户名旁边看到你的头像。

如果你已经把头像上传到了流行的Gravatar 托管服务(Wordpress账户经常使用),默认就会使用这个头像,因此,见你就不需要进行这一步骤了。

邮件地址

GitHub 使用用户邮件地址区分 Git 提交。如果你在自己的提交中使用了多个邮件地址,希望 Git Hub 可以正确地将它们连接起来,你需要在管理页面的Emails 部分添加你拥有的所有邮箱地址。

在这里插入图片描述
在 添加邮件地址 中我们可以看到一些不同的状态。顶部的地址是通过验证的,并且被设置为主要地址,这意味着该地址会接收到所有的通知和回复。第二个地址是通过验证的,如果 愿意的话,可以将其设置为主要地址。最后一个地址是未通过验证的,这意味着你不能将其设置为主要地址。当 GitHub 发现任意版本库中的任意提交信息包含了这些地址,它就会将其链接到你的账户。

两步验证

最后,为了额外的安全性,你绝对应当设置两步验证,简写为 “2FA”。两步验证是一种用于降低因你的密码被盗而带来的账户风险的验证机制,现在已经变得越来越流行。开启两步验证,GitHub会要求你用两种不同的验证方法,这样,即使其中一个被攻破,攻击者也不能访问你的账户。

你可以在 Account setting 页面的 Security 标签页中找到 Two-factor Authentication 设置。

在这里插入图片描述

点击 Set up two-factor authentication 按钮,会跳转到设置页面。该页面允许你选择是要在登录时使用手机app 生成辅助码,还是要GitHub 通过 SMS 发送辅助码。

选择合适的方法后,按照提示步骤设置 2FA , 你的账户会变得安全,每次登录 GitHub 时都需要提供除密码外的辅助码。

对项目做贡献

账户建立好了,现在我们来了解一些能帮助你对现有的项目做出贡献的知识。

派生(fork)项目

如果你想要参与某个项目,但是并没有推送权限,这时可以对这个项目进行“派生”。派生的意思是指,GitHub 将在你的空间中创建一个完全属于你的项目副本,且你对其具有推送权限。

注意:在以前,“fork”是一个贬义词,指的是某个人使开源项目向不同的方向发展,或者创建一个竞争项目,使得原项目的贡献者分裂。在GitHub,“fork”使的是你自己的空间中创建的项目副本,这个副本允许你以一种更开放对其进行修改。

通过这种方式,项目的管理者不在需要忙着把用户添加到贡献者列表并给予他们推送权限。人们合一派生这个项目,将修改推送到派生出的项目副本中,并通过创建合并请求(Pull Request)来让他们的改动进入原版本库,下文我们会详细说明。创建了合并请求后,就会开启一个可供审查代码的板块,项目的拥有者和贡献者可以在此讨论修改,直到此昂木拥有者对其感到满意,并且认为这些修改可以合并到版本库。

你可以通过点击项目页面右上角的“Fork”按钮,来派生这个项目。

在这里插入图片描述

稍等片刻,你将被转到新项目页面,该项目包含可写的代码副本。

GitHub 流程

GitHub 设计了一个以合并请求为中心的特殊合作流程。它基于我们在Git 分支上的特性分支中提到的工作流程。不管你是在一个紧密的团队中使用单独的版本库,或者使用许多的“Fork” 来为一个由陌生人组成的国际企业或网络做出贡献,这种合作流程都能应付。

流程通常如下:

  1. 从 master 分支中创建一个新分支
  2. 提交一些修改来改进项目
  3. 将这个分支推送到 GitHub 上
  4. 创建一个合并请求
  5. 讨论,根据实际情况继续修改
  6. 项目的拥有者合并或关闭你的合并请求

这基本和 集成管理者工作流 中的一体化管理流程差不多,但是团队可以使用 GItHub 提供的网页工具替代电子邮件来交流和审查修改。

现在我们来看一个使用这个流程的例子。

创建合并请求

Tony 在找一些能在他的Arduino 微控制器上运行的代码,他觉得 https://github.com/schacon/blink 中的代码不错。
在这里插入图片描述

但是有个问题,这个代码中的闪烁频率太高,我们觉得 3秒一次比 1秒一次更好一些。所以让我们来改进这个程序,并将修改后的代码提交给这个项目。

首先,单击 “Fork” 按钮来获得这个项目的副本。我们使用的用户名是 “Tonychacon”,所以这个项目副本的访问地址是: https://github.com/tonychacon/blink 。我们将它克隆到本地,创建一个分支,修改代码,最后将改动推送到 GitHub。

$ git clone https://github.com/tonychacon/blink (1)
Cloning into 'blink'...

$ cd blink
$ git checkout -b slow-blink (2)
Switched to a new branch 'slow-blink'

$ sed -i '' 's/1000/3000/' blink.ino (3)

$ git diff --word-diff (4)
diff --git a/blink.ino b/blink.ino
index 15b9911..a6cc5a5 100644
--- a/blink.ino
+++ b/blink.ino
@@ -18,7 +18,7 @@ void setup() {
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
}

$ git commit -a -m 'three seconds is better' (5)
[slow-blink 5ca509d] three seconds is better
 1 file changed, 2 insertions(+), 2 deletions(-)

$ git push origin slow-blink (6)
Username for 'https://github.com': tonychacon
Password for 'https://tonychacon@github.com':
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/tonychacon/blink
 * [new branch]      slow-blink -> slow-blink
  1. 将派生出的副本克隆到本地
  2. 创建出名称有意义的分支
  3. 修改代码
  4. 检查代码
  5. 将改动提交到分支中
  6. 将新分支推送到 GitHub 的副本中

现在到GitHub 上查看之前的项目副本,可以看到 GItHub 提示我们有新的分支,并且显示了一个大大的绿色按钮让我们可以检查我们的改动,并给源项目创建合并请求。

你也可以到 “Branches” 页面查看分支并创建合并请求:https://github.com/<用户名>/<项目名>/branches

在这里插入图片描述
如果你点击了那个绿色按钮,就会看到一个新页面,在这里我么可以对改动填写标题和描述,让项目的拥有者考虑一下我们的改动。通常花点时间来编写个清晰有用的描述是个不错的主意,这能让作者明白为什么这个改动可以给他的项目带来好处,并且他接受合并请求。

同时我们也能看到比主分支中所“领先”(ahead)的提交以及所有将会被合并的改动与之前代码的对比。

在这里插入图片描述
当你点击了 “Create pull request”(创建合并请求)的按钮后,这个项目的拥有者将会收到一条包含该改动和合并请求的链接和提醒。

注意:虽然合并请求通常是在贡献者准备好在公开项目中提交改动的时候提交,到那时也常被用在仍处于开发阶段的内部项目中。因为合并请求在提交后 依然可以加入新的改动,他也经常被用来建立团队合作的环境,而不只是在最终阶段使用。

利用合并请求

现在,项目的拥有者可以看到你的改动并合并它,拒绝它或者是发表评论。在这里我们就当作他喜欢这个点子,但是他想要让熄灭的时间比点亮的时间稍长一些。

接下来可能通过电子邮件进行互动,就像我们在 分支式 Git 中提到的工作流程那样,但是在 GitHub ,这些都在线上完成。项目的拥有者可以审查修改,只需要点击某一行,就可以对其发表评论。

在这里插入图片描述
当维护者发表评论后,提交合并请求的人,以及所有正在关注(Watching)这个版本库的用户都会收到通知。我们待会儿将会告诉你如何修改这项这项设置。现在如果 Tony 有开启电子邮件提醒,它将会收到这样的一封这样的邮件:

在这里插入图片描述

每个人都能在合并请求中发表评论。在 合并请求讨论页面 里我们可以看到项目拥有者对某行到吗发表评论,并在讨论区留下了一个普通评论。你可以看到被评论的代码也会在互动中显示出来。

在这里插入图片描述
现在贡献者可以看到如何做才能让他们的改动被接受。幸运的是,这也是一件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值