1、git介绍
git: 版本控制器
其主要作用, 保证项目代码在开发阶段, 任何代码都不会丢失. 而且可以快速的获取到任何阶段的开发代码
使用git目标:
1, 使用git, 完成本地项目进度版本管理
2, 使用git, 将本地代码同步到远程测试服务器. 同时与他人协作开发
2、git安装
2.1 windows安装
windows安装
官网下载包安装,安装好后本地开始菜单有Git
,使用Git Bash
即可
2.2 linux安装
linux安装
1、官网压缩包安装
2、yum 指令安装
3、git基本功能
本地windows开发
然后才提交到服务器
实例 -- windows的Git Bash 使用(先看实例)
> cd d:
> cd 本地项目根目录
// cd web/app/test/
# 现在到了项目根目录,然后初始化 git
> git init
# 到了第一个时间节点,提交第一版本代码
> git add .
// 提交第一版本所有代码
> git commit -m '第一版本'
// 对刚提交的版本做一个版本描述,记录
# 查看提交记录日志
> git log
//注释:途中 master :主线 ,还有 branch:分支
# 此时到了第二个时间节点,提交第二个版本(第一版本的代码有修改,第二版本代码新增)
> git add .
// 提交第二版本所有代码(包含修改第一版本的,新增的第二版本的)
> git commit -m '第二版本'
> git log
# 此时需要从第二版本回退到第一版
git reset --hard 版本号
// 版本号就是第一版本号(需要去到的版本号,可以任意取前10位左右字符即可,保证能区别版本)
# 此时是第一版本
git reflog
// 该指令查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
# 需求要回到第二版本
git reset --hard 第二版本号
3、git指令
本地开发
3.1 git init
初始化git版本库
3.2 git config
配置
> git config --list
列出配置项
> git config 配置项名 值
修改配置项
> git config --list
列出配置项
配置如下
> git config --global user.name "sgw "
> git config --global user.email "hello_sgw@163.com"
修改
> git config --global --edit"
删除
> git config --global --unset user.email
注意这里:支持三个层级
git config --system
【1、系统】 针对于所有的用户的配置
git config --global
【2、全局(用户级)】 针对于当前系统的登录用户, 配置生效, 无论该用户管理几个git版本库项目, 配置是一致的
git config --local
【3、项目(本地)】 仅仅针对于当前项目起作用.
-- 范围小的配置会重写范围大的配置 --
3.3 git add
添加到暂存
> git add 文件列表
添加相应的文件到暂存区
> git add .
添加全部文件到暂存区
3.4 git commit
提交版本
//如果是第一次提交(第一次安装git, 第一次提交, 需要配置提交的用户信息才可以
> git commit –m ‘版本描述’
提交版本 //一旦提交, 修改就不在暂存区了
> git commit
// 不带 ‘ -m 版本描述’,就会触发vi
,进行文件编写
> git commit –a –m ‘版本描述’
-a, 参数, 表示先完成 git add . 再去提交.
> git add . && git commit –m ‘版本描述’
// 等同上一个指令
3.5 git status
状态
3.5.1 工作区、暂存区、版本库概念
> git status
查看状态
工作区:
项目目录, 不包含.git
的部分, 就是工作区. 我们在工作区完成代码的编写
暂存区:
临时存储需要被提交的修改的区域.内部的修改, 在commit
时, 会被提交到版本库中. 如果需要提交, 则必须现在暂存区进行整理才可以
版本库:
存储提交的版本的区域。是逻辑区域
,不是文件,没办法看到
3.5.2 文件状态
针对与文件所处的不同逻辑区域, 文件称之为一下状态:
未追踪
文件第一次出现在工作区, 版本库还没有存储该文件的状态
已追踪
只要第一次,add了文件, 文件就是已追踪.
未修改
文件在工作区未被编辑.
已修改
文件在工作区被修改.
未暂存
文件已修改, 但是没有add到暂存区
已暂存
已经将修改的文件add到暂存区
未提交
已暂存的文件, 没有commit提交,处于暂存区
已提交
提交到版本库的文件修改
3.6 git rm
删除文件, 删除追踪
> git add 文件名
将文件加入到版本库暂存区. 如果文件新加, 则追踪
> git rm 文件名
将文件从版本库的追踪状态删除. 同时删除文件
> git rm 文件名
3.7 git log
提交的日志
> git log
默认触发一个翻页查看程序. less(类似于more), 通过空格,
ctrl+b,
q
完成 下一页, 上一页, 退出 操作
> git log --author="用户"
// 用户过滤
> git log --after="2018-07-30 10:00:00" --before="2018-07-30 11:00:00"
// 时间段过滤
把用户和时间结合用也可以
> git log --pretty="oneline"
//格式化输出,只显示版本号和备注信息 > >> git log -p
//输出版本内修改内容
3.8 git reset
重置版本
重置
> git reset --hard 目标版本提交的ID
// git log获取ID
注意: 重置后, 在提交日志中, 不能出现, 在重置版本之后的代码版本了
如何重置到已有的后面版本中(切换到将来)?
> git reflog
关联日志, 用于记录, 版本的重置状况; 可以记录下来,从哪个版本切换过来的,里面有版本号,就可以切换到想要的版本 。
与log不同, log仅仅记录到目前为止的版本
硬重置
git reset --hard 版本号
将当前的工作区(代码), 直接切换到目标的版本
软重置
git reset --soft 版本号
1、与硬重置相对,代码也会切换到目标版本。
2、但是,会保留工作区中的修改。会记录下当前版本
与切换的目标版本
间的差异(修改),并暂存到暂存区
中;此时决定权就在用户手上, 可以选择==>A、 保留某些修改(再次提交即可)
,B、重置某些修改
软重置常用场景:
某个版本提交了10个修改. 但是其中3个需要会退到上一版本, 7个修改需要保留.如果是硬回退, 10个修改全部需要丢弃. 可以选软回退. 记录了这些修改. 选择性完成 撤销修改还是保留修改
取消暂存
> git reset HEAD 文件名列表
取消某个文件的暂存。注意, 取消暂存,,不是取消修改,文件的修改还是存在, 而仅仅是不在暂存区而已,需要撤销修改
撤销修改
> git checkout -- 文件名列表
发生了修改
撤销修改
版本指针
当前版本的指针永远指向当前所处的版本。
通常情况是指向最新的版本,当切换版本时,调整了指针的版本指向没有消失,指向发生了改动
使用HEAD指针的相对操作完成重置
HEAD^ 前1个版本, HEAD~1
HEAD^^ 前2个版本, HEAD~2
HEAD^^^ 前3个版本, HEAD~3
HEAD~50 前50个版本
> git reset --soft HEAD^
指向前一个版本
忽略追踪
> vim .gitignore
注意!!!
一定要在第一次
git add
文件前,完成忽略配置。一旦文件被追踪,忽略不能生效!
此时需要删除该文件git rm
,才能在下次生效。
git init
之后,就需要完成: 配置vim .gitignore
工作
4、远程(多人)协作【上】
1、多人协作部署结构
2、远程(公共)版本库
通常,仅仅做代码版本库的管理,不做开发而用。
在配置远程(公共)版本库时,选择裸版本库,只有版本库,没有工作区的版本库.
(仅仅需要.git
目录即可)
在 linux 上
搭建该公共(裸)版本库,前提,linux
已经安装了git
通常裸库, 都是使用.git
作为目录名的结束,表示是个版本库目录
裸库
目录中, 没有工作区, 直接就是.git对应的内容
注意:这里linux上的 zhangsan的目录为
/home/zhangsan/repo/shop.git
3、利用远程(公共)版本库, 克隆本地库
本地, 需要通过clone实现, 本地版本库的创建. 克隆自远程版本库
回到windows本地的git去操作!克隆远程服务器linux版本库(注意windows的git回到目录下去克隆)
指令是: git clone
git clone ssh://zhangsan@120.xx.xx.xx:22/home/zhangsan/repo/shop.git
linux上裸板本库的用户名@ip地址 + 上一步裸板本库的服务器地址目录
回到windows下本地git,执行如下命令克隆
正常情况
报错情况 git-upload-pack: command not found
解决方案是: 在远程版本库
上, 建立一个符号链接, 链接: git-upload-pack
到zhangsan登录的linux下执行命令sudo ln -s /usr/bin/git-upload-pack /bin/
【注意:zhangsan的git-upload-pack是 /usr/bin/git-upload-pack目录】
【上面语法意思,就是把/usr/bin/git-upload-pack
建立一个符号链接到/bin/
上】
【符号链接
知识参考本文底部#附录
】
成功创建克隆的shop目录
如果想
改名,例如在windows的git执行时,把shop改成othershop,则 在克隆时指令如下:
othershop
git clone ssh://zhangsan@120.xx.xx.xx:22/home/zhangsan/repo/shop.git
# 附录
1、 链接文件
一种特殊类型的文件,访问文件的特殊(快捷)的方式
1、符号链接(快捷方式)
symbol link,软链接
linux上,符号链接特点
1、使用
l
表示
2、有->
箭头表链接
目的, 提供某个文件, 的多种快速访问方式
实例 -- 设置符号链接
语法> ln -s 源文件 链接文件
操作符号链接文件 two.log.link, 就是操作了源文件 one.log
删除了源文件 one.log, 链接文件就失效了
2、9.2硬链接 hard link
不是一个快捷方式指向另一个文件,而是两个文件名同时引用一个文件内容。类似(PHP 引用传递 $v2 = &$v1
)
一个文件内容,提供了多种访问的途径,一旦建立硬链接文件后, 源文件与目标链接文件间, 没什么关系了
语法 > ln 源文件 链接文件
修改其中一个文件, 另一个也变.
但是删除其中一个, 另一个不受影响