git介绍与基本使用

git介绍与基本使用

linux将代码发布到了网站了,开源了,因此很多开发者不断的贡献代码,这样代码越来越多了,就有了管理代码的问题,所以创建git,就是用来管理linux代码的,后来发现很好用,所以越来越多的项目放在git上了,后来项目越来越多了,其他系统也就开始支持git了(windows, mac)

我们要使用git就要安装客户端

U3dJAO.png

Git官网

安装完成,提供了控制台

打开开始菜单 (也可以在当前文件夹下空白处点击右键,打开后自动定位到当前文件夹)

  • Git Bash 为linux家族(Unix, mac等)使用的

  • Git CMD 为windows使用的

U3dO29.png

  • 由于git为linux提供的,所以建议使用linux指令

1 Git、GitHub、GitLab三者之间的联系以及区别

在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转)

1.什么是 Git?

Git 是一个版本控制系统。

版本控制是一种用于记录一个或多个文件内容变化,方便我们查阅特定版本修订情况的系统。

以前在没有使用版本控制的时候,我们通常在我们的项目根目录下这样命名项目:

project_v1、project_v1.1、project_v2等等

通过这种方式记录我们项目的不同版本的修改,有的时候我们还会在不同版本的文件中写一个说明,记录此版本项目新增、修改,删除等操作。

这样的操作是很繁杂的,有的时候还可能因为一些非人为因素导致文件丢失这样的事故。

有了版本控制系统,我们就不用再手动进行一些繁杂的操作,并且对于文件丢失这种事故我们也不用再担心,你可以随便回到历史记录的某个时刻。

早期出现的版本控制系统有:SVN、CVS等,它们是集中式版本控制系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同合作的开发人员都通过客户端连接到这台服务器,取出最新的文件或者提交更新。

而我们的主角 Git 是分布式版本控制系统。Git 已经成为越来越多开发者的青睐,因为分布式的优势是很显著的。

2.说一下集中式和分布式版本控制系统的区别

集中式版本控制系统,版本库是集中存放在中央服务器的,工作的时候,用的是自己的电脑,所以,我们首先需要从中央服务器上拉取最新的版本,然后开始工作,等工作完了,再把自己的工作提交到中央服务器。在这里借用廖雪峰老师的一个比喻,中央服务器好比是一个图书馆,你要改其中的一本书,必须先要从图书馆里把书借出来,然后更改,改完之后,再放回图书馆。

集中式版本控制系统的一个最大毛病就是必须联网才能工作,所以对于网络环境比较差的情况使用集中式版本控制系统是一件比较让人头疼的事情。

分布式版本控制系统没有中央服务器的概念,我们使用相关的客户端提取的不只是最新的文件,而是把代码仓库完整地镜像下来,相当于每个人的电脑都是一个完整的版本库,这样的话,任何一处协同工作的服务器出现故障,都可以用任何一个镜像出来的本地仓库恢复。并且,即便在网络环境比较差的情况下也不用担心,因为版本库就在本地电脑上。

总结:

  • (1).分布式版本控制系统下的本地仓库包含代码库还有历史库,在本地就可以查看版本历史

  • (2).而集中式版本控制系统下的历史仓库是存在于中央仓库,每次对比与提交代码都必须连接到中央仓库

  • (3).多人开发时,如果充当中央仓库的Git仓库挂掉了,任何一个开发者都可以随时创建一个新的中央仓库然后同步就可以恢复中央仓库

3.GitHub 和 GitLab

GitHub 和 GitLab 都是基于 web 的 Git 仓库,使用起来二者差不多,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。

GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台

GitHub 同时提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的。

GitLab 解决了这个问题,你可以在上面创建私人的免费仓库。

GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比较 GitHub , 它有不少特色:

  • (1) 允许免费设置仓库权限;

  • (2) 允许用户选择分享一个 project 的部分代码;

  • (3) 允许用户设置 project 的获取权限,进一步提升安全性;

  • (4) 可以设置获取到团队整体的改进进度;

  • (5) 通过 innersourcing 让不在权限范围内的人访问不到该资源;

