Git基础入门学习
1- Git简介
- Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
2- 什么是版本控制?
-
版本控制是一种记录一个或若干文件内容变化
-
以便将来查阅特定版本修订情况的系统
-
将每一次的变化记录下来
-
在未来可对每一次保存的版本进行更新和回退
这就是版本控制
3- 为什么要使用版本控制?
-
软件开发中采用版本控制系统是个明智的选择。
-
有了它你就可以将某个文件回溯到之前的状态。
-
甚至将整个项目都回退到过去某个时间点的状态。
-
就算你乱来一气把整个项目中的文件改的改删的删,
-
你也照样可以轻松恢复到原先的样子。且额外增加的工作量却微乎其微。
(它很方便,且很强大!)
- 你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异的问题出现的原因,又是谁在何时报告了某个功能缺陷等等。
4- Git与SVN的区别
Git和SVN都是版本控制系统工具
个人理解:Git其实就是不把鸡蛋放在同一个篮子里
-
Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,
例如 SVN,CVS 等,最核心的区别。 -
Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统
都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。 -
Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,
其实它就是版本库中的另外一个目录。 -
Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
-
Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。
这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
a. 集中式(SVN)
svn因为每次存的都是差异 需要的硬盘空间会相对的小一点 可是回滚的速度会很慢
优点:
代码存放在单一的服务器上 便于项目的管理
缺点:
网断了就没法上传:需要手动来做版本控制(复制粘贴存放)不方便
服务器宕机: 员工写的代码得不到保障
服务器炸了: 整个项目的历史记录都会丢失
b. 分布式(Git)
git每次存的都是项目的完整快照,需要的硬盘空间会相对大一点(只多了一点点,它是压缩才存储的)
快照:(快照是指向保存在存储设备中的数据的引用标记或指针。我们可以这样理解,快照有点像是详
细的目录表,但它被计算机作为完整的数据备份来对待)
分布式的版本控制系统在管理项目时 存放的不是项目版本与版本之间
的差异.它存的是索引(所需磁盘空间很少 所以每个客户端都可以放下整个
项目的历史记录)
(Git团队对代码做了极致的压缩 最终需要的实际空间比svn多不了太多 可是Git的回滚速度极快)
优点:
完全的分布式
缺点:
学习起来比SVN陡峭
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1. 断网的情况下也可以进行开发 (因为版本控制是在本地进行的)
2. 使用github进行团队协作
哪怕github挂了每个客户端保存的也都是整个完整的项目
(包含历史记录的!!!)
5- Git指令(掌握)
第一次要使用Git,就要配置用户名字信息和用户邮箱信息
成功修改之后,可在配置列表查看
git基础指令
指令 | 作用 效果 |
---|---|
git config --global user.name ‘名字’ | 初始化配置用户名字信息 |
git config --global user.email 邮箱 | 初始化配置用户邮箱 |
git config --list | 初始化配置列表查看 |
git --version | 查看git版本 |
git init | git初始化 |
git status | 检测当前文件状态 |
git add 文件名 | 将文件加入管理 |
git add . | 将所有文件加入管理 |
git commit -m 'v1’ | 生成版本 |
注意:git窗口和dos窗口是有本质区别的
6- Git区域
1. 工作区
你在工作区做修改,git不会有实质性的操作
2. 暂存区
一些小方面的修改,放入暂存区,当暂存区存入一定程度,再转入版本库
3. 版本库
用来存放版本快照
7- Git底层概念基础linux命令(了解)
基础的linux命令
基本Linux指令 | 作用效果 |
---|---|
clear | 清除屏幕 |
echo 'test content’ | 往控制台输出信息 echo ‘test content’ > test.txt |
ll | 将当前目录下的 子文件&子目录平铺在控制台 |
find 目录名 | 将对应目录下的子孙文件&子孙目录平铺在控制台 |
find 目录名 -type f | 将对应目录下的文件平铺在控制台 |
rm 文件名 | 删除文件 |
mv 源文件 重命名文件 | 重命名 |
cat 文件名 | 查看对应文件的内容 |
vim 文件名 (在英文模式下) | 按 i 进插入模式 进行文件的编辑 |
vim 文件名 (在英文模式下) | 按 esc 键&按:键 进行命令的执行 |
vim 文件名 (在英文模式下) | q! 强制退出(不保存) |
vim 文件名 (在英文模式下) | wq 保存退出 |
vim 文件名 (在英文模式下) | set nu 设置行号 |
8- 初始化新仓库
命令:git init
**解析:**要对现有的某个项目开始用Git管理
只需到此项目所在的目录,执行:git init
**作用:**初始化后,在当前的目录下会出现一个名为 .git 的目录,
所有Git需要的数据和资源都存放在这个目录中。
不过目前,仅仅是按照既有的结构框架初始化好了里面所有的文件和目录,但我们还没有开始跟踪管理项目中的任意一个文件.
了解
9- .git目录内文件说明
目录名 | 目录包含信息 |
---|---|
hooks | 目录包含客户端或服务端的钩子脚本 |
info | 包含一个全局性排除文件 |
logs | 保存日志信息 |
objects | 目录存储所有数据内容 |
refs | 目录存储指向数据的提交对象的指针(分支) |
config | 文件包含项目特有的配置选项 |
description | 用来显示对仓库的描述信息 |
HEAD | 文件指示目前被检出的分支 |
index | 文件保存暂存区信息 |
今日总结
SVN和Git都是版本控制系统的工具
Git的分布式管理是Git较于SVN的优胜点之一
且Git回滚速度快于SVN.相较于SVN,Git在版本控制这方面强大的功能已经完胜了
(Git YYDS)
学习了Git的基础指令,以及了解了Linux的一些基础指令
对初始化指令git init 后生成.git目录内文件的了解
github就是git的中央服务器
GitHub是一个远端仓库,当公司遇到什么大型的疑难BUG后
可以通过GitHub来发送远程求助,最终达到一个解决问题的目的