当前位置: 首页 > news >正文

Git 详细教程之四: Git 对 GitHub 的配置和基本操作

   本篇博客主要讲的是『Git 详细教程之四: Git 对 GitHub 的配置和基本操作』。如果您是第一次学习 Git ,请先阅读博主的前几篇文章:

  • Git 详细教程之一: Git 简介及其基本工作原理
  • Git 详细教程之二: Git 安装配置及其常用命令
  • Git 详细教程之三: Git 分支操作

一、团队协作模式

   团队协作模式一般分为两种:团队内协作以及跨团队协作

1.1 团队内协作

在这里插入图片描述

   团队内协作指的是团队内的成员对代码托管中心,也就是远程库都具有 克隆(clone)、推送(push)以及拉取(pull) 的权限,共同维护开发。


1.2 跨团队协作

在这里插入图片描述

   跨团队协作指的是,团队内的成员可以直接对远程库进行操作;而团队外的成员可以对远程库进行派生(fork),即复制出一个新的远程库,形成一个新的远程库分支,从而在这个新的分支远程库上进行一系列操作。若想要和原远程库进行合并(merge),此时必须先提出请求,获得团队内成员许可后,方可合并。


二、GitHub 简介

在这里插入图片描述

   GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。官方网址为:https://github.com/(需要外网进入)。

   在这里,你能找到你感兴趣的项目代码仓库,从而解决你学习和工作的需求,另一方面,它还可以让你与世界各地的开发人员协同开发和交流你们所感兴趣的项目!

2.1 GitHub 与 Git 的区别

  • Git 和 GitHub 是两个完全不同的概念;
  • Git 是一个分布式版本控制工具,开发者将源代码存入名叫 “Git 仓库” 的本地库中并加以使用;
  • GitHub 是在线的基于 Git 的代码托管服务;
  • GitHub 除提供 Git 仓库的托管服务外,还为开发者或团队提供了一系列功能,帮助其高效率、高品质地进行代码编写。

2.2 GitHub 常用术语解释

  • Repository :简称 Repo,可以理解为 “仓库”,我们的项目就存放在仓库之中。也就是说,如果我们想要建立项目,就得先建立仓库;有多个项目,就建立多个仓库。
  • Issues :可以理解为 “问题”。举一个简单的例子,如果我们开源一个项目,如果别人看了我们的项目,并且发现了bug,或者感觉那个地方有待改进,他就可以给我们提出 Issue ,等我们把 Issues 解决之后,就可以把这些 Issues 关闭;反之,我们也可以给他人提出 Issue
  • Star :可以理解为 “点赞”。当我们感觉某一个项目做的比较好之后,就可以为这个项目点赞,而且我们点赞过的项目,都会保存到我们的 Star 之中,方便我们随时查看。在 GitHub 之中,如果一个项目的点星数能够超百,那么说明这个项目已经很不错了。
  • fork :派生,可以理解为“拉分支”,把别人的代码,克隆到你自己的仓库,Github 的术语叫做 fork。如果我们对某一个项目比较感兴趣,并且想在此基础之上开发新的功能,这时我们就可以 Fork 这个项目,这表示复制一个完全相同的项目到我们的 GitHub 账号之中,而且独立于原项目。之后,我们就可以在自己复制的项目中进行开发了。
  • pull request :是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request,简称 PR ,也可以理解为“提交请求”。在现实项目中,即使自己对某个 repo 的特定分支有写入权限,也可以提 PR 来修改,因为这是 code review 的一种方式,让团队的其他人看一看改的咋样。
  • Merge :可以理解为 “合并”。如果别人 Fork 了我们的项目,对其进行了修改,并且提出了 Pull 请求 ,这时我们就可以对这个 Pull 请求 进行审核。如果这个 Pull 请求 的内容满足我们的要求,并且跟我们原有的项目没有冲突的话,就可以将其合并到我们的项目之中。当然,是否进行合并,由我们决定。
  • Watch :可以理解为 “观察”。如果我们 Watch 了一个项目,之后,如果这个项目有了任何更新,我们都会在第一时候收到该项目的更新通知。
  • Gist :如果我们没有项目可以开源或者只是单纯的想分享一些代码片段的话,我们就可以选择 Gist。不过说实话,如果不 FQ 的话,Gist 并不好用。

三、GitHub 的 Git 配置及基本操作

   在对 Git 和 GitHub 有了充分了解之后,我们选择 GitHub 作为 Git 的远程托管中心,讲一讲如何进行一系列的 Git 配置。首先,我们得有一个 GitHub 账号,这个直接去官网注册即可,注册流程在此就不赘述了。

3.1 创建远程库并起个别名

  • Step 1:打开 GitHub 官网,登陆账号后,点击右上角的『+』号,选择『new repository』:

在这里插入图片描述

  • Step 2:进入远程仓库创建页面,按图中所示填写好信息,点击『Create repository』即可:

在这里插入图片描述

Add a README file :如果勾选,则创建仓库的同时会创建 README 文件。
Add .gitignore :如果勾选,则创建仓库时会生成 .ignore 文件,.ignore 文件可以配置哪些文件应该被 Git 忽略掉,不管理。
Choose a license :如果勾选,则可以说明一个证书,比如写上该项目可以被使用但不能商业的声明信息。

  • Step 3:由此,我们就创建好了一个 GitHub 远程库:

