Skip to content

Commit 440516b

Browse files
author
xuqi
committed
Git相关内容
标点符号、词句勘误和调整。
1 parent 274f64e commit 440516b

File tree

2 files changed

+52
-52
lines changed

2 files changed

+52
-52
lines changed

docs/tools/git/git-intro.md

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,38 @@ tag:
99

1010
### 什么是版本控制
1111

12-
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。
12+
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目源代码,你可以对任何类型的文件进行版本控制。
1313

1414
### 为什么要版本控制
1515

1616
有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。
1717

1818
### 本地版本控制系统
1919

20-
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
20+
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
2121

2222
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
2323

2424
![本地版本控制系统](https://oss.javaguide.cn/github/javaguide/tools/git/%E6%9C%AC%E5%9C%B0%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E7%B3%BB%E7%BB%9F.png)
2525

2626
### 集中化的版本控制系统
2727

28-
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。
28+
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。
2929

3030
集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
3131

3232
![集中化的版本控制系统](https://oss.javaguide.cn/github/javaguide/tools/git/%E9%9B%86%E4%B8%AD%E5%8C%96%E7%9A%84%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E7%B3%BB%E7%BB%9F.png)
3333

3434
这么做虽然解决了本地版本控制系统无法让在不同系统上的开发者协同工作的诟病,但也还是存在下面的问题:
3535

36-
- **单点故障** 中央服务器宕机,则其他人无法使用;如果中心数据库磁盘损坏又没有进行备份,你将丢失所有数据。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
37-
- **必须联网才能工作** 受网络状况、带宽影响。
36+
- **单点故障**:若中央服务器宕机,则其他人无法使用;如果中心数据库磁盘损坏又没有进行备份,你将丢失所有数据。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
37+
- **必须联网才能工作**受网络状况、带宽影响。
3838

3939
### 分布式版本控制系统
4040

41-
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 Git 就是一个典型的分布式版本控制系统。
41+
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。Git 就是一个典型的分布式版本控制系统。
4242

43-
这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
43+
这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
4444

4545
![分布式版本控制系统](https://oss.javaguide.cn/github/javaguide/tools/git/%E5%88%86%E5%B8%83%E5%BC%8F%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E7%B3%BB%E7%BB%9F.png)
4646

@@ -52,19 +52,19 @@ tag:
5252

5353
### Git 简史
5454

55-
Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。但是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统,而且对新的版本控制系统做了很多改进。
55+
Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。但是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统,而且对新的版本控制系统做了很多改进。
5656

5757
### Git 与其他版本管理系统的主要区别
5858

59-
Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑
59+
Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近。理解这些差异将有助于防止你在使用 Git 中产生困惑
6060

6161
下面我们主要说一个关于 Git 与其他版本管理系统的主要差别:**对待数据的方式**
6262

6363
**Git 采用的是直接记录快照的方式,而非差异比较。我后面会详细介绍这两种方式的差别。**
6464

65-
大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变更列表的方式存储信息,这类系统**将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。**
65+
大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变更列表的方式存储信息,这类系统 **将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。**
6666

67-
具体原理如下图所示,理解起来其实很简单,每当我们提交更新一个文件之后,系统都会记录这个文件做了哪些更新,以增量符号 Δ(Delta)表示。
67+
具体原理如下图所示,理解起来其实很简单,每当我们提交更新一个文件之后,系统都会记录这个文件做了哪些更新,以增量符号 ΔDelta表示。
6868

6969
![](https://oss.javaguide.cn/github/javaguide/tools/git/2019-3deltas.png)
7070

@@ -76,7 +76,7 @@ Git 在保存和对待各种信息的时候与其它版本控制系统有很大
7676

7777
比如我们的增量特别特别多的话,如果我们要得到最终的文件是不是会耗费时间和性能。
7878

79-
Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 **快照流**
79+
Git 不按照以上方式对待或保存数据。反之,Git 更像是把数据看作是对小型文件系统的一组快照。每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git 对待数据更像是一个 **快照流**
8080

8181
![](https://oss.javaguide.cn/github/javaguide/tools/git/2019-3snapshots.png)
8282

@@ -88,7 +88,7 @@ Git 有三种状态,你的文件可能处于其中之一:
8888
2. **已修改(modified)**:已修改表示修改了文件,但还没保存到数据库中。
8989
3. **已暂存(staged)**:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
9090

91-
由此引入 Git 项目的三个工作区域的概念:**Git 仓库(.git directory)****工作目录(Working Directory)** 以及 **暂存区域(Staging Area)**
91+
由此引入 Git 项目的三个工作区域的概念:**Git 仓库.git directory****工作目录Working Directory** 以及 **暂存区域Staging Area**
9292

9393
![](https://oss.javaguide.cn/github/javaguide/tools/git/2019-3areas.png)
9494

@@ -104,18 +104,18 @@ Git 有三种状态,你的文件可能处于其中之一:
104104

105105
有两种取得 Git 项目仓库的方法。
106106

107-
1. 在现有目录中初始化仓库: 进入项目目录运行 `git init` 命令,该命令将创建一个名为 `.git` 的子目录。
108-
2. 从一个服务器克隆一个现有的 Git 仓库: `git clone [url]` 自定义本地仓库的名字: `git clone [url] directoryname`
107+
1. 在现有目录中初始化仓库进入项目目录运行 `git init` 命令该命令将创建一个名为 `.git` 的子目录。
108+
2. 从一个服务器克隆一个现有的 Git 仓库`git clone [url]` 自定义本地仓库的名字`git clone [url] directoryname`
109109

110110
### 记录每次更新到仓库
111111

112-
1. **检测当前文件状态** : `git status`
113-
2. **提出更改(把它们添加到暂存区**`git add filename` (针对特定文件)`git add *`(所有文件)`git add *.txt`(支持通配符,所有 .txt 文件)
114-
3. **忽略文件**`.gitignore` 文件
115-
4. **提交更新:** `git commit -m "代码提交信息"` (每次准备提交前,先用 `git status` 看下,是不是都已暂存起来了, 然后再运行提交命令 `git commit`
116-
5. **跳过使用暂存区域更新的方式** : `git commit -a -m "代码提交信息"` `git commit` 加上 `-a` 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 `git add` 步骤。
117-
6. **移除文件**`git rm filename` (从暂存区域移除,然后提交。)
118-
7. **对文件重命名**`git mv README.md README`(这个命令相当于`mv README.md README``git rm README.md``git add README` 这三条命令的集合)
112+
1. **检测当前文件状态**`git status`
113+
2. **提出更改(把它们添加到暂存区**`git add filename`针对特定文件`git add *`所有文件`git add *.txt`(支持通配符,所有 .txt 文件)
114+
3. **忽略文件**`.gitignore` 文件
115+
4. **提交更新**`git commit -m "代码提交信息"`(每次准备提交前,先用 `git status` 看下,是不是都已暂存起来了,然后再运行提交命令 `git commit`
116+
5. **跳过使用暂存区域更新的方式**`git commit -a -m "代码提交信息"``git commit` 加上 `-a` 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 `git add` 步骤。
117+
6. **移除文件**`git rm filename`(从暂存区域移除,然后提交)。
118+
7. **对文件重命名**`git mv README.md README`这个命令相当于 `mv README.md README``git rm README.md``git add README` 这三条命令的集合)。
119119

120120
### 一个好的 Git 提交消息
121121

@@ -133,21 +133,21 @@ Git 有三种状态,你的文件可能处于其中之一:
133133

134134
### 推送改动到远程仓库
135135

136-
- 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:`git remote add origin <server>` ,比如我们要让本地的一个仓库和 GitHub 上创建的一个仓库关联可以这样`git remote add origin https://github.com/Snailclimb/test.git`
137-
- 将这些改动提交到远端仓库:`git push origin master` (可以把 _master_ 换成你想要推送的任何分支)
136+
- 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:`git remote add origin <server>`比如我们要让本地的一个仓库和 GitHub 上创建的一个仓库进行关联,可以这样:`git remote add origin https://github.com/Snailclimb/test.git`
137+
- 将这些改动提交到远端仓库:`git push origin master`可以把 _master_ 换成你想要推送的任何分支)。
138138

139139
如此你就能够将你的改动推送到所添加的服务器上去了。
140140

141141
### 远程仓库的移除与重命名
142142

143-
- 将 test 重命名为 test1:`git remote rename test test1`
144-
- 移除远程仓库 test1:`git remote rm test1`
143+
- 将 test 重命名为 test1:`git remote rename test test1`
144+
- 移除远程仓库 test1`git remote rm test1`
145145

146146
### 查看提交历史
147147

148-
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 `git log` 命令。`git log` 会按提交时间列出所有的更新,最近的更新排在最上面。
148+
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是 `git log` 命令。`git log` 会按提交时间列出所有的更新,最近的更新排在最上面。
149149

150-
**可以添加一些参数来查看自己希望看到的内容**
150+
**可以添加一些参数来查看自己希望看到的内容**
151151

152152
只看某个人的提交记录:
153153

@@ -157,19 +157,19 @@ git log --author=bob
157157

158158
### 撤销操作
159159

160-
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 `--amend` 选项的提交命令尝试重新提交:
160+
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有 `--amend` 选项的提交命令尝试重新提交:
161161

162162
```shell
163163
git commit --amend
164164
```
165165

166-
取消暂存的文件
166+
取消暂存的文件
167167

168168
```shell
169169
git reset filename
170170
```
171171

172-
撤消对文件的修改:
172+
撤消对文件的修改
173173

174174
```shell
175175
git checkout -- filename
@@ -188,39 +188,39 @@ git reset --hard origin/master
188188

189189
我们通常在开发新功能、修复一个紧急 bug 等等时候会选择创建分支。单分支开发好还是多分支开发好,还是要看具体场景来说。
190190

191-
创建一个名字叫做 test 的分支
191+
创建一个名字叫做 test 的分支
192192

193193
```shell
194194
git branch test
195195
```
196196

197-
切换当前分支到 test(当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样)
197+
切换当前分支到 test(当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样)
198198

199199
```shell
200200
git checkout test
201201
```
202202

203203
![](https://oss.javaguide.cn/github/javaguide/tools/git/2019-3%E5%88%87%E6%8D%A2%E5%88%86%E6%94%AF.png)
204204

205-
你也可以直接这样创建分支并切换过去(上面两条命令的合写)
205+
你也可以直接这样创建分支并切换过去上面两条命令的合写):
206206

207207
```shell
208208
git checkout -b feature_x
209209
```
210210

211-
切换到主分支
211+
切换到主分支
212212

213213
```shell
214214
git checkout master
215215
```
216216

217-
合并分支(可能会有冲突)
217+
合并分支可能会有冲突):
218218

219219
```shell
220220
git merge test
221221
```
222222

223-
把新建的分支删掉
223+
把新建的分支删掉
224224

225225
```shell
226226
git branch -d feature_x
@@ -234,11 +234,11 @@ git push origin
234234

235235
## 学习资料推荐
236236

237-
**在线演示学习工具**
237+
**在线演示学习工具**
238238

239-
「补充,来自[issue729](https://github.com/Snailclimb/JavaGuide/issues/729)」Learn Git Branching <https://oschina.gitee.io/learn-git-branching/> 。该网站可以方便的演示基本的 git 操作,讲解得明明白白。每一个基本命令的作用和结果
239+
「补充,来自 [issue729](https://github.com/Snailclimb/JavaGuide/issues/729)」Learn Git Branching <https://oschina.gitee.io/learn-git-branching/>。该网站可以方便的演示基本的 git 操作,每一个基本命令的作用和结果讲解得明明白白
240240

241-
**推荐阅读**
241+
**推荐阅读**
242242

243243
- [Git 入门图文教程(1.5W 字 40 图)](https://www.cnblogs.com/anding/p/16987769.html):超用心的一篇文章,内容全面且附带详细的图解,强烈推荐!
244244
- [Git - 简明指南](https://rogerdudler.github.io/git-guide/index.zh.html):涵盖 Git 常见操作,非常清晰。

0 commit comments

Comments
 (0)