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

初识git · 远程操作

目录

前言:

理解分布式版本控制系统

远程仓库

仓库操作

克隆仓库

推送和抓取

特殊文件

取别名

标签管理


前言:

在基本操作,分支管理这几个部分,我们都会在本地仓库操作了,但是目前还没有办法将自己的代码远程推送到仓库里面,所以本文,我们学习远程操作,操作完之后,我们就可以将自己的代码远程推送到我们自己的gitee或者是github账户啦。

那么废话不多说,进入今日主题——远程操作。


理解分布式版本控制系统

git的本质是分布式的版本控制系统,版本控制我们已经知道了,git中通过改变HEAD指针的朝向,从而快速的实现版本回退等操作。

那么分布式,我们其实在分支管理章节有已经有所体会,对于master分支,作为最稳定的分支,一般不会在上面进行开发,对于其他分支,开发分支,以及bug分支,共同维护某个项目,这是分布式,一个项目交给多个分支完成,每个分支完成对应的操作。

最初,分布式可以理解为两个人的电脑互传对应的修改,所以两个人之间可以看到所有的文件,如果一个人的数据丢失了也不用担心,直接从另一个人的电脑上cv就可以了。

那么,实际上分布式操作的时候很少有两个人互相传数据的,一般都是一台机器作为中央服务器,也就是所有的代码,数据都会放在上面,谁的数据丢失了,谁的代码丢失了,都可以从上面cv代码回来。

所以,对于我们来说,中央服务器实际上是我们平常生活中使用的gitee的仓库,我们将该仓库作为中央服务器,代码也都是传在上面的,那么,我们如何新建一个远程仓库呢?

远程仓库

我们在gitee右上角有个加号,点击选择新建仓库,我们就进入到了该界面,那么名称是要有的,路径会默认生成,仓库的介绍也是一定要有的。

然后,是是否开源,我们可以先选择为私有,后面有开源的需求就可以直接开源即可。在新建仓库的时候,我们要注意的点是三个部分

语言,肯定就是自己经常用什么语言就选择什么语言,.gitnore我们后面介绍。开源不用管。

那么对于模板来说,ReadMe文件是仓库的一般说明,也就是别人进入你仓库之后,第一眼看到的就是ReadMe文件,所以该文件的作用是用来具体介绍仓库是用来干什么的。第二个是Issue模板文件,这个文件与之后的Bug之类的有关,我们一会儿看看。第三个是Pull Request文件,是什么我们一会儿介绍。

最后就是分支模型,因为目前来说不是写项目的话,我们选择的一般是单分支模型,也就是只有一条分支,开发啊调试什么的都在上面进行。

此时,我们点击创建。

出现了如下的文件,对于README文件我们已经清楚,其中后缀有en的README文件是英文,非en的就是中文版的:

具体的内容我们都是可以自己编辑的。

那么我们看看Issue文件:

该文件所在的目录是.gitee里面,我们根据该文件的一个模板,大概也能猜出大体功能是什么,也就是发现Bug的一个报告模板,在Issue一栏我们可以看到:

这就是Issue的具体图形化,新建Issue试试:

在Issue一栏,我们可以设置对应的负责人,标签(里面不止有bug),还有该问题是在哪个分支上出现的,日期也有,并且可以选择置顶等级和优先级,这是非常符合企业级的管理的。

此时创建之后,

Issue里面就有了对应的报告,那么当问题解决了,我们可以在对应的状态里面点击已解决,此时一个bug就被我们解决了。

当然了,这个仓库如果是开源的,任何人都是可以提交Issue的,我们作为管理者,可以对Issue进行任何的处理,如拒绝等。

对于Pull Request来说呢,是一个分支合并请求,因为开发中的时候,不是能直接合并的,如果能随便合并,那么项目基本上就报废了,所以存在着合并请求的东西,我们作为管理者,自然是有权处理对应的请求的。

对于远程仓库的Pull Request和Issue就暂时讲解到这里。

仓库操作

克隆仓库

我们创建了仓库,自然是需要提交代码上去的,那么第一个点,我们如何克隆远程仓库到我们的本地呢?

此时,存在两种常用的克隆方法,一种是使用SSH协议,一种是使用https协议,对于SSH来说,安全性更高,更有保障,因为它是使用了公钥加密的。对于https协议呢,就没有那么多要注意的了,简简单单的克隆就可以了,我们先使用https协议作为例子:

使用https我们需要的是该字符串,然后使用git clone命令,注意,克隆远程仓库是不能在.git所在的目录创建的,所以我们还需要将原来的本地仓库删除:

此时,仓库就创建好了,创建好了之后,在基本操作那里我们提及最重要的两个信息是名字和邮箱,所以我们也应该配置上:

此时都是没有配置的。

此时,基本配置就做好了。

这是使用https协议克隆的仓库,那么我们将此仓库删除,使用SSH克隆一个。

如果我们直接使用git clone进行克隆的话,那么往往是会报错的:

不能克隆仓库往往是因为我们没有添加对应公钥:

在这里是我们添加公钥的地方,添加公钥之前,我们需要创建文件。

第一步是我们要查看用户的家目录下面是否存在.ssh文件:

这里是有的,那么我们进入:

里面只有这么多东西,而我们需要创建的是id_rsa,id_rsa.pub两个文件,pub是public,公钥的意思,对于id_rsa是私钥的意思,肯定是不能透露给其他人的,公钥就无所谓了。