所以,从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。

2 git在linux中的指令

1
2
3
4
5
6
cd 目录 打开目录
ls 查看当前目录的文件
pwd 查看当前目录所在的系统文件路径
mkdir 创建文件夹
touch 文件 创建文件
echo 内容 >> 将内容写入文件中

git bash 下操作文件及文件夹命令:

  • 1, cd : change directory的简写,改变目录的意思,就是切换到哪个目录下, 如 cd e:\fff 切换 E 盘下面的fff 目录。

当我们用cd 进入文件夹时,我们可以使用 通配符, cd f, 如果E盘下只有一个f开头的文件夹,它就会进入到这个文件夹.

  • 2, cd .. 回退到上一个目录。我们在写js,引入文件时,.. 表示的就是上一个目录, 所以 cd .. 回退到上一个目录就很好理解了。注意,cd 和两个点点..之间有一个空格

  • 3, pwd : print working directory, 打印工作目录,它会显示我们当前所在的目录路径。

  • 4, ls: list, 列出当前目录中的所有文件, 只不过ll(两个l)列出的内容更为详细。

  • 5, touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。

  • 6,rm: remove,删除一个文件, rm index.js 就会把index.js文件删除.

  • 7, mkdir: make directory 新建一个目录,就是新建一个文件夹. 如mkdir src 新建src 文件夹.

  • 8, rm -r : 删除一个文件夹, r (recusive 是递归的意思), 删除用的就是递归,先删除文件夹里面的内容,再删除文件夹。 rm -r src 删除src目录。

  • 9, mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下.

  • 10, reset 清屏,把git bash命令窗口中的所有内容清空。

  • 11,exit 可以直接退出窗口,就不会再鼠标按窗口上的来关闭窗口了。

  • 12,cat 查看文件内容, cat 后面 加要查看的文件名

命令行的快捷操作:

  • 1、我们可以使用上下箭头来查找我们以前输入的命令。这个尤其适合npm 命令。当我们输入npm run dev的时候,开启开发模式。但在开发过程中要安装一个组件,如axios, 这时我们就要按ctrl+ c 停止服务器。npm install axios –save.安装完成后,我们要重新启动dev 服务器进行开发,输入npm run dev. 其实这时候,可以不用输入命令,直接按两次向上箭头,命令行中就会npm run dev 命令。当我们打开git bash 窗口后,它就会记录我们输过的命令,按上下箭头,就可以查询历史,找到我们已前输出的命令。

  • 2、左右箭头移动光标修改命令。当我们输入命令的时候,突然发现某个单词拼错了,这时可以按左右箭头来移动光标到拼错的单词或字母上,再Delete 或Backspace 来删除该字母。其实这里有好多的快捷键来快速修改命令。

    移动光标: 按左右键头只能一个一个移动光标,如果我们能一个单词一个单词来移动就快多了。Alt + B 和 Alt + F 来解决问题, 一个是向左移动,一个是向右移动。Ctrl + A 则是移动光标到整条命令的起始位置。Ctrl + E 则是移动光标到整条命令的结束位置。

    对于编辑或删除来说,有几个快捷键也可以同样完成任务。 Ctr+D, 相当于Delete, Ctrl + H 相当于Backspace。 Ctrl + U 删除光标左侧的所有内容, Ctrl + K删除光标右侧的所有内容。Ctrl + W 删除光标左侧的单词, Alt + D 删除光标右侧的单词。

  • 3、 Tab 键的使用。 当我们想进入到一个目录或文件夹时,如果文件名很长,要一个一个输入,那是一件很麻烦的事情。这时tab 的作用就来了,当我们输入文件名的前几个字母时,按tab, 如果有文件名可以匹配,它就会显示出完整的文件名,如果有多个文件名匹配到,它会显示最先找到的一个。再按一次tab,它就会匹配的下一个,我们可以不停地按 tab键在匹配的文件名中来回切换,直到找到我们文件名为止。

