【Git】Git简单使用教程
版本控制
什么是版本控制
版本控制系统是一段时间内帮助跟踪代码中的更改的软件。 当开发人员编辑代码时,版本控制系统会为文件拍摄快照。 然后,它会永久保存该快照,以便以后可以根据需要重新调用它。
如果没有版本控制,开发人员会尝试在其计算机上保留多个代码副本。 这很危险,因为很容易在错误的代码副本中更改或删除文件,可能会丢失工作。 版本控制系统通过管理代码的所有版本来解决此问题,一次向团队提供多个版本。
版本控制的优点
- 实时跨区域多人协作开发;
- 组织和保护你的源代码及文档;
- 统计工作量;
- 跟踪记载一个或多个文件的历史记录;
- 并行开发,提高效率;
- 减轻开发负担,节约时间,降低人为的错误;
常见的版本控制工具
- Git
- SVN
- CVS
- …
版本控制的分类
-
本地版本控制
记录文件每次的更新,对每个版本做快照或是记录补丁文件,适合个人使用,例如:RCS;
-
集中化的版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改,例如:SVN;
**存在问题:**如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作;如果发生服务器磁盘损坏,会造成数据丢失;
-
分布式版本控制
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
优势:分布式版本控制系统可以指定和若干不同的远端代码仓库进行交互。在同一个项目中,分别和不同工作小组的人相互协作。 可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这是在集中式系统中是无法实现的。
Git简介
Git发展史
Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
- 速度很快
- 设计简单
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 成熟完善,在高度易用的同时,仍然保留着初期设定的目标,以及Git强大的非线性分支管理系统。
Git与SVN的区别
- Git是分布式版本控制,SVN是集中化版本控制。
- Git把内容按元数据方式存储,而SVN是按文件。
- Git分支和SVN的分支不同。
- Git没有一个全局的版本号,而SVN有。
- Git的内容完整性要优于SVN。
安装Git和环境配置
安装Git
-
下载Git,Git (git-scm.com),选择无中文的安装路径,默认安装即可
官网下载慢可以选择国内镜像下载
-
启动Git
Git Bash:Linux风格命令行,推荐使用
Git CMD:Windows风格命令行
Git GUI:图形界面Git,初学者不推荐使用
常用Linux命令
cd
:改变目录;cd..
:回到上一级目录;pwd
:显示当前所在目录路径;ls
(ll
):列出当前目录下所有文件,ll
更为列出所有文件更详细的信息;touch
:新建一个文件rm
:删除文件mkdir
:新建目录rm -r
:递归的删除目录mv
:移动文件reset
:重新初始化终端clear
:清屏history
:查看命令历史help
:帮助exit
:退出#
注释符
Git的配置和工作原理
Git的配置
查看配置git config -l
1 | diff.astextplain.textconv=astextplain |
查看不同级别配置文件
1 | git config -system -l #查看系统的配置 |
配置文件的位置
系统级别:Git安装路径/etc/gitconfig
全局配置:C:\Users\你电脑用户名\.gitconfig
设置用户名与邮箱(一定要配置)
1 | git config --global user.name "用户名" |
Git的工作原理
工作区域
Git本地由三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。
若在加上远程Git仓库(Remote Directory)就可以分为四个工作区域。
文件在这四个区域的转换关系如下:
- Working Directory:工作区,平时存放项目代码的地方;
- Stage(intde):暂存区,临时存放改动内容;实际上是一个文件,主要存放即将提交的文件列表信息;
- Repository:本地仓库,安全存放数据的位置,里面由你调教所有版本的数据;
- Remote Direcotry:远程仓库,托管代码的服务器;
Git仓库中HEAD指向的版本:
- Directory:使用Git管理的目录,也就是一个仓库,包含我们的工作空间和Git的管理空间;
- WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间;
.git
:存放Git管理信息的目录,初始化仓库的时候自动创建;- Stage(intde):暂存区;
- Local Repo:本地仓库,存放在本地的版本库;HEAD是当前的开发分支(branch);
- Stash:隐藏,一个工作状态保存站,用于保存和恢复WorkSpace中的临时状态;
工作流程
Git工作流程:
- 在工作目录中添加、修改文件;
- 将需要进行版本管理的文件放入暂存区域;
- 将暂存区域的文件提交到Git仓库;
Git管理文件的三种状态:已修改(modified),已暂存(staged),已提交(committed);
Git项目创建和克隆
创建工作目录
工作目录(WorkSpace)一般是希望Git帮助你管理的文件夹,可以是项目目录,也可以是一个空目录,建议不要有中文;
常用命令:
本地仓库搭建
创建本地仓库有两种方法:
-
创建全新仓库:需要在Git管理的项目根目录执行
1
2# 初始化本地仓库
git init -
克隆远程仓库:将远程服务器上的仓库完全镜像到本地
1
2# 克隆远程仓库到本地
clone 远程仓库地址
Git的基本操作命令
文件的四种状态
- Untracked:未跟踪,文件在文件夹中,但为加入到git库,不参与版本控制;可以通过
git add
变为Staged状态。 - Unmodify:文件已经入库,未修改;如果被修改,则变为Modified;使用
git rm
移出版本库,变为Untracked状态。 - Modified:文件已修改,可通过
git add
进入Staged状态;使用git checkout
则丢弃修改,回到Unmodify状态。 - Staged:暂存状态,执行
git commit
同步到库中,这时库文件和本地文件一致了,又变为Unmodify状态;执行git reset HEAD filename
取消暂存,文件变为Modified状态。
文件状态操作
查看文件状态
1 | # 查看指定文件状态 |
添加和提交文件
1 | git status |
忽略文件
有时我们不想把一些文件放入版本控制,例如数据库文件,临时文件等
在主目录下创建.gitignore
文件,配置规则如下:
#
号开始或空行将会被忽略;- 可使用Linux的通配符,如:
*
代表多个任意字符;?
代表一个字符,[ab]
代表可选字符范围,{str1,str2}
代表可选字符串… - 如果名称最前方有
!
,表示例外规则,不被忽略; - 如果名称最前方有
/
,表示忽略/
前的内容; - 如果名称最后方有
/
,表示忽略/
后的内容;
1 | # 注释 |
Gitee注册及配置SSH公钥
-
注册gitee账号,完善个人信息;
也可以选择Github
-
设置本机绑定SSH公式,实现免密码登录!
1
2
3
4# 进入 C:\Users\你电脑用户名\.ssh目录
# 生成公钥命令
ssh-keygen -t rsa -C "你的邮箱"
# 然后回车不设置密码这时.
ssh
下就会生成两个文件 -
将公钥信息
public key
添加到Gitee账户中即可复制上方公钥文件里的内容,粘贴到下方公钥的位置保存即可!
Gitee SSH公钥添加位置
公钥粘贴上方复制好的;
Github 添加SSH
-
创建一个自己的远程仓库
创建之后,可以选择地址克隆到本地
克隆博客到本地
1
2
3
4
5
6
7$ git clone https://gitee.com/jokerdig/idea-connection.git
Cloning into 'idea-connection'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.
IDEA集成Git
-
打开IDEA,新建一个项目
-
项目绑定Git
把刚刚克隆的远程文件复制到新建的IDEA项目中即可
复制好之后,打开IDEA
-
提交文件到远程仓库
命令提交
打开IDEA左下角的
Terminal
,添加所有文件:1
git add .
提交文件到本地仓库
1
git commit -m "第一次git提交"
push到远程服务器
1
git push
-
查看远程仓库
关于Git的分支
每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
Git分支基本命令
1 | # 创建分支 |