版本控制软件Git的使用(五)Github

Github

Github是最大的Git版本库托管商,平台上有着成千上万的开发者,涉及个人以及团体的项目,大量开源项目使用GIthub托管。最主要的是Github可以给用户提供免费的托管服务。
之前配置过这里就简单介绍下,首先打开Github官网httsp://github.com点击注册,需要用户名,邮箱和密码。然后配置本地SSH连接Github。前边使用过所以这里就简单说一下:鼠标右键Git Bash Here,需要配置ssh密钥,输入下面命令根据提示输入两次github账户密码,生成ssh密钥,没有修改路径情况下密钥保存在C:\Users\用户名.ssh。
ssh-keygen -t rsa -C "邮箱地址"生成SSH密钥
打开id_ras.pub文件,复制里面的内容。然后登陆GitHub,进入settings界面
在这里插入图片描述在这里插入图片描述

配置完ssh密钥后在Bash窗口中输入ssh -T git@github.com,验证是否配置成功,通过配置可以通过Git Bash访问GIthub中的仓库。
在这里插入图片描述

参与项目

拉取请求

当我们想要参与Github上某个项目,但是没有推送权限,这个时候可以对这个项目进行“Fork”(派生)。通过Fork在个人Github中创建一个完全属于自己的项目副本,然后对其有推送权限,通过创建拉取请求(Pull Request,简称PR)来将改动添加到原项目版本。*在我们创建拉取请求后,就会开启一个可供审查代码的板块,项目的拥有者和贡献者可以在此讨论相关修改,直到项目拥有者对其感到满意,并且认为这些修改可以合并到版本库中。
当我们对项目有的权限时候,可以推送分支到版本库,并在main分支提交一个拉取请求,并在此进行代码审查和讨论,不需要Fork。

完整流程

  1. Fork一个项目
  2. main/master分支创建一个新的分支
  3. 提交一些修改来改进项目
  4. 将这个分支推送到Github上
  5. 创建一个拉取请求
  6. 在开启的项目审查代码板块中讨论,继续改进等
  7. 项目的拥有者将修改合并到项目原版本中并关闭拉取请求
  8. 将更新后的的版本同步到自己Github的Fork中

拉取制成补丁

当我们的拉取请求过时或其他原因不能干净地合并,需要进行修复才能让项目拥有者对其进行合并。有两种方法进行修复,一种可以将分支变量到目标分支中,但是上一节中我们讲到变量无法在版本历史中留下痕迹,会造成混乱。另一种方法是使用git remote add 仓库名 URL将远程项目仓库添加到本地,从远端抓取内容,合并主分支内容到本地我们修改的分支中,修复所哟问题然后重新推送到拉取请求使用的分支。

完整流程

  1. 将原版本库添加到本地
  2. 从远成仓库抓取最新内容,这里注意使用git fetch不自动合并
  3. 将仓库主分支内容合并到我们本地分支
  4. 修复产生的冲突
  5. 推送回同一个分支

详细内容参考Git官网-Github对项目做出贡献

维护项目

新建仓库

打开Github然后点击头像左侧+New repository创建新仓库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述托管在Github上的公开(public)项目,可以通过HTTPS或SSH访问,HTTPS:https://github.com/username/projectname,SSH:git@github.com:username/projectname,因为使用协议不同用户访问的权限也不一样使用SSH协议的时候用户必须有一个账号而且上传SSH密钥才能访问项目。

添加合作者

如果项目想要其他也参与,他们提交代码需要权限,在设置中添加为合作者,然后他们对项目和Git版本库都有读写的权限。
在这里插入图片描述在这里插入图片描述

管理合并请求

和并请求可以来自Fork的一个分支,或者同一仓库的另一个分支。唯一的区别是fork过来的通常对我们的项目没有权限的,而内部推送通常都可以互相访问。
设置邮件通知,有人对我们项目修改然后发了一个和并请求,会收到平台发送关于和并请求的提醒邮件。
在这里插入图片描述给我们所发送的邮件中包含:修改的统计结果,包含修改的文件以及改变了多少列表。还包含进行和并请求操作的链接。或者把代码拉取下来在本地进行合并,使用git pull url patch-l合并远程分支。或者也可以将fork地址添加为一个remote进行抓取和合并。Github网站上还有一个Merge按钮,它会进行"non-fast-forward’合并,并产生一个合并提交记录。

和并多个请求

当我们正在处理多个和并请求的时候,不可能像上面的将他们全部拉取下来或者添加到remote中去。实际上Github在服务器上把和并请求分支视为一种“假分支”,默认情况下克隆到本地的时候不会克隆他们,但还是隐式存在,通过git ls-remote 原项目仓库地址/远程版本库在本地名称就可以看到所有分支,标签以及其他引用。当项目有和并请求的时候,会看到refs/pull开头的引用。他们实际上是分支,但因为他们不在refs/heads中,所以正常情况下克隆的时候不会抓取下来。
每个合并请求有两个引用——其中以 /head 结尾的引用指向的提交记录与合并请求分支中的最后一个提交记录是同一个。 所以如果有人在我们的版本库中开启了一个合并请求,他们的分支叫做 bug-fix, 指向 a5a775 这个提交记录,那么在 我们的 版本库中我们没有 bug-fix 分支(因为那是在他们的 fork 中), 但我们 可以 有一个 pull/<pr#>/head 指向 a5a775。 这意味着我们可以很容易地拉取每一个合并请求分支而不用添加一堆远程仓库。

$ git fetch origin refs/pull/958/head
From https://github.com/libgit2/libgit2
 * branch            refs/pull/958/head -> FETCH_HEAD

连接到 origin 这个 remote,下载名字为 refs/pull/958/head 的引用,燃火把指针指向.git/FeTCH_HEAD下面想要的提交记录,然后使用git merge FETCH_HEAD合并到我们的分支中。
滑油一种方法合并所有的请求,并且连接到远程仓库的时候保持更新。打开.git/config查找origin远程仓库。

    url = https://github.com/libgit2/libgit2
    fetch = +refs/heads/*:refs/remotes/origin/*

以 fetch = 开头的行是一个 “refspec.” 它是一种把 remote 的名称映射到你本地 .git 目录的方法。 这一条(就是上面的这一条)告诉 Git,“remote 上refs/heads下面的内容在我本地版本库中都放在refs/remotes/origin 。” 你可以把这一段修改一下,添加另一个 refspec:

[remote "origin"]
    url = https://github.com/libgit2/libgit2.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

添加的这行告诉Git所有像refs/pull/*/head的引用应该在本地版本库像refs/remotes/origin/pr/*一样存储在。保存完后,使用git fetch所有和并请求在本地像分支一样都展现,但他们是只读的,执行抓取他们都会更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值