【啰嗦】Git(1)

265 阅读5分钟

直接进入主题

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

这是官网首页对Git的介绍,重点是两个关键词,开源就不说了,最重要的是一款版本控制系统 。至于说另外一个版本系统SVN,不用去管网上一大堆的区别,只需要知道一点,Git是分布式的,SVN则不是,其他的缺点等你用多了慢慢就能体会到了。

其实官网的这个介绍还是太专业了,讲人话就是Git是多人协同同步工具。对于一个文件,可以多个人在不同的时间地点修改,然后进行一系列的操作对文件进行修改同步。

地基

先来讲怎么安装

windows

git-scm.com/download/wi… 下载完后,next大法好 。再次友情提示,安装软件,非特殊情况下,一律不推荐安装在c盘

mac

至于mac的话,不会吧不会吧,都快2202年来,不会还有人mba或者mbp上还不安装homebrew叭🐶🐶🐶。

不过官网上也确实是这样推荐的

无论哪个平台,打开终端,输入git version ,如果你能看到如下,那说明安装成功了。

再来讲Git的基本知识

本地指的是本地PC,origin是指远端自己的仓库,remote是指远端别人的仓库。remote中一般就是常说的远程仓库,存放着大家共同修改的文件。至于里面的一些操作下面会讲。

小木屋

首先创建一个远程自己的仓库,在gitee上创建即可

注意选择的是开源,私有的话就是只能你自己访问了,创建完之后在gitee上就能看到了。接下来要做的就是把远程自己的仓库克隆或者拉取到本地,这里先使用命令行。

  1. clone

    git clone [仓库地址,一般是采用ssh,但是https也行]

    通过 .git目录就可以知道该目录所在的文件夹是一个git仓库

    所有有关git的操作都是需要在git仓库下面执行,不然就会有fatal: not a git repository (or any of the parent directories): .git 这样的提示

  2. add

    接着新建一个first的txt文件,里面写了add file firstly ,然后git add

    对于add而言

    • add file 是添加某个文件
    • add file1 file2 是多个文件
    • add . 是该目录下所有修改过的文件。

    git比较人性化的一点就是当你打错的时候会提醒你接近的正确的打法,或者哪里出错了。然后使用git status 来查看状态,这个命令在命令行中比较常用,这里就不再单独拎出来说。

    使用git rm --cached <file> 撤回提交

    撤回提交后,再次使用status,可以发现文件已经变成untraced未被git追踪的状态,接下来add两个文件

  3. commit

    通过提示也可以知道到了commit,所谓commit就是提交到本地的仓库,虽然你在仓库下新建了文件,但是并没有提交给git

    注意,是本地的仓库,不是远程自己的仓库

    所以以后记得,所以以后记得,commit一定要记得带message,对应的命令是git commit -m 'message'

  4. push

    这时候远程自己的仓库是没有的,毕竟你知识commit到了本地的仓库,如果想要远端有,那就必须采取push操作

    可以发现Permission denied 没有权限,这是因为gitee没有认识我们,所以需要生成ssh公钥并上传gitee

    生成公钥

    首先看电脑中的.ssh文件夹(无论是windows还是mac默认都会生成在这个文件夹下,都是在用户目录下)里有没有id_rsa和id_rsa.pub文件。

    得到生成的公钥后,进入gitee设置,让gitee认识这个公钥

    接着再进行push操作试试

    可以看到已经能成功push上远程自己的仓库,这时候再去gitee上面看看,码云上已经有了两个文件,并且后面跟着的就是commit时候写的message。

  5. remote

    一般来说,push后面是要跟着地址的,但是本地中remote地址只有一个的情况下后面就可以不用跟地址。可以通过以下命令来设置远程仓库地址。

    当然,我们push到远程别人的仓库的时候肯定是没有权限的,因为根本不认识我们,这时候就需要后面讲的fork和mr了。

  6. fork

    所谓fork,就是把远程别人仓库的代码复制到远程自己仓库的代码,fork完之后在自己远程本地

    复制完地址后clone到本地

  7. merge reques

    现在是在我们自己的电脑,自己的码云账号上,所以能push。但是在工作中,肯定会有一个服务器来存放代码,在服务器上不可能存着这么多人的公钥,而且大家都能这么轻易地往上push的话,冲突也会增多,也不利于管理。

    首先创建一个java文件,add commit push,这里的push也是只能push到自己远程的仓库 ,而组织的远程仓库是没有的。

    要想远程的仓库也能有我们修改或者增加的文件,需要发起merge request。GitLab上成为merge reques,GitHub或者Gitee上称为pull reques。至于有没有区别,反正我使用起来没啥区别。

    首先来看看本地的pull request

    添加对应的信息后就能够提交mr了,然后需要远程仓库的人进行审核,一般公司都会有规定的人来审核,看代码有没有错误,写得好不会,总的来说就是看能不能合入。

    再来看看远程仓库的pull request

    可以看到远程通过一系列的操作,成功的合入了代码,这些远程仓库中也有了修改后的代码,并且在自己的gitee上面会收到合入成功的信息。