目录
前言:
在基本操作,分支管理这几个部分,我们都会在本地仓库操作了,但是目前还没有办法将自己的代码远程推送到仓库里面,所以本文,我们学习远程操作,操作完之后,我们就可以将自己的代码远程推送到我们自己的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的远程操作和标签管理就介绍完咯~
感谢阅读!