文章目录
一、前言
在上一篇文章中已经对Git相关命令的介绍与使用进行了讲解,下面正式进入到使用GitHub进行代码托管的相关操作的讲解。
二、使用GitHub进行代码托管的相关操作
1、推送本地仓库内容至远程仓库
1.1、登录GitHub,点击右上角的"+",选择New repository
,创建一个新的仓库
1.2、进入到新建仓库页面,填写仓库的相关信息,点击Create repository
按钮,创建远程仓库
1.3、创建好远程仓库之后,会进入到GitHub的操作提示页面,同时页面也会给出远程库的地址(有Https和SSH两种类型的地址)
1.4、在我们本地创建一个名为git-test
的文件夹,并初始化使其成为Git
本地仓库 (注意:本地仓库名称可以与远程仓库名称不一致,这里只是为了好区分,所以才命名一致)
1.5、新建一个data.txt
文件,并在文件中添加一些内容,然后提交至本地仓库
1.6、在本地创建远程仓库地址的别名,由于远程仓库的地址太长,写起来太麻烦,所以我们可以为远程仓库地址设置一个别名,之后就可以直接使用别名来替代远程仓库地址
//查看地址映射
git remote -v
//添加地址别名映射
git remote add 别名 远程仓库地址
1.6.1、点击复制按钮,复制远程仓库地址
1.6.2、添加远程仓库地址别名映射
可以看到有两个相同的远程仓库地址别名映射,只是括号后面的内容不一致
-
origin https://github.com/lemon-wubin/git-test.git (fetch)
:表示用来拉取远程仓库的内容到本地仓库时使用的地址 -
origin https://github.com/lemon-wubin/git-test.git (push)
:表示用来推送本地仓库内容到远程仓库时使用的地址
1.7、推送本地仓库内容至远程仓库
git push 远程仓库地址别名 本地仓库分支名
1.7.1、执行推送命令后,需要输入GitHub的用户名和密码进行验证,才能推送至远程仓库
1.7.2、推送成功,并查看GitHub远程仓库
2、克隆远程仓库内容至本地仓库
2.1、在我们本地另外创建一个名为git-clone
的文件夹,并进入到git-clone
文件夹下
2.2、复制远程仓库地址
2.3、克隆远程仓库内容至本地
git clone 远程仓库地址
可以看到,我们把远程仓库中的内容克隆到了我们本地,同时克隆操作也帮我们初始化了本地仓库
和 添加了远程仓库地址别名映射
3、邀请他人加入项目团队
3.1、我们修改本地git-clone/git-test
仓库下的data.txt
文件,在data.txt
文件中添加一行新的内容,并提交到本地仓库
3.2、我们使用另外一个名为lemon-jack
的GitHub
账号进行远程提交
由于在演示推送本地仓库内容至远程仓库时,我们使用了名为lemon-wubin
的GitHub
账号登录并成功推送至远程仓库,这时Windows10操作系统
会自动帮我们记住GitHub
的用户名和密码,下次再推送时就会自动登录,而不需要我们再次输入GitHub
的用户名和密码,为了演示用另外一个名为lemon-jack
的GitHub
账号进行远程提交操作,我们需要删除Windows10操作系统
中凭据管理器
中的GitHub
的账号信息,重新使用其他的GitHub
账号来进行登录
3.2.1、鼠标右键此电脑
或者我的电脑
,选择属性(R)
进入到Windows10
系统页面,并点击左上角的控制面板主页
,进入到控制面板页面
3.2.2、进入到控制面板页面之后,点击右上角的类别选项,将类别
切换成小图标
3.2.3、以小图标的方式进行查看之后,找到凭据管理器
并点击,进入到凭据管理器页面
3.2.4、选择Windows 凭据
,找到GitHub
账号信息凭据,并点击删除即可
3.2.5、使用另外一个名为lemon-jack
的GitHub
账号进行远程提交
3.2.6、提示名为lemon-jack
的GitHub
账号,不能访问我们的远程仓库地址
这是因为其他人在未被加入到项目团队之前,是无法推送本地仓库内容至远程仓库,因为远程仓库是仓库拥有者创建的,所以其他人没有相关的权限,但仓库拥有者可以邀请其他人加入到项目团队,这样其他人就拥有了推送操作的权限。接下来我们来操作如何邀请他人加入项目团队。
3.3、在我们的git-test
远程仓库页面中,点击Settings
选项
3.4、点击Collaborators
选项,输入被邀请人的GitHub账号的用户名,最后点击Add collaborator
按钮
3.5、点击Copy invite link
按钮,复制邀请链接,然后发送给被邀请人 (其实在我们上一步点击Add collaborator
按钮时,GitHub
会自动把邀请链接已邮箱的形式发送给被邀请人)
3.6、被邀请人登录到自己的GitHub
账号后,访问邀请人 (即:远程仓库拥有者) 发送过来的邀请链接,然后点击Accept invitation
按钮,接收邀请即可
3.7、我们再次使用名为lemon-jack
的GitHub
账号,进行推送操作,推送成功
4、拉取远程仓库修改的内容
//pull(拉取)操作其实是fetch(抓取)和merge(合并)两个操作的合并,先fetch再merge
git pull 远程仓库地址别名 远程仓库分支名
等价于
git fetch 远程仓库别名 远程仓库分支名
git merge 远程仓库别名/远程仓库分支名 (需要先切换到被合并的分支)
4.1、上一步我们已经把修改的内容推送到了远程仓库,接下来我们来拉取远程仓库修改的内容,此时我们所在位置是git-clone/git-test
仓库下,我们先进入到另外一个git-test
仓库下
4.2、拉取远程仓库修改的内容
5、解决协同开发时产生的冲突
接下来我们就来模拟在协同开发时,如何解决产生的冲突
5.1、当前我们处于git-test
仓库下,我们修改仓库下的data.txt文件
,并提交到本地仓库
5.2、使用名为lemon-wubin
的GitHub
账号,进行推送操作 (记得删除凭据管理器
中的GitHub
的账号信息),推送成功
5.3、此时我们所在位置是git-test
仓库下,我们先进入到git-clone/git-test
仓库下,修改仓库下的data.txt文件
,并提交到本地仓库
5.3、使用名为lemon-jack
的GitHub
账号,进行推送操作 (记得删除凭据管理器
中的GitHub
的账号信息)
可以看到一条提示信息error: failed to push some refs to 'https://github.com/lemon-wubin/git-test.git'
,我们推送至远程仓库失败了,这是因为在lemon-jack
用户之前,lemon-wubin
用户已经把他的修改提交到了远程仓库中,而lemon-jack
用户所进行的一系类操作,并不是基于GitHub
远程仓库的最新版本所做修改的,所以GitHub
禁止我们推送,所以我们需要先拉取远程仓库最新版本的内容到本地,然后再做相应的修改,最后推送至远程仓库。
5.4、拉取远程仓库最新版本的内容到本地
从上图可以看到一条提示信息Automatic merge failed; fix conflicts and then commit the result.
,系统告诉我们拉取远程仓库最新版本的内容失败了,原因是lemon-jack
用户与lemon-wubin
用户对data.txt
文件的同一处地方都做了修改,Git拿不定主意。
5.4、手动解决冲突,使用Vim
编辑器打开产生冲突的data.txt
文件,显示的内容如下所示:
<<<<<<< HEAD
与=======
之间的内容是我们当前本地仓库的内容,而=======
与>>>>>>> 60978c99fdfbd50efe0de22f351ea1c01c71c519
之间的内容是远程仓库的内容,我们将data.txt
文件的内容修改成我们想要的内容,同时删除<<<<<<< HEAD
、=======
和 >>>>>>> 60978c99fdfbd50efe0de22f351ea1c01c71c519
,修改完成之后的内容为:
5.5、重新将data.txt
文件提交到暂存区,然后提交到本地仓库中
这样,冲突就被我们给解决了,不过需要注意的是,以往我们在进行提交操作时,都习惯在提交命令后带上文件名,即:git commit -m "提交信息" filename
,但是在进行冲突的提交时,是不能够带上文件名的,即:git commit -m "提交信息"
,不然会提示:fatal:cannot do a partial commit during a merge.
的错误信息,这点需要特别注意。
5.5、最后再次使用名为lemon-jack
的GitHub
账号,进行推送操作 (记得删除凭据管理器
中的GitHub
的账号信息),推送成功
6、跨团队协作开发
在实际的开发项目中,有些项目功能公司团队内部人员无法实现,但是公司外的团队成员能够实现这一功能,这时我们就需要跨团队协作开发,接下来我们就来模拟跨团队协作开发
6.1、复制远程项目地址,发送给公司外名为lemon-john
的团队成员
6.2、lemon-john
成员登录到GitHub
,并访问该远程项目地址,然后点击Fork
按钮(是以lemon-john
成员的身份点击Fork
按钮),拷贝一份到自己的GitHub
远程仓库下
6.3、进入到Forking
中,可以看到此时的仓库拥有者为lemon-john
,同时指出了fork 来源自lemon-wubin/git-test
6.4、复制lemon-john
成员fork
下来的远程仓库地址
6.5、在本地新建一个git-team
的文件夹,并克隆lemon-john
成员fork
下来的远程仓库内容到git-team
文件夹下
6.6、进入到git-team/git-test
目录下,修改data.txt
文件,并提交到本地仓库
6.7、使用名为lemon-john
的GitHub
账号,推送到lemon-john
用户的GitHub
远程仓库中
6.8、点击Pull requests
选项,然后再点击New pull request
按钮,发起Pull requests
请求
6.9、点击Create pull request
按钮,同时可以看到红色方框中,文件内容的改动情况
6.10、发起Pull requests
请求通知,输入请求通知的标题和正文内容,最后点击Create pull request
按钮
6.11、使用名为lemon-wubin
的公司团队内部人员登录到GitHub
,点击Pull requests
选项,查看lemon-john
成员发起的Pull requests
请求通知
6.12、同时lemon-wubin
成员也可以回复lemon-john
成员发送过来的Pull requests
请求通知消息
6.14、审核lemon-john
成员提交和修改的内容
点击Commits
选项,查看提交了哪些内容
点击Files changed
选项,查看具体修改的内容
6.15、审核通过之后,点击Conversation
选项,然后点击Merge pull request
按钮,进行合并操作
6.16、添加合并操作日志,点击Confirm merge
按钮进行合并
6.17、此时我们所在位置是git-team/git-test
仓库下,我们进入到git-test
仓库下,拉取远程仓库合并后的最新内容
7、GitHub设置SSH Key,实现SSH免密登录
在使用远程仓库的HTTPS
地址进行推送操作时,由于Windows10系统
的凭据管理器
会自动帮我们记录GitHub
的账号信息,所以每次在进行远程推送操作时,我们不需要输入GitHub
账号的用户名和密码 (首次推送时,我们需要输入GitHub
账号的用户名和密码),但是其他系统有可能没有凭据管理器
,所以每次我们使用远程仓库的HTTPS
地址进行推送操作时,都需要输入GitHub
账号的用户名和密码,但是我们可以为远程仓库的SSH
地址设置SSH Key
,实现免密登录,接下来我们就来为GitHub设置SSH Key,实现SSH免密登录
7.1、什么是密钥
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥又分为对称密钥与非对称密钥,对称密钥加密又称私钥加密或会话密钥加密算法,非对称密钥加密系统又称公钥密钥加密。
7.2、设置SSH Key
7.2.1、首先进入到用户的家目录 (即:~) 下,并删除.ssh/
目录
7.2.2、使用如下命令生成SSH Key
,在生成SSH Key
的过程中,需要我们确认相关信息,直接一路按下回车键即可
ssh-keygen -t rsa -C "GitHub邮箱地址"
7.2.3、进入到.ssh/
目录下,查看生成的id_rsa.pub
文件 (公钥) 和 id_rsa
文件 (私钥)
7.2.3、查看生成的id_rsa.pub
文件 (公钥)内容,并复制id_rsa.pub
文件中的内容,注意
:复制id_rsa.pub
文件中的内容时,内容开头或者末尾不要包含多余的空格
7.2.4、登录到GitHub
上,点击右上角的头像,并点击Settings
选项,进入到设置页面
7.2.5、进入到设置页面之后,点击SSH and GPG keys
选项,然后点击New SSH key
按钮,添加SSH key
7.2.6、填写标题,并把之前复制id_rsa.pub
文件中的内容粘贴到Key文本框
中,然后点击Add SSH key
按钮
7.2.7、输入GitHub
账号的密码,并点击Confirm password
按钮
7.2.8、添加SSH key
成功
7.2.9、测试SSH key
是否配置成功,我们在Git
终端输入ssh -T [email protected]
命令,这时它会问我们是否确定要继续连接吗,这是我们输入yes
,表示确定继续连接
当看到有Hi lemon-wubin! You've successfully authenticated, but GitHub does not provide shell access.
的提示信息时,则表示GitHub
设置SSH Key
成功。如果配置失败,请使用ssh -vT [email protected]
命令查看具体出错信息,然后排查问题。
Git入门与使用系列文章列表:
Git入门与使用 (一) Git介绍与安装
Git入门与使用 (二) Git相关命令的介绍与使用
Git入门与使用 (三) 使用GitHub进行代码托管的相关操作
Git入门与使用 (四) IDEA集成Git,并通过图形化界面进行Git相关操作
Git入门与使用 (五) GitLab介绍与安装
如果有遇到不懂或者有问题时,可以扫描下方二维码,欢迎进群交流与分享,希望能够跟大家交流学习!