版本控制器 (Version Control Systems)

  • 在未有工作工具流之前,使用的文件夹目录拷贝,效率低下,沟通成本高.
  • 集中式版本控制系统
    • SVN、VSS
  • 分布式版本控制系统
    • Git

由于因在工作中只用过git版本控制器,也就是分布式版本控制器.所以只总结git的使用.并且最近在极客时间上学习苏玲老师的「玩转git三剑客」的视频课程,一起学习,一起总结.

Git

Git优势如下 :

  1. 最优的存储能力
  2. 非凡的性能
  3. 开源的
  4. 很容易做备份
  5. 支持离线操作
  6. 很容易定制工作流程

Git下载

下载链接 : https://git-scm.com/downloads

Git最小配置

给git配置用户名和用户邮箱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git config [--local | --global | --system] user.name 'Your name' // 名称设置
git config [--local | --global | --system] user.email 'Your email' // 邮箱设置

--local 区域内本仓库
--global 全局仓库有效
--system 系统登录用户有效

// 设置之后 可以通过下面命令来查看设置是否成功
git config --list --global
// 设置的是全局 需加上--global 对全局查看
// 若为local 必须有一个本地项目仓库

// 清除命令
git config unset [--local | --global | --system] user.name 'Your name' // 名称设置
git config unset [--local | --global | --system] user.email 'Your email' // 邮箱设置
</br>

——2018.12.24日更新——

为每个项目添加.gitignore文件

通常提交项目会习惯性使用 git add . 的命令,这样的操作会将目录中所有文件都添加到文件暂缓区(git status 所展示的文件和文件所在地址),而实际项目提交当中会引用到大量的第三方库、方法,会导致将node_modules整个文件夹提交到暂缓区,推送到远程仓库会造成效率降低。所以会在每个项目文件夹中添加 .gitignore 文件来默认不上传这些文件。

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

上述文件是通过vue-cli自动构建项目目录下的.gitignore文件,默认git不提交各类编译器的配置文件第三方npm包、方法、插件文件。

Git commit 规范

引用@知乎者也的微信公众号文章:「我的commit规范」→ 传送门
还有@囧克斯的译文作为参考:「如何撰写Git提交信息」→传送门

git commit 信息应具有

1
2
3
4
5
<Header>

<Body>

<Footer>

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
说了半天不给个例子都是瞎扯淡,下面是一个完整的例子:

<Header>
feat: 添加了分享功能

<Body>
给每篇博文添加了分享功能

- 添加分享到微博功能

- 添加分享到微信功能

- 添加分享到朋友圈功能

<Footer>
Issue #1, #2

Close #1

Git操作

观看「玩转git三剑客」并新建git-test项目来进行Git的深度学习

建Git仓库

两种场景:

  1. 已有代码构建Git仓库:
1
2
$ cd 项目所在目录
$ git init
  1. 新建项目直接用Git管理:
1
2
3
$ cd 某个文件夹
$ git init project__name
$ cd project__name

Git基础命令

将编辑或修改过的文件提交到Git文件暂存区:

1
2
3
4
5
6
7
8
9
10
11
12
13
***.gitignore文件内添加的内容将不会提交到Git文件    暂存区***

*** 提交项目文件夹下单个文件 ***
$ git add test.html

*** 提交项目文件夹下某个文件夹 ***
$ git add text/

*** 提交已经提交过的文件或文件夹 ***
$ git add -u

*** 提交项目文件夹内所有文件 ***
$ git add . || $ gaa

查看Git文件暂存区(git status):

1
$ git status || $ gst

为添加到Git文件暂存区的文件添加描述(git commit):

1
2
3
4
5
6
*** 简单描述 ***
$ git commit -m '描述'

*** 有规范的描述 ***
$ git commit || $ gc
进入vim编辑描述即可,描述内容参考上述的commit规范

已添加到Git文件暂存区文件进行重命名(git mv):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*** 例如文件名A重命名为B ***

方法一 :
1.直接修改项目文件夹内文件名并提交文件
2.删除Git文件暂存区内原来的文件

$ git add B
$ git rm A
*** 若想恢复之前的操作清理掉暂缓区内的东西即可 ***
$ git reset --hard

方法二 :
$ git mv A B

推荐方法为方法二

查看Git提交历史(git log):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*** 查看完整历史 ***
--- 默认展示当前分支 ---
$ git log

*** 若查看所有分支 ***
--all

*** 查看简述 ***
--oneline

*** 查找最近几次的历史 ***
-n[math | 1,2,3,4]

*** 图形化 ***
--graph

Git图形界面命令

1
$ gitk

.git目录(cat-file 命令查看文件)

cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能。

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
*** .git文件夹里所包含的东西 ***

• COMMIT_EDITMSG
• config (当前 git 的配置文件)
• description (仓库的描述信息文件)
• HEAD (指向当前所在的分支)
例如 : 当前在 develop 分支,
实际指向地址是 refs/heads/develop

• hooks [文件夹]
• index
• info [文件夹]
• logs [文件夹]
• objects [文件夹] (存放所有的 git 对象)
对象哈希值前 2 位作为文件夹名称
后 38 位作为对象文件名,
可通过 git cat-file -p 命令,
拼接文件夹名称+文件名查看

• ORIG_HEAD
• refs [文件夹]
有两个分支的情况下:
master (master的文件)
test (test的文件)

• heads (存放当前项目的所有分支)
• tags (存放的当前项目的所有标签,又叫做里程碑)
• cat 命令, 功能:用来显示文件。 例如 cat text.md 显示 text.md 文件的内容
• ls -al 命令, 表示列出当前目录下的所有文件(包括隐藏文件)

*** git cat-file 命令 ***

• git cat-file -t 命令, 查看 git 对象的类型
• git cat-file -p 命令, 查看 git 对象的内容
• git cat-file -s 命令, 查看 git 对象的大小

commit、tree和blob对应关系

Git有3大对象,commit、tree和blob,它们之间对应关系类似于树.

例如: 本次提交信息中新增了index.html文件和style.css文件以及logo.png图片文件,此时执行git add .命令之后,执行git commit填写完描述信息过后,会生成对应的commit文件.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*** 此时结构应该如下 ***
commit [hash]
Author: [yourName]
Date: [commitTime]

describe

*** 输入 git cat-file -p [hash] 会出现如下信息***
tree [hash-tree]
parent [hash]

*** 接着输入 git cat-file -p [hash-tree] 便能查看到blob和tree***
tree [hash-tree-tree]
blob [hash-tree-blob]

*** 输入 git cat-file -p [hash-tree-blob] 即可查看到相信的文件内容***

__END__

o0Chivas0o
文章作者:o0Chivas0o
文章出处git使用
作者签名:Rich ? DoSomethingLike() : DoSomethingNeed()
版权声明:文章除特别声明外,均采用 BY-NC-SA 许可协议,转载请注明出处