Home 谈谈分布式版本控制系统,终端,以及git的原理
Post
Cancel

谈谈分布式版本控制系统,终端,以及git的原理

什么是git,为什么我们需要版本控制系统(Version controlling system)

想象这样一种情况

  • A 第一次搭建博客,本来已经成功运行,现在想要添加一些功能,之后网站突然崩溃了。A 意识到是自己添加的代码出了问题。A想回到上一个 “版本”
  • A 和 B 合作开发一款app,A先写好了一个部分,随后AB一起在此基础上开发。 在这里,频繁的同步两人的文件是繁琐的,怎么样才能让两人的“版本”合并。

由此,Linus 在2005年用 C写出了 一款分布式的版本控制系统 Git

如果你没有安装git,按照CS61B git guide配置即可。

1
2
3
4
$ cd Developer 
$ git init gitLearn
Initialized empty Git repository in /Users/luozhanpeng/Devloper/gitLearn/.git/
// 初始化了一个名叫 gitLearn 的 代码仓库

接下来,以一个简单的网站为例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ touch index.html style.css
// 意为,新建 一个 超文本标记语言 和一个层叠样式表文件
$ git status 
// 以下为 git 给出的反应
On branch main

No commits yet 

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    index.html
    style.css

nothing added to commit but untracked files present (use "git add" to track)
  • git 提示说 没有东西可以提交,但是尚有未追踪的文件存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ git add index.html style.css 
// 或者 git add . (.代表本文件夹)
$ git status 
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   index.html
    new file:   style.css

[main (root-commit) 314f4ac] something to say
 2 files changed, 23 insertions(+)
 create mode 100644 index.html
 create mode 100644 style.css
$ git commit -m "something ot say" 

[main (root-commit) 314f4ac] something to say
 2 files changed, 23 insertions(+)
 create mode 100644 index.html
 create mode 100644 style.css
  • 我们已经 “提交了” index.htmlstyle.css到main
  • 接下来,我们为网站创建第一个版本0.01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ git branch 0.01 
$ git branch 0.02 
// 为网页创建第一个版本 0.01 以及 第二个版本 0.02
$ git branch // 查看现有的分支

  0.01
  0.02
* main

$ git checkout 0.01 // 切换至 0.01 版本
$ git branch

* 0.01
  0.02
  main

// *号 已经到了 0.01前,意思是,现在在0.01这个版本开始操作git
1
2
3
4
5
6
7
8
$ touch script.js 
$ git status 
On branch 0.01
Untracked files:
  (use "git add <file>..." to include in what will be committed)
   script.js

  • 接下来,使用git addgit commit 提交至 0.01 版本
  • 查看该文件夹,可以看到有3个文件
  • 再使用 git checkout main 再此查看此文件夹,发现只有原先的两个文件
  • 这就是版本控制系统

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
$ cd gitLearn
$ find .git
.git
.git/config
.git/objects
.git/objects/92
.git/objects/92/3c3c0d66fa9b0e561827d9276b2c9f9bdba8dd
.git/objects/51
.git/objects/51/5b962f04b9f1aac794432044e7ab186f084a9a
.git/objects/33
.git/objects/33/61d2b3508e726e7827769303b39fd5d8f200e7
.git/objects/bd
.git/objects/bd/67d436f5b2f23101707532f2cc33fde5d5e637
.git/objects/pack
.git/objects/4c
.git/objects/4c/5bc2e4a223551079331046b632b3b7c1401800
.git/objects/info
.git/objects/99
.git/objects/99/2982e416aba904e46de16bfc79ec1cb2c71f13
.git/objects/52
.git/objects/52/65c0380d1e5071b9d382eab4d66b18e5fca1bd
.git/HEAD
.git/info
.git/info/exclude
.git/logs
.git/logs/HEAD
.git/logs/refs
.git/logs/refs/heads
.git/logs/refs/heads/0.01
.git/logs/refs/heads/0.2
.git/logs/refs/heads/main
.git/description
.git/hooks
.git/hooks/commit-msg.sample
.git/hooks/pre-rebase.sample
.git/hooks/pre-commit.sample
.git/hooks/applypatch-msg.sample
.git/hooks/fsmonitor-watchman.sample
.git/hooks/pre-receive.sample
.git/hooks/prepare-commit-msg.sample
.git/hooks/post-update.sample
.git/hooks/pre-merge-commit.sample
.git/hooks/pre-applypatch.sample
.git/hooks/pre-push.sample
.git/hooks/update.sample
.git/hooks/push-to-checkout.sample
.git/refs
.git/refs/heads
.git/refs/heads/0.01
.git/refs/heads/0.2
.git/refs/heads/main
.git/refs/tags
.git/index
.git/COMMIT_EDITMSG

This post is licensed under CC BY 4.0 by the author.