在【尚硅谷】Git与GitHub基础全套完整版教程-笔记2中介绍了git的分支管理和Git的基本原理(保存机制和分支机制)等,分支是Git中十分重要的内容,接下来具体看看如何在实际操作中管理自己的远程库,以GitHub操作为例。
目录
6.10 SSH 登录记录用户(如果http地址不能记录登录用户)
6 GitHub
6.1 账号信息
之前讲解了git本地操作,接下来看看如何远程操作。注册GitHub时先要有一个邮箱(最好是不用163邮箱,可能收不到邮件)。在首页就可以进行注册。
GitHub 首页就是注册页面:https://github.com/
岳不群 | Email 地址:atguigu2018ybuq@aliyun.com GitHub 账号:atguigu2018ybuq |
令狐冲 | Email 地址:atguigu2018lhuc@aliyun.com GitHub 账号:atguigu2018lhuc |
东方不败 | Email 地址:atguigu2018east@aliyun.com GitHub 账号:atguigu2018east |
6.1.1 修改GitHub账号头像
找到GitHub页面右上角头像,点头像右边的三角。
点击Your profile,点左上角头像,然后点右上角头像位置的Edit,点击Upload a photo,在本地文件中选择自己的头像。
6.1.2 本地库和远程库交互方式回顾
6.1.3 初始化新的本地库
为了测试远程交互初始化新的本地库,使用git init初始化,实际操作代码如下:
$cd .. //返回上一级目录
$mkdir huashan //创建新目录
$cd huashan/ //进入目录
$git init //初始化
$vim huashanjianfa.txt //新建文件
$git add huashanjianfa.txt
$git commit -m "test github" huashanjianfa.txt
6.2 创建远程库
远程库不一定和本地库一个名字,但是一个名字方便识别。登录GitHub。(岳不群账号)
第一次创建需要邮箱验证。
Owner是仓库的所有者。Repository name是仓库名。Private私有库是收费的。上码云(https://gitee.com)个人使用时免费的,不管是私有还是共有的。
6.3 创建远程库地址别名
本地push到远程必须知道远程库的位置,回到GitHub,复制下图的远程地址。先看http形式,不看ssh。
实际操作代码:
$git remote -v //没有任何提示
$git remote add origin [刚刚复制的http] https://github.com/atguigu2018ybuq/huashan.git
一般格式为:
git remote -v //查看当前所有远程地址别名
git remote add [别名origin] [远程地址]
6.4 推送操作
一般格式:git push [远程库别名] [分支名]
实际操作代码:
$git push origin master /*目前只有master分支,回车可能需要等待一会,弹出对话框,接着输入用户和密码
//此时在GitHub页面刷新一下,能看到内容
结果:
6.5 克隆操作
一般命令为: git clone [远程地址]
实际操作:
$cd //离开huashan这个目录,不能在岳不群的文件夹下
$mkdir huashan_lhuc //新建令狐冲的文件夹
$cd huashan_lhuc //进入令狐冲的目录
$git clone [复制的远程地址]https://github.com/atguigu2018ybuq/huashan.git
成功:
$ll //本地有了huashan目录
$cd huashan/
$ll //可以看到huashanjianfa.txt
$ls -lA //还有.git目录这个隐藏文件,代表我们不需要初始化了
$git remote -v
//origin https://github.com/atguigu2018ybuq/huashan.git (fetch)
//origin https://github.com/atguigu2018ybuq/huashan.git (push)
克隆的三个效果:
(1)完整的把远程库下载到本地
(2)创建 origin 远程地址别名 (git remote -v查看远程库别名)
(3)初始化本地库(就是git init)
6.6 团队成员邀请(邀请用户才能提交)-邀请令狐冲加入
$vim huashanjianfa.txt //在本地的令狐冲文件夹下修改文件
$git add huashanjianfa.txt
$git commit -m "test push" huashanjianfa.txt
//目前令狐冲暂时还不可以把修改推送到远程,没有权限
$git push origin master //输入令狐冲账号和密码
//error:403
岳不群把令狐冲加入团队
打开GitHub远程仓库。
点击Settings,点击Manage access中的Add people。
输入邀请人的GitHub账号,点Select a collaborator above。
跳转界面之后点Copy invite link,用邮箱(微信、qq等)把复制的东西发送给令狐冲。
“岳不群”其他方式把邀请链接发送给“令狐冲”,“令狐冲”登录自己的 GitHub 账号,访问邀请链接。
点击Accept invitation,这样令狐冲就变成了远程项目的团队成员,然后在执行推送。
$git push origin master //再次推送(没有提示输入令狐冲账号和密码),成功
注意一个小细节:推送了第一次在此推送不要输入用户名,git 本身不具备记录功能,Windows中凭据管理器记录用户名和密码,通过“控制面板-用户账户-凭据管理器”,Windows凭据,“普通凭据”中记录了GitHub的密码。想要切换别的账号可以先删掉这里保存的密码。
如果想切换用户,需要先删除记录。
6.7 远程库修改的拉取
一般格式:
git fetch [远程库地址别名origin] [远程分支名master] /*抓取下来
git checkout origin/master /*切换到链接地址(别名)的master(可查看抓取下来内容)
git checkout master /*切换回master分支
git merge [远程库地址别名origin/master远程分支名] /*合并
或者直接一行代码解决(pull=fetch+merge):
git pull [远程库地址别名] [远程分支名] /*等于上面步骤
实际操作:
$pwd //现在是在令狐冲的目录下
$cd ../../huashan //退出来之后再进入岳不群的huashan目录
$cat huashanjianfa.txt
//华山剑法,天下第一! //此时因为令狐冲的pash,远程库有两行
$git fetch origin master //抓取远程库的master,不需要验证身份(只读操作)
$cat huashanjianfa.txt
//华山剑法,天下第一! //本地的内容并没有变,fetch只是下载到本地,并没有修改工作区。
$git checkout origin/master //查看下载的东西在哪,长什么样子
$cat huashanjianfa.txt
//华山剑法,天下第一!
//我是令狐冲,我比岳不群还厉害!
$git checkout master //切换回去
$cat huashanjianfa.txt
//华山剑法,天下第一!
//fetch有一个好处:当你操作比较复杂时,暂时先不对本地做合并,等查看从远程库下载的东西之后再去合并文件。
$git merge origin/master
$cat huashanjianfa.txt //合并完之后查看文件,本地有新的内容。
//华山剑法,天下第一!
//我是令狐冲,我比岳不群还厉害!
6.8 解决协同开发时的冲突
但凡是团队协作就一定会发生冲突。两个人修改了同一个文件的同一位置,只有先推送的人可以直接推送。
具体操作如下:
$vim huashanjianfa.txt //在岳不群文件夹下修改文件
$git commit -m "edit by ybuq" huashanjianfa.txt //提交到本地库
//删除电脑保存的账号和密码(令狐冲)
$git push origin master //以岳不群的身份 #需要输入岳不群的账号密码
//到GitHub的远程库刷新,看到内容被岳不群修改
//删除电脑保存的账号和密码(岳不群)
$cd ..
$cd huashan_lhuc/ //换成令狐冲去登录
$vim huashanjianfa.txt //在令狐冲文件夹下修改文件,也是这行。(此时令狐冲不知道岳不群修改了远程库,还是在旧版本在修改)
$git commit -m "test conflict" huashanjianfa.txt //提交到本地库
$git push origin master //令狐冲账号
//error
$git pull origin master //必须先拿到远程库的修改
$vim huashanjianfa.txt (merging状态) //查看文件,可以看到产生冲突的位置
//删除=====,修改文件
$git add huashanjianfa.txt
$git commit -m "resolve conflict" huashanjianfa.txt //注意这里解决冲突的时候是不带文件名的提交
$git status
$git push origin master
//到GitHub的远程库刷新,看到内容被岳不群和令狐冲修改
要点
如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。
pull拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
类比
债权人:老王
债务人:小刘
老王说:10 天后归还。小刘接受,双方达成一致。
老王媳妇说:5 天后归还。小刘不能接受。老王媳妇需要找老王确认后再执行。
6.9 跨团队协作操作演示
1(先复制当前库地址,发式给dfbb,然后用dfbb账号登录,访问这个地址)->然后Fork
正在fork的界面
fork 过来的仓库会多下面一行(forked from at...)说明fork来源。
2 dfbb(”东方不败”)本地修改,然后推送到远程 git push origin master
$cd..
$cd..
$mkdir huashan_east //新建东方不败的文件夹
$cd huashan_east/
$git clone https://github.com/atguigu2018east/hanshan.txt //注意是东方不败远程库的地址 clone是读操作,不需要登录
$ls -lA
$cd huashan/ //进入这个目录
$ls -lA //有.git文件,本地化也初始化好了
$vim huashanjianfa.txt //修改文件,增加新的内容,第5行
$git commit -m "kuihua" huashanjianfa.txt
$git push origin master //注意先删除window凭据,现在用东方不败的账号密码
//到GitHub东方不败的远程库刷新,看到内容被东方不败修改
3 dfbb在远程库中选择Pull Request
然后点击里面的New pull requset
然后点击 Create pull request
然后发送消息给fork的库(ybq(岳不群))
4 重新打开岳不群的GitHub仓库,接下来ybq操作
5 查看pull requests
5.1可以看到东方不败发过来的消息
5.2 对话 (这时还可以相互对话)
6 审核代码
合并代码 (回到对话Conversation->合并操作如图)
点击Merge pull request。
合并的时候填写相关信息,相当于commit时候的log。
然后点击Comfirm merge。
上面操作完了之后岳不群的远程库就有合并内容->然后->将远程库修改拉取到本地。
$cd huashan //切换到岳不群的文件夹
$git pull origin master //拉取到本地
$vim huashanjianfa.txt //能看到东方不败的修改
6.10 SSH 登录记录用户(如果http地址不能记录登录用户)
SSH只能被一个账号设置。
$cd ~ //进入用户的家目录
$rm -r .ssh/ //删除之前创建的ssh目录
$ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com //生成这个目录,后面需要确认的一路回车
$cd .ssh //进入这个目录
$ll //生成id_rsa和id_rsa.pub文件
$ cat id_rsa.pub
复制 id_rsa.pub 文件内容,登录 GitHub,然后点击用户头像→Settings→SSH and GPG keys
→New SSH Key,然后到key中输入复制的密钥信息,Title:自定义输入标题。
$git remote -v //现在还是http形式
$git remote add origin_ssh [ssh地址]git@github.com:atguigu2018ybuq/huashan.git //需要新建一个远程别名
$vim huashanjianfa.txt //修改文件
$git add huashanjianfa.txt
$git commit -m "test ssh login" huashanjianfa.txt
$git push origin_ssh master //往这个别名推送,输入yes确认,不用输入账号密码
总结一下上述的使用ssh操作过程:
①进入当前用户的家目录
$ cd ~
②删除.ssh 目录
$ rm -rvf .ssh
③运行命令生成.ssh 密钥目录
$ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com
[注意:这里-C 这个参数是大写的 C] 3.2后面直接回车(使用默认)
④进入.ssh 目录查看文件列表
$ cd .ssh
$ ls -lF
⑤查看 id_rsa.pub 文件内容
$ cat id_rsa.pub
⑥复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys
→New SSH Key,然后在key中输入复制的密钥信息。 Title:自定义输入标题。
⑦回到工作区,创建远程地址别名
git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git
⑧推送文件进行测试,输入yes确认
git push origin_ssh master
说明:记录学习笔记,如果错误欢迎指正!写文章不易,转载请联系我。