在这里插入图片描述

   另外,GitHub 还提示了我们如何用命令行的形式 新建远程库、推送已有本地库以及向远程库中添加代码。由于本地库文件已存在,因此我们直接推送即可。我们复制那三行命令如下,进行一一讲解:

git remote add origin https://github.com/***/git_test.git
git branch -M main
git push -u origin main

   首先,我们来理解第一行命令,它表示给远程库的 HTTPS 链接起一个别名为 origin ,方便后续使用命令行时,不用每次都输入一大长串字符。一般情况下,别名和本地库名一致,因此建议此处别名为 git_test 。执行一下命令:

git remote add git_test https://github.com/***/git_test.git

   并再次执行 git remote -v 查看所有别名:

在这里插入图片描述

   注意: 此时出现两个别名都是一样的,但分别代表 fetchpush ,也就是说,这两个操作的别名通用。


3.2 推送(push)本地库到远程库

  此时我们再分析后两行代码:

git branch -M main
git push -u git_test main

  对于 git branch -M main 命令,它代表的是将现处分支修改成 main ,此处由于我们不想修改,因此无需执行这行代码,直接推送即可。推送本地库到远程库的基本语法为:

git push 远程库链接/别名 分支名

  因此,我们执行 git push git_test master ,由于要使用外网,因此这一步对网络要求比较高。如果链接成功,会弹出一个 Connect to GitHub 的小框,提示我们登陆 GitHub,登陆方式有两种:选择浏览器的账号登陆口令登陆

在这里插入图片描述

  此时可自行选择,比如此时我浏览器已经登陆了,点击 选择浏览器的账号登陆 > 授权 即可。

在这里插入图片描述

  此时,Git 也提示,上传远程库成功了,同时我们在 GitHub 远程库上也能看到 test.cpp 代码已上传成功。

在这里插入图片描述
在这里插入图片描述


3.3 拉取(pull)远程库到本地库

   当团队成员共同维护一个远程库时,有时别的成员对远程库进行了修改并提交了,这时我们会发现,我们本地库中的文件与远程库不一致,需要更新一下本地库内容,也称拉取远程库到本地库。基本语法为:

git pull 远程库链接/别名 分支名

   因此,我们执行 git pull git_test master命令:

在这里插入图片描述

   此时,Git 提示我们更新成功。由于我们并未对远程库里的文件进行修改,因此没有本地库文件修改的提示信息。


3.4 克隆(clone)远程库到本地库

   当我们在 GitHub 上发现感兴趣的远程库时,我们可以选择将其克隆(clone)到本地库中。基本语法为:

git clone 远程库链接

   我们试着在本地新建一个文件夹,打开 Git bash ,执行 git clone https://github.com/***/git_test 命令:

在这里插入图片描述

   此时,远程库中的全部内容都克隆(也可以理解成下载)到本地库中了。

   注意: clone 操作会做三件事:1、拉取代码;2、初始化本地库;3、创建默认别名(origin)。

在这里插入图片描述

相关文章:

  • 海外众筹:产品出海kickstarter海外众筹流程
  • JVM阶段(4)-回收策略
  • 万字长文保姆级教你制作自己的多功能QQ机器人
  • 365天深度学习 | 第7周:咖啡豆识别
  • 深入剖析JavaScript(二)——异步编程
  • 工业智能网关BL110应用之七: 支持 Modbus ,MQTT,opc 等协议,上传到阿里华为云等LOT
  • c和指针-struct结构
  • 计算机网络 二、网络协议
  • 容器编排工具鉴赏- docker-compose 、Kubernetes、OpenShift、Docker Swarm
  • 【论文笔记】—低光图像增强—Supervised—URetinex-Net—2022-CVPR
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • 12c++呵呵老师【变量,定时器和事件】
  • 元宇宙地产演化史:从文本时代到区块链时代
  • Linux搭建开源企业云盘Seafile,私有文件同步云盘及基本使用
  • 【推荐系统】推荐系统基础算法-基于矩阵分解的推荐方法、隐语义模型
  • 【剑指offer】让抽象问题具体化
  • Docker: 容器互访的三种方式
  • golang中接口赋值与方法集
  • Idea+maven+scala构建包并在spark on yarn 运行
  • If…else
  • Javascript 原型链
  • js ES6 求数组的交集,并集,还有差集
  • 闭包--闭包之tab栏切换(四)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 计算机在识别图像时“看到”了什么?
  • 普通函数和构造函数的区别
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • #define
  • #stm32整理(一)flash读写
  • (12)Hive调优——count distinct去重优化
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (九)c52学习之旅-定时器
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Windows2003安全设置/维护
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .apk文件,IIS不支持下载解决
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 反射的使用
  • .net 受管制代码
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .Net中wcf服务生成及调用
  • .Net组件程序设计之线程、并发管理(一)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @javax.ws.rs Webservice注解
  • @Not - Empty-Null-Blank
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ai笔记4] 将AI工具场景化,应用于生活和工作