版本控制

1、本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用

image-20230124181750407.png

2、集中版本控制 SVN

所有的版本数据都储存在服务器上,用户的本地只有自己以前所同步的版本。

image-20230124181827518.png

3、分布式版本控制 Git

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以在本地提交,只需在联网时push到相应的服务器。

image-20230124181944082.png

Git是目前世界上最先进的分布式版本控制系统

程序

1、Git Bash

Unix与Linux风格的命令行,使用最多,推荐最多

2、Git CMD

Windows风格的命令行

3、Git GUI

图形界面的Git

Git配置

1、查看用户名和邮箱

1
 git config --global --list

2、配置用户名和邮箱

用户名

1
 git config --global user.name "zishuQ"

邮箱

1
 git config --global user.email "1574908708@qq.com"

Git基本理论

工作区域

image-20230125204639545.png

1、工作区(Working Directory):

平时存放代码的地方

2、暂存区(Stage/Index):

用于临时存放你的改动,事实上只是一个文件,保存即将提交到文件列表信息

3、本地仓库(Repository/Git Directory)

安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

4、远程仓库(Remote Directory):

托管代码的服务器

image-20230125205111118.png

工作流程

1、在工作区添加、修改文件

2、将需要进行版本管理的文件放入暂存区域

3、将暂存区域的文件提交到git仓库

git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

image-20230125210019602.png

Git项目搭建

工作目录(WorkSpace)一般就是用Git管理的文件夹,可以是项目的目录,也可以是空目录

image-20230125212804036.png

1、创建全新的仓库

1
 git init

2、克隆远程仓库

1
 git clone [url]

Git文件操作

文件状态

  • Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制。通过git add 状态变为Staged
  • Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它修改,而变为Modified 。如果使用git rm 移出版本库,则成为Untracked 文件
  • Modified:文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过git add可进入暂存态,使用git checkout则丢弃修改过,返回Unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
  • Staged:暂存状态。执行git commit则将修改同步到库中,这时候库中的文件和本地文件又变为一致,文件未Unmodify状态。执行git reset HEAD filename取消暂存,文件状态为Modified

查看文件状态

1
2
3
4
5
6
7
8
# 查看指定文件状态
git status [filename]

# 查看所有文件状态
git status

# git add . 添加所有文件到暂存区
# git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息

忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立.gitignore文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最面有一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
  5. 如果名称的最面有一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
1
2
3
4
5
*.txt     # 忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt # 但 lib.txt除外
/temp # 仅忽略项目根目录下的TODO文件,不包括其他目录temp
build/ # 忽略build/目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

使用远程仓库 github 或者 gitee

1、注册账号

2、配置

3、ssh公钥设置

Git分支

两个分支互不干扰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 合并指定分支到当前分支
git merge [branch]

# 删除分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

如果出现了冲突,协商保留好谁的代码。

一般master是主分支稳定版,dev分支是开发版。