这是我参与「第四届青训营 」笔记创作活动的第3天
版本控制
什么是Revision Control?
管理多人协同开发项目的技术
如果没有版本控制,在软件开发过程中会出现很多问题。多人开发就必须要使用版本控制。
常见的版本控制工具
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS
- TFS
- Visual Studio Online
版本控制分类
1. 本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人使用。
2. 集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本。如果不连网,用户就无法看到历史版本。若服务器损坏,或有丢失所有数据的风险。
3. 分布式版本控制 Git
每个人都拥有全部的代码,但是存在安全隐患。
Git环境配置
选择淘宝镜像下载
安装,一般都点下一步。
常用Linux命令
-
touch index.js新建一个文件 -
rm index.js删除一个文件;rm -r删除一个文件夹 -
mv移动文件 -
reset重新初始化终端 -
clear清屏 -
history查看历史命令 -
help帮助 -
#注释
Git配置
查看配置
# 查看配置
$ git config -l
diff.astextplain.textconv=astextplain
...
init.defaultbranch=master
user.name=LittleFish0820
user.email=895677606@qq.com
# 查看系统配置 在Git安装目录下的gitconfig: Git\etc\gitconfig
$ git config --system --list
# 查看当前用户配置 在C:\Users\Administrator\.gitconfig
$ git config --global --list
因此可以直接编辑配置文件
设置用户名与邮箱
$ git config --global user.name "LittleFish"
$ git config --global user.email "895677606@qq.com"
Git基本理论
四个区域
- Git本地有三个工作区域
- 工作目录(Working Directory)
- 暂存区(Stage/Index)
- 资源库(Repository Or Git Directory)
- 远程Git仓库(Remote Directory)
graph LR
id0(Working Directory) --"git add ."--> id1("Stage(Index)")
id1("Stage(Index)") --"git commit"--> id2("Repository")
id2("Repository") --"git push"--> id3("Remote Directory")
三种状态
Git管理的文件有三种状态
- 已修改(Modified)
- 已暂存(Staged)
- 已提交(Committed)
Git项目搭建
本地仓库搭建
# 在当前目录新建一个Git
$ git init
克隆远程仓库
$ git clone [url]
Git文件操作
文件的四种状态
Untracked文件虽在,并未加到git库,不参与版本控制Unmodify文件入库,但未修改 (取消用git rm --cached <file>)Modified文件已修改Staged暂存状态
查看文件状态
# 查看指定文件状态
$ git status [filename]
# 查看所有文件状态
$ git status
# 添加所有文件到暂存区
$ git add .
# 提交暂存区中的内容到本地仓库 -m 提交的信息
$ git commit
一个例子
$ touch pom.xml
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
pom.xml
nothing added to commit but untracked files present (use "git add" to track)
# -------------------------------------------------
$ git add .
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: pom.xml
# -------------------------------------------------
$ git rm --cached pom.xml
rm 'pom.xml'
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
pom.xml
nothing added to commit but untracked files present (use "git add" to track)
# -------------------------------------------------
$ git add pom.xml
$ git commit pom.xml
Aborting commit due to empty commit message.
[master (root-commit) debfca6] new file: pom.xml
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 pom.xml
$ git status
On branch master
nothing to commit, working tree clean
忽略文件
$ touch .gitignore
- #表示注释
- *表示任意多个字符
- ?代表一个字符
- [abc]表示可选字符范围
- {String1, String2, ...}表示可选字符串
- !表示不被忽略
- /temp表示要忽略的文件在此目录下,子目录的文件不忽略
- temp/表示要忽略的是子目录,而非文件
*.txt
!lib.txt
/temp
build/
doc/*.txt
使用gitee
免密码登录
# 进入C:\Users\Administrator
$ mkdir .ssh
$ cd .ssh/
$ ssh-keygen -t rsa
将公钥信息添加到gitee账户
$ ssh -T git@github.com
Hi LittleFish0820! You've successfully authenticated, but GitHub does not provide shell access.
在Gitee创建仓库
手动完成
把本地的仓库推送到远程仓库
$ git remote add origin git@github.com/LittleFish0820/miniFlink.git
$ git push -u origin master
如果创建的仓库有其他的文件(比如README.md),需要先pull再push
$ git pull --rebase origin master
Git分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 创建分支
$ git branch (branchname)
# 切换分支
$ git checkout (branchname)
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d (branchname)
# 删除远程分支
$ git push origin --delete (branchname)
$ git branch -dr [remote/branch]