git学习
1.git简介
Git是用C开发的
目前世界上最先进的分布式版本控制系统
2.集中式&分布式
-
集中式版本控制系统(主从结构)
-
概要
版本控制在中央服务器 版本库是集中存放在中央服务器的,每次commit到中央服务器
-
缺点
修改必须提交到中央服务器,由中央服务器集中处理 必须联网才能工作,对网络带宽要求较高,断网情况下,既不能提交也不能回滚 中央服务器出了问题,无法回滚版本,所有人都无法工作
-
拓扑结构
-
-
分布式版本控制系统(同步)
-
概要
版本控制在本地 每次commit提交到本地,向中央服务器提交是push 有一个存储在服务器上的远程存储库和一个存储在每个开发人员的计算机中的本地存储库,每个人电脑都是一个完整的版本库 通常有一台充当“中央服务器”的电脑,只是为了方便交换大家的修改
-
优点
无需联网也可工作,不必一直连接到远程存储库即可进行工作 充当“中央服务器”的电脑出现故障也可工作,只是不方便交换修改
-
缺点
增加了本地存储空间的占用
-
拓扑结构
-
-
核心区别:版本库或者版本控制的位置在中央服务器还是本地电脑
3.基本Linux命令
cd+目录名: 改变到指定目录(change directory)
cd ..: 回退到上一目录(change directory)
pwd: 显示当前所在目录路径(print work directory)
ls: 列出当前目录下的所有文件(list files)
touch+文件名: 在当前目录下新建一个文件
rm+文件名: 删除文件(remove)
mkdir+文件夹名: 新建一个文件夹(make directory)
rm -r+文件夹名: 删除文件夹
rm -rf: 在Linux中为删除电脑中的全部文件
mv+需要移动的文件名/文件夹名+目标文件夹名: 将文件或文件夹移动到目标文件夹(move)
reset: 重新初始化加载终端
clear: 清屏
history: 查看命令历史
help: 帮助
exit: 退出
#: 注释
4.Git配置
-
查看当前配置
$ git config -l
-
配置用户名
$ git config --global user.name "Fengboyu"
-
配置邮箱
$ git config --global user.email "2859352492@qq.com"
-
查看系统配置
$ git config --system --list
-
系统配置文件位置
Git\etc\gitconfig
--system系统级 -
查看本地配置
$ git config --global --list
-
本地配置文件位置
C:Users\Administrator\.gitconfig
--global全局
5.Git基本理论(核心)
-
工作区域(4个)
- 本地工作区域
- 工作目录(Workspace):平常存放代码的地方
- 暂存区(Index):临时存放改动,只是一个文件
- 仓库(Repository):安全存放数据的位置,有提交的所有历史版本信息,HEAD指向最新的版本
- 远程工作区域(Remote):远程仓库,代码托管服务器
- 本地工作区域
-
工作流程
-
在工作目录中添加、修改文件
-
将需要版本管理的文件放入暂存区域:
git add .
-
将暂存区的文件提交到本地
git
仓库:git commit
-
提交到远程仓库:
push
-
对应三种状态
已修改modified 已暂存staged 已提交committed
-
流程图
-
6.Git项目搭建
-
本地仓库搭建
-
git
命令$ git init
-
结果
在目录里生成一个名为`.git`的隐藏目录,所有的版本信息均在其中
需要打开隐藏的项目才能看到
-
-
克隆远程仓库(将远程服务器上的仓库完全镜像至本地)
$ git clone [url]
7.Git常用文件操作
-
查看指定文件状态
$ git status "文件名"
-
查看所有文件状态
$ git status
-
添加所有文件到暂存区
$ git add .
-
提交暂存区中的内容到本地仓库
$ git commit -m "消息内容"
-
创建新的分支
$ git branch "新的分支名"
-
检出/切换节点
$ git checkout "节点哈希值或者分支名"
-
合并分支,将目标分支合并到当前分支
-
合并
$ git merge "分支名"
-
变基
$ git rebase "分支名"
-
8.忽略文件(第四五点不熟)
当我们不想把例如数据库文件、临时文件、设计文件等文件纳入版本控制中时,可以在主目录下建立.gitignore
文件,该文件中有以下规则:
- 忽略文件中的空行,或以
#
号开始的行会被忽略。 - 可以使用Linux通配符。例如:
*
号代表任意多个字符,?
号代表一个字符,[abc]
代表可选字符范围,{string1,string2.......}
代表可选字符串。 - 名称前面加
!
,表明不被忽略的特例。 - 名称前面加路径分隔符
/
,表示要忽略的文件在此目录下,而子目录中的文件不忽略。 - 名称后面加路径分隔符
/
,表示要忽略的是该名称目录下的子目录。
*.txt :忽略所有以`.txt`结尾的文件
!lib.txt :`lib.txt`例外
/temp :仅忽略该目录,子目录文件不忽略
build/ :忽略`build/`目录下的所有文件
doc/*.txt :忽略`doc/ooo.txt`,但是不包括`doc/server/kkk.txt`
!
,表明不被忽略的特例。
4. 名称前面加路径分隔符/
,表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5. 名称后面加路径分隔符/
,表示要忽略的是该名称目录下的子目录。
*.txt :忽略所有以`.txt`结尾的文件
!lib.txt :`lib.txt`例外
/temp :仅忽略该目录,子目录文件不忽略
build/ :忽略`build/`目录下的所有文件
doc/*.txt :忽略`doc/ooo.txt`,但是不包括`doc/server/kkk.txt`