1.git工作原理
.git是什么
开源的分布式版本控制系统,去中心化。大小项目均可以灵活管理,参与开发人员比较灵活。
Linux的代码管理工具BitKeeper不适合开源社区,故Torvalds推出了GIT。
.工作架构
.工作流程图
.分支管理
git的分支只要不提交合并,对别人没任何影响。
svn的分支是完整的目录,你改了svn的分支,所有人的分支都随你而变。
分支命名:git的分支在本地和远程是自由匹配,而svn是全局统一的。
.内部数据存储方式
git为元数据统一存储管理,老vcs是以文件为按文件来存储。
.Git与GitHub关系
git是一个分布式的版本控制系统,最初应用在Linux源码协同开发中。
GitHub是一个基于git的项目托管平台,提供web界面,你可以在上面创建资源仓库来存放你的项目。
现已发展成为全球最大的开源社区平台。
2.git shell 应用
.git 安装
一般的linux发行套件都是自带git工具的,如果不带,则使用yum安装即可
yum install git
..git配置
用户名和邮箱配置,方便与仓库间做交互时候标记来源,即自报家门
以下为全局配置,所有用户均使用该配置
git config --global user.name "YourName" //zhuzhu
git config --global user.email "YourEmail" //123456@qq.com
.git命令
创建本地版本库
选择自己的linux主机
cd ~ //进入到家目录
mkdir local_repo //创建文件夹,作为版本仓库的目标目录
git init //创建本地git仓库
目录变化如图:
创建待git管理的文件
cd ~/local_repo
touch input.txt
echo "i am a new file,i will be added to git vcs" > input.txt
将文件添加到代码库
git add input.txt //提交文件到缓存区
git commit -m "first commit" //提交文件到本地库
查看版本仓库状态
git status
假如提交完成后,没有任何修改,则结果如图:
假如我修改了之前的input.txt
查看具体的差异点
比较-工作区和缓存区差异
git diff working_file_path
比较缓存区和本地仓库差异
比较工作区和本地仓库差异
提交之前的变化文档input.txt
git add input.txt
git commit -m "second commit" input.txt
再次使用git diff检查文件的三个不同状态之间的差异
*注意:在没有提交前,所有的改动都只是在工作目录中进行,只有再次提交后,工作目录、缓冲区、本地仓库才能同步
git日志查看
git log
查看两个版本之间文件的差异
查看所有分支的所有操作记录
版本回退
回退到当前版本的上一个版本
git reset --hard HEAD^ //回到当前版本的上一个版本
git reset --hard HEAD@{1} //回退到指定版本
撤销修改
应用场景1:工作空间文件已修改,但没有add到缓存区。
手动修改还原已修改的文件。
用版本库中的复原工作区的文件
git checkout -- filepath //将版本库中的指定文件覆盖掉工作区中的指定文件
应用场景2:工作空间已修改,已添加到缓存区,但没有添加到版本库
git reset HEAD filepath //将该filepath对应的缓存区的内容删除掉,对工作区没有任何改动。相当于回到了应用场景1。
再按场景1的方式修改,即手动修改或者是git checkout -- filepath
应用场景3:工作空间已修改,已添加到缓存区,且已添加到版本库,但没有推到远程库。
直接按版本回退来处理即可,
git reset --hard HEAD^ //回到当前版本的上一个版本
git reset --hard HEAD@{1} //回退到指定版本
应用场景4:rm -rf误删除某文件的还原
rm -rf filepath //在工作目录中误删除某个文件
git checkout -- filepath //将版本库中的文件还原到误删除的文件中。
应用场景5:git rm误删除git文件的还原,并没有commit提交
git reset HEAD filepath //将该文件在缓存区的删除操作移除掉
git checkout -- filepath //从缓存区移除对该文件操作后,即可按应用场景4的操作还原。
远程仓库操作
关联远程仓库
在gitlab web界面中,创建自己的项目。
执行本地到远程的关联
模板: git remote add 远程仓库名 [url]
例子:git remote add origin http://xxx
查看远程仓库信息
git remote //显示远程仓库的关联分支
git remote -v //查看远程仓库的详细信息,显示对远程的操作权限, fetch和push权限
从远程库同步数据到本地库(协作开发)
git clone [url]
本例:git clone http://xxx
今天先更到这,有时间继续补更