例:

在C:\Users\Administrator\Desktop\web\03 大数据可视化与Git\03-01\git 创建demo文件夹,并创建readme.txt文件,写入 Hello World

U3weqP.png

3 介绍git

git文件分为三类文件:

  • 第一类:未纳入缓存的文件

    • 这类文件,一旦删除,就再也无法找到
  • 第二类:纳入缓存的文件

    • 一旦删除,可以通过git来查找
  • 第三类:纳入版本库的文件

    • 这类文件,可以通过计算机的各个位置找到

4 使用git

通过git init来初始化一个项目文件

1
2
3
4
5
objects就是用来存储纳入缓存的文件(第二类文件)

refs存储纳入版本库的文件(第三类文件)

可以通过git指令实现三类文件的切换

git add文件

1
可以是将未纳入缓存的文件,变为第二类文件

git add *

1
实现将所有文件都纳入缓存,add后有空格

git status

1
查看当前文件的状态

U3wKIS.png

git rm –cached 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
	实现将第二类文件转为一类文件(未纳入缓存)
```


![U3RJEj.png](https://s1.ax1x.com/2020/07/12/U3RJEj.png)



* rm 、git rm 、git rm --cached的区别:

* rm 删除文件

* git rm

* 当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用git rm

* git rm file = rm file+ git add file

* rm file删除本地文件

* git add file 提交删除的步骤同步到git仓库

* git rm --cached file

* 当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制,可以使用 git rm --cached

* git rm --cached 会从index里面删除该文件,下次commit的时候会修改git仓库,但是本地的文件还是保留

* Untrack and stop tracking files in git

* 有一些文件我们不想提交到git上去了,但是又被检测到有变化,显示Untracked files,我们可以采用git rm --cached file来停止跟踪这些文件

* 一旦纳入缓存,将有机会纳入版本库

* git commit –m “说明”

* 说明一定要有语义化

纳入版本库的文件,可以通过计算机的各个位置来找到,如果计算机坏掉了,此时文件就无法被找到
所以,我们可以将文件上传到云端(服务器),之后,即时计算机坏掉也可以找到

## 5 建立信任关系

<a href="https://help.github.com/cn/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account" class="LinkCard">新增 SSH 密钥到 GitHub 帐户</a>


进入github

![U3Rrb4.png](https://s1.ax1x.com/2020/07/12/U3Rrb4.png)


## 6 进入gitlab

<a href="https://about.gitlab.com/" class="LinkCard">GitLab</a>


![U3R5rD.png](https://s1.ax1x.com/2020/07/12/U3R5rD.png)

点击添加密钥即可完成信任链接

## 7 创建项目

### 7.1 进入github

![U3Wvf1.png](https://s1.ax1x.com/2020/07/12/U3Wvf1.png)

![U3fEtA.png](https://s1.ax1x.com/2020/07/12/U3fEtA.png)

![U3fwBF.png](https://s1.ax1x.com/2020/07/12/U3fwBF.png)

![U3fgc6.png](https://s1.ax1x.com/2020/07/12/U3fgc6.png)

![U3hEbF.png](https://s1.ax1x.com/2020/07/12/U3hEbF.png)

### 7.2 github开源项目贡献流程

方式一:新建Issue

>提交使用问题、建议或者想法

方式二:Pull Requests

fork项目
修改自己仓库的代码
新建 Pull Requests
等待作者操作审核合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

### 7.3 进入gitlab

![U3hUPA.png](https://s1.ax1x.com/2020/07/12/U3hUPA.png)


## 8 和github建立连接

连接github:


![U34Qij.png](https://s1.ax1x.com/2020/07/12/U34Qij.png)

![U34ao4.png](https://s1.ax1x.com/2020/07/12/U34ao4.png)


建立连接:

git remote add origin https://github.com/mango185/test.git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125

![U346OK.png](https://s1.ax1x.com/2020/07/12/U346OK.png)


## 9 git初始化及仓库创建操作

这些都是在**本地操作**,github上没有任何显示


![U34T6P.png](https://s1.ax1x.com/2020/07/12/U34T6P.png)

## 9.1 git基础设置

git安装完成之后,需要进行一些基本信息设置

① 设置用户名

>git config –golbal user.name ‘用户名’

② 设置用户名邮箱

>git config –golbal user.email ‘邮箱’

③ 查看设置

>git config --list

注意:

>git config –global参数,有了这个参数,表示你这台机器上所有的git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱


![U3IWRA.png](https://s1.ax1x.com/2020/07/12/U3IWRA.png)


## 9.2 向仓库添加文件


![U3oeL6.png](https://s1.ax1x.com/2020/07/12/U3oeL6.png)


### 9.2 修改文件内容


![U3oKoD.png](https://s1.ax1x.com/2020/07/12/U3oKoD.png)


### 9.3 删除文件


![U3oKoD.png](https://s1.ax1x.com/2020/07/12/U3oKoD.png)



## 10 git管理远程仓库

使用远程仓库的目的:

>备份、实现代码共享集中化处理


![U3oBWj.png](https://s1.ax1x.com/2020/07/12/U3oBWj.png)



### 10.1 git克隆操作

目的:

>将远程仓库(github项目)复制到本地

![U3ofkF.png](https://s1.ax1x.com/2020/07/12/U3ofkF.png)

### 10.2 git push上传文件


![U3ofkF.png](https://s1.ax1x.com/2020/07/12/U3ofkF.png)

### 10.3 从本地上传整个项目或者文件夹到github

在做github个人主页的时候,使用github的readme写起来很麻烦,而且也不好加入一些自己的css样式,然后我就想从本地上传css样式和图片,直接使用html来进行个人主页设计。

下面介绍一下如何从本地上传整个项目或者文件夹到github。

如果是第一次使用,需要设置一下用户名和电子邮箱,命令为`git config --global user.name “你的用户名”` `git config --global user.email “你的电子邮箱”`

然后就可以使用git上传文件和文件夹到github了

首先需要在本地建一个repository,说白了就是个文件夹,一个项目的所有操作都可以在这个库里面进行,包括添加文件,删除,修改,甚至是还原

方法也很简单,找到你建立的那个文件夹,在gitbash里进入到文件夹内

然后在命令行输入git init即可把该目录变成可以使用git管理的目录

或者直接进入该目录,右键点击GIt Bsh Here

然后把你需要上传的文件和文件夹全部拷贝进来

在命令行输入git add . //添加当前文件夹下的所有文件(**注意后面有个.**

然后你需要到c盘的用户目录下找到.ssh文件夹,找到密钥信息和github建立信任关系

建完ssh keys以后就可以进行文件上传了

1.需要提交一下文件,命令如下:git commit -m "layout" //引号中的内容为对该文件的描述

2.需要连接到你的github库 git remote add origin 你的github地址(地址是你github建的库的地址,如果库里没有文件,直接进入可以找到地址,如果有文件,点Clone or download

如果出现错误:

>fatal: remote origin already exists

则执行以下语句:

>$ git remote rm origin

3.git push -u origin master

### 10.4 项目内容更新

1、先是把自己GitHub上的代码克隆到本地(下载到本地)

2、将需要更新的内容(或全部内容)替换

3、重新将内容上传到github

git add * 表示添加所有更新的内容到缓存区
git add . 表示添加所有内容

1
2
3
4
5
6
7
8
9


![U3TPnP.png](https://s1.ax1x.com/2020/07/12/U3TPnP.png)



### 10.5 回退到上一个版本

对于版本的回退,我们经常会用到两个命令:

git reset
git revert

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

* 使用 git reset 回退:

假如我们的系统现在有如下几个提交:


![U3TVhQ.png](https://s1.ax1x.com/2020/07/12/U3TVhQ.png)



其中:A 和 B 是正常提交,而 C 和 D 是错误提交。现在,我们想把 C 和 D 回退掉。而此时,HEAD 指针指向 D 提交(5lk4er)。我们只需将 HEAD 指针移动到 B 提交(a0fvf8),就可以达到目的。

完整命令如下:

>git reset --hard a0fvf8

命令运行之后,HEAD 指针就会移动到 B 提交下,如下图示:

![U3Tm1s.png](https://s1.ax1x.com/2020/07/12/U3Tm1s.png)


而这个时候,远程仓库的 HEAD 指针依然不变,仍在 D 提交上。所以,如果直接使用 git push 命令的话,将无法将更改推到远程仓库。此时,只能使用 -f 选项将提交强制推到远程仓库:

>git push -f

采用这种方式回退代码的弊端显而易见,那就是会使 HEAD 指针往回移动,从而会失去之后的提交信息。将来如果突然发现,C 和 D 是多么绝妙的想法,可它们已经早就消失在历史的长河里了。

而且,有些公司明令禁止使用 git reset 命令去回退代码,原因与上述一样。所以,我们需要找到一个命令,既可以回退代码,又可以保存错误的提交。这时,git revert 命令就派上用场了。

* 使用git revert:

git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。

使用 git revert 命令来实现上述例子的话,我们可以这样做:先 revert D,再 revert C (有多个提交需要回退的话需要由新到旧进行 revert):

git revert 5lk4er
git revert 76sdeb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

这里会生成两个新有提交:D’ 和 C’,如下图示:


![U3TUj1.png](https://s1.ax1x.com/2020/07/12/U3TUj1.png)



这里只有两个提交需要 revert,我们可以一个个回退。但如果有几十个呢?一个个回退肯定效率太低而且容易出错。我们可以使用以下方法进行批量回退:

>git revert OLDER_COMMIT^…NEWER_COMMIT

这时,错误的提交 C 和 D 依然保留,将来查找的时候也有依可循。而且,这样操作的话 HEAD 指针是往后移动的,可以直接使用 git push 命令推送到远程仓库里。而这种做法,正是企业所鼓励的。
我们再举个更难一点的例子。

假如现在有三个提交,但很不巧的是,那个错误的提交刚好位于中间。如下图示:


![U3T2jI.png](https://s1.ax1x.com/2020/07/12/U3T2jI.png)


这时,直接使用 git reset 命令将 HEAD 指针重置到 A 提交显然是不行的,因为 C 提交是正确的,需要保留的。先把 C 提交 及 B 提交全部回退,再使用 cherry-pick 命令将 C 提交重新再生成一个新的提交 C’’,这样就实现了将 B提交回退的需求。完整的过程如下:


![U3TjbV.png](https://s1.ax1x.com/2020/07/12/U3TjbV.png)


通过以上对比可以发现,git reset 与 git revert 最大的差别就在于,**git reset 会失去后面的提交**,而 **git revert 是通过反做的方式重新创建一个新的提交,而保留原有的提交** 。在企业里,应尽量使用 git revert 命令,能不用 git reset 命令尽量不用。

## 11 Github Pages搭建网站

### 11.1 个人站点

git提供了一个浏览项目的网址

>`https://用户名.github.io/`

搭建步骤:

* 创建个人站点 ==> 新建仓库 【注意:仓库名必须是 `用户名.github.io`

* 在仓库里创建网站首页 `index.html`

![U37ivR.png](https://s1.ax1x.com/2020/07/12/U37ivR.png)

注意:

github pages仅支持静态网页
仓库里面只能是html文件

```

11.2 project pages项目站点

访问:https://用户名.github.io/仓库名

搭建步骤:

① 进入项目主页,点击Settings

② 在Settings页面,Github Pages中点击Choose a theme,选择主题

U37aGQ.png

③ 选择主题

U376aT.png

④ 新建站点基础信息设置

⑤ 生成网页

点击查看

本文标题:git介绍与基本使用

文章作者:Mango

发布时间:2020年07月14日 - 13:02:42

最后更新:2020年07月14日 - 13:27:10

原始链接:https://mango185.github.io/post/4eeeef62.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------