Git版本控制工具 GIT概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git和代码托管中心1.5 工作区、暂存区、版本库 Git常用命令获取git仓库Git工作区中文件的状态Git远程仓库操作远程仓库拉取 Git分支操作标签操作Git团队协作机制
GIT概述
Git 是一个免费的、开源的分布式版本控制系统可以快速高效地处理从小型到大型的各种项目。
Git 易于学习占地面积小性能极快。
它具有廉价的本地库方便的暂存区域和多个工作
流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具
1.1 何为版本控制版本控制是一种记录文件内容变化以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录从而让用户能够查看历史版本
方便版本切换。
1.2 为什么需要版本控制个人开发过渡到团队协作。
1.3 版本控制工具 集中式版本控制工具CVS、SVN(Subversion)、VSS……
集中化的版本控制系统诸如 CVS、SVN 等都有一个单一的集中管理的服务器保存
所有文件的修订版本而协同工作的人们都通过客户端连到这台服务器取出最新的文件或者提交更新。多年以来这已成为版本控制系统的标准做法。
这种做法带来了许多好处每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限并且管理一个集中化的版本控制系统要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时那么在这一小时内谁都无法提交更新也就无法协同工作。
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
像 Git 这种分布式版本控制工具客户端提取的不是最新版本的文件快照而是把代码仓库完整地镜像下来本地库。这样任何一处协同工作用的文件发生故障事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后解决了集中式版本控制系统的缺陷:
1. 服务器断网的情况下也可以进行开发因为版本控制是在本地进行的
2. 每个客户端保存的也都是整个完整的项目包含历史记录更加安全
1.4 Git和代码托管中心代码托管中心是基于网络服务器的远程代码仓库一般我们简单称为远程库。
局域网
GitLab
互联网
GitHub(外网)
Gitee码云(国内网站)
1.5 工作区、暂存区、版本库版本库前面看到的.git隐藏文件夹就是版本库版本库中储存了很多配置信息、日志信息和文件版本等
工作区包含.git文件加的目录就是工作区也称为工作目录主要用于存放开发的代码暂存区.git文件夹中有很多文件其中一个index文件就是暂存区也可以叫做stage。暂存区是一个临时修改文件的地方
工作区 ----添加选择的改变 git add -----》暂存区 -------提交改变 git commit------》版本库
Git常用命令 命令名称作用git config --global user.name 用户名设置用户签名git config --global user.email 邮箱设置用户签名git init初始化本地库git status查看本地库状态git add 文件名添加到暂存区git commit -m “日志信息” 文件名提交到本地库git reflog查看历史记录git reset --hard 版本号版本穿梭获取git仓库获取git仓库通常有两种方式
一、在本地初始化一个Git仓库(不常用)
执行步骤如下
1.在任意目录下创建一个空目录例如repo1作为我们的本地Git仓库
2.进入这个目录中点击邮件打开Git bash窗口
3.执行命令git init
如果当前目录中看到.git文件夹(此文件夹未隐藏文件夹)则说明Git仓库创建成功
二、从远程仓库克隆(常用)
可以通过Git提供的命令从远程仓库进行克隆将远程仓库克隆到本地
命令形式git clone [远程Git仓库地址]
Git工作区中文件的状态Git工作区中的文件存在两种状态
untracked 未跟踪 未被纳入版本控制
tracked 以跟踪 被纳入版本控制
1.Unmodified 未修改状态
2.Modified 已修改状态
3.Staged 已暂存状态
注意这些文件的状态会随着执行Git的命令发生变化
Git远程仓库操作前面执行的命令操作都是针对的本地仓库命令
git remote 查看远程仓库git remote add orgin 添加远程仓库git clone 从远程仓库克隆git pull 从远程仓库获取git push 推送到远程仓库git push [remote-name] [branch-name]推送远程仓库流程
推送之前对本机进行ssh-keygentianDESKTOP-DACIQKT MINGW64 /f/test/third/test (master)$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/c/Users/tian/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /c/Users/tian/.ssh/id_rsaYour public key has been saved in /c/Users/tian/.ssh/id_rsa.pubThe key fingerprint is:SHA256:tFFIgcpv929Ek5t0YmSG2CmelGeBOlNEMJHeQfMdwEo tianDESKTOP-DACIQKTThe keys randomart image is:---[RSA 3072]----| XBO. || o.EB.. || . o BoB... || o .o B . || . oS * || o . || . . . . || . . || o. |----[SHA256]-----在gitee设置里添加公钥ssh公钥从远程仓库克隆$ git clone origin url地址查看远程仓库tianDESKTOP-DACIQKT MINGW64 /f/test/third/test (master)$ git remoteorigin添加暂存区tianDESKTOP-DACIQKT MINGW64 /f/test/third/test (master)$ git add hello.txt提交本地库tianDESKTOP-DACIQKT MINGW64 /f/test/third/test (master)$ git commit -m init hello.txt[master fef8dc7] init hello.txt 1 file changed, 1 insertion() create mode 100644 hello.txt推送远程仓库tianDESKTOP-DACIQKT MINGW64 /f/test/third/test (master)$ git push origin masterEnumerating objects: 4, done.Counting objects: 100% (4/4), done.Delta compression using up to 16 threadsCompressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.Total 3 (delta 0), reused 0 (delta 0), pack-reused 0remote: Powered by GITEE.COM [GNK-6.3]To https://gitee.com/You-forever/test.git 9f7aa2b..fef8dc7 master -> master 远程仓库拉取 git pull命令的作用是从远程仓库获取最新版本合并到本地仓库命令格式git pull [short-name][branch-name]初始化本地仓库$ git inittianDESKTOP-DACIQKT MINGW64 /f/test/forth (master)$ git remote add origin https://gitee.com/You-forever/test.gittianDESKTOP-DACIQKT MINGW64 /f/test/forth (master)$ git pull origin masterremote: Enumerating objects: 7, done.remote: Counting objects: 100% (7/7), done.remote: Compressing objects: 100% (6/6), done.remote: Total 7 (delta 1), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (7/7), 2.02 KiB | 10.00 KiB/s, done.From https://gitee.com/You-forever/test * branch master -> FETCH_HEAD * [new branch] master -> origin/master Git分支操作1.什么是分支
在版本控制过程中同时推进多个任务为每个任务我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来开发自己分支的时候不会影响主线分支的运行。对于初学者而言分支可以简单理解为副本一个分支就是一个单独的副本。分支底层其实也是指针的引用
2.分支的好处
同时并行推进多个功能开发提高开发效率。
各个分支在开发过程中如果某一个分支开发失败不会对其他分支有任何影响。失败的分支删除重新开始即可。
3.分支的操作
命令名称作用git branch 分支名创建分支git branch -v查看分支git checkout 分支名切换分支git push [shortName] [name]推送至远程仓库分支git merge 分支名把指定的分支合并到当前分支上git branch 列出所有本地分支git branch -r 列出所有远程分支git branch -a 列出所有本地分支和远程仓库分支 标签操作git中的标签指的是某个分支某个特定时间点的状态通过标签可以很方便切换到标记时的状态。比较具有代表性的是人们会使用这个功能来标记发布结点v1.0v1.1等
常用命令
操作描述git tag列出已有的标签git tag[name]创建标签git push[shortName] [name]将标签推送至远程仓库git checkout -b [branch] [name]检出标签Git团队协作机制1.团队内协作
2.跨团队协作