ssh-keygen -t rsa -C "email"

然后我们退出来,在家目录下执行该命令,注意,邮箱是要输入我们自己的:

此时我们一路回车就可以了。

此时进入到ssh目录下:

我们打开对应的公钥文件:

此时这个一长串的,我们就需要全部复制下来。

然后到gitee添加即可:

添加好了之后,我们此时再次使用ssh协议就可以了:

此时就创建成功了,但是该公钥是只读的,我们应该到设置部分添加公钥,操作一样的,这里就不演示了。

那么我们的仓库克隆操作就完成了。

此时我们可以git remote查看远程仓库的信息:

我们仓库的原始名称就叫做origin。

-v显示了抓取和推送的地址,如果我们没有对应的权限也就看不到了。

那么现在演示推送和抓取。

推送和抓取

对于推送push,我们常用的操作如上,我们目前本地的分支和远程的分支都叫做master,所以我们可以直接git push master即可,此时我们不妨创建文件,push一下试试:

此时push成功了,那么我们看看gitee的提交记录:

此时push成功。如果我们是使用的https协议,每次推送需要输入口令相对来说就麻烦一点。

此时,我们实现一下抓取操作,这种情况是发生在远端仓库代码进度快于本地的,此时需要抓取,那么我们在gitee直接修改一下刚才提交的文件就可以了,但是注意,平时的代码修改是最好不要在gitee上修改的,这是个很不好的坏习惯:

此时修改成功。

pull来说就是远程在前,从远程pull到本地,push是本地push到远程,顺序还是很好理解的:

此时就成功了。

我们平常使用图形化界面的时候,如果没有.git文件,常常就会push出一大推无关的文件,此时,特殊文件.gitignore就出场了。

特殊文件

我们现在克隆仓库里面看看.gitignore里面有没有东西:

是有的,因为我们当时创建的时候,勾选了该文件,所以gitee自动帮我们初始化好了,由Linux的学习我们知道*的意思是通配符,所以*.d的意思就是所有以d为后缀结束的文件都不要追踪它,#的意思是注释,那么文件里面那么多,都是代表不要追踪的意思。

我们创建一个.so结尾的文件,看git的状态是否发生改变:

此时就没有,但是有的时候啊,我们有一个文件是.so结尾,但是是要传输的,那么怎么办呢?

此时只需要! + filename就可以了:

此时我们就可以传了。

那么有的时候,文件传不过去,,gitignore又不好找,我们可以使用check检查一下是为什么:

git check-ignore -v a.so就是说检查一下,为什么传不了。

对于传隐藏文件,如果我们不希望改变.gitignore,我们就可以git add -f filename即可。

取别名

对于有些命令实在是太长了,我们就可以对某些命令取别名:

git config --global alias.st status

--global代表的是这台电脑的所有仓库都可以使用该命令,如果没有了就只有当前仓库能够使用,alias.newname dir即可。

此时我们就可以将status简写为st了。

标签管理

本文呢简单介绍一下标签管理,因为涉及的内容就只有创建标签,操作标签,就没了。

如果要创建标签,我们应该切换到我们需要创建标签的分支上。

使用git tag [tagname]即可。使用命令git tag可以查看所有标签。

而标签创建好了之后,默认是打在最新一次的commit上的。

那么我们如何修改标签到指定的commit上呢?

git tag tagname + commit id就可以了,commit id也可以使用短的,使用pretty=oneline就可以了。

注意,标签是按照字母排序的,不是按照创建时间排序的

-a指定标签名,-m文字说明。

此时我们tree .git一下:

refs下面就有了一个标签咯。

删除就很简单了,-d即可。

因为创建的标签都是在本地,只有push到远端才有,所以我们可以git push origin [tagname]:

此时我们上Gitee看看:

标签部分也有了。

git push origin --tags

如果有很多标签,可以使用如上的指令一次性推送。

但是删除就相对麻烦一点了:
本地删除之后,远程也需要删除,就像这样。


 有关git的远程操作和标签管理就介绍完咯~

感谢阅读!


http://www.kler.cn/news/356257.html

相关文章:

  • DAY52WEB 攻防-XSS 跨站反射型存储型DOM 型标签闭合输入输出JS 代码解析
  • Python 独立成分分析(ICA) 详解与应用案例
  • 什么是ASC广告?Facebook ASC广告使用技巧
  • 量纲分析的巅峰之作:Taylor点源爆炸模型产生始末
  • 【软件】Ubuntu下QT的安装和使用
  • 深入剖析:.Net8 引入非root用户运行的新特性提升应用安全性
  • 【AI学习】Mamba学习(九):HiPPO LegS版本
  • 05.栈介绍+实现
  • NGINX 的 Event Loop
  • 3.3关节组件
  • setuptools封装自己python包
  • Linux与Windows文件共享:Samba的详细配置(Ubuntu)
  • Spring 和 javaEE的关系
  • 基于 UDP 协议的 socket 编程:实现 UDP 服务器
  • 概率 多维随机变量与分布
  • 枸杞常见病虫害识别数据集(猫脸码客 第220期)
  • 【Linux系列】set -euo pipefail 命令详解
  • Proxy SwitchyOmega 网页代理的安装与使用(巨简单!)
  • 自动驾驶中的图像识别技术:安全与效率的双赢
  • STM32_实验5_中断实验