Git快速入门技巧&常见问题
前情提要
最近在来回不停切环境开发项目,总是发现各种奇奇怪怪的问题,解决Git各种工具应用、代码版本冲突、多环境切换配置冲突等问题,总是会有重复的问题出现,正常来说一次配置完成即可,但是真到了环境崩了的情况不得不又各种找补,归根结底还是对Git原生不熟练(过于依赖工具),导致出现问题的时候反而不明确问题出现的原因,导致排查内容无限重复、无限踩坑,因此抽了一点时间重新梳理了Git相关的内容,针对新环境开发快速入门上手GIt,介绍常用的Git管理工具以及常见Git问题分析&排查思路。
Git VS SVN
SVN:集中式版本控制系统,都有一个统一的版本号,放在一个统一的服务器上,工作时把最新的版本的代码拉取到电脑上,代码完成后在把写完的代码推送到服务器上,由于所有的操作都需要服务器的支持,对网络要求比较大,而且如果服务器里的数据出了问题,那么所有的数据都会丢失,本机客户端仅保存当前版本的信息
Git:分布式版本控制系统,每个人的电脑都相当于服务器,当你拉取仓库的代码后,你的电脑就是一个完整的版本库,工作时不需要联网,所有版本都在自己的本机里,当你想把自己的代码提交到主仓库时,只需要在联网时合并推送到主仓库
Git安装使用&配置
参考网站
1.Git安装
Git安装
Git相关软件最基础的入门软件就是GIt原生+小乌龟(ToriseGit)
Git软件推荐下载路径:Git软件官方下载、Git for Windows、阿里镜像
Git安装说明
可以选择参考的教程进行安装,但一般来说就是傻瓜式的安装(一步步默认选择即可),Git安装主要关注两点:环境变量配置、GitBash/GIt GUI
之所以推荐傻瓜式安装方式是为了快速入门,后续这些配置都可以结合实际开发场景进行调整,或者是遇到操作问题回来复盘这些配置反而会有进一步的了解
1)关注是否将git执行指令加入环境变量(可以通过CMD窗口操作,安装完成通过git --version
查看安装版本信息确认是否安装成功)
2)关注Git Bash、Git GUI的搭配使用
Git基础配置(配置文件路径:~/.gitconfig文件,windows对应用户下)
# 全局设置个人用户名和邮箱地址
// 获取个人用户名
git config --global user.name
// 设置个人用户名
git config --global user.name "myName"
// 获取个人邮箱
git config --global user.email
// 设置个人邮箱
git config --gloabl user.email "myEmail"
// 查看git配置
git config --list
2.Git使用
自建本地仓库
场景:创建一个本地Git仓库=》添加文件并提交=》推送到仓库
1)创建本地Git仓库
选择一个文件夹目录(例如:GitRepo),将其初始化为Git仓库
进入到该目录下执行指令(可通过CMD窗口或者GitBash操作git命令行,此处选用CMD)
# 初始化GitRepo为Git仓库
git init
初始化操作完成,会看到目录下生成一个.git目录
2)查看分支(初始化仓库默认创建了master分支:可以通过git bash窗口查看内容)
// 查看分支
git branch
// 会在当前目录显示分支信息(例如.../GitRepo(master))
3)在仓库下添加一个文件(hello.txt),并将其添加到暂存区
# 1.添加一个hello.txt文件,并通过git status查看文件状态
git status
# 2.将hello.txt添加到暂存区
git add hello.txt
# 3.再次查看文件状态
git staus
4)提交暂存区文件到仓库
# 1.提交暂存区文件到仓库(git commit -m '提交说明')
git commit -m 'create hello.txt'
# 2.查看文件状态
git status
5)修改hello.txt文件内容、重新提交并推送到仓库
上述操作提交完成,可以看到hello.txt文件图标的变化(有一个绿色对钩标识),当对文本内容进行了修改之后会发现图标变了(变成一个红色感叹号)
# 1.修改hello.txt文件内容,查看文件状态
git status
# 2.重新提交到暂存区
git add hello.txt
# 3.再次提交暂存区文件到仓库
git commit -m 'modify hello.txt'
6)查看提交日志
# 查看提交日志
git log
# 查看所有分支的提交记录,可根据索引码切换分支版本内容
git reflog
git reset --hard 版本唯一索引值
基于上述操作完成仓库创建,编辑文件并进行版本管理。(此处所有的操作都是基于Git仓库构建,这个Git仓库是在本地的磁盘资源上,且为单一分支版本管理,后续引入远程仓库、多人协作、多分支模式)
如何理解本地仓库和远程仓库:本地仓库类似于当前案例创建的存放在本地磁盘资源的仓库,它只能供个人使用。如果是多人协作模式,其他开发者可能需要通过其他方式访问到这个仓库,因此引入远程仓库概念,通过一个平台(专门存放仓库信息),所有的开发者可以通过网络资源访问到远程仓库并进行协作开发,这里GitLab、GitCode、GitHub、Gitee则是起到这么一个平台的作用。其实所谓的本地和远程的概念区分主要在于仓库的托管交由谁负责,如果是本机负责则为本地仓库、如果是交由平台负责则是远程仓库
克隆仓库
场景:clone现有仓库=》提交代码=》推送到远程仓库
1)通过clone将远程仓库拉取到本地进行开发
例如GitHub上现有一个仓库(拥有对其的访问权限)
# 1.clone远程仓库到本地(选择仓库存储路径)
git clone https://github.com/holic-x/drawio-repo.git
# 2.创建文件,参考上上述步骤完成操作(操作指令都是大同小异)
// 添加内容到暂存区
git add .
// 提交到本地仓库
git commit -m 'create hello-remote.txt'
// 推送到远程仓库
git push
当执行git push指令的时候,此时会弹出github用户名、密码确认的窗口,输入用户名密码验证通过后则可进行push操作
创建远程代码仓库
远程代码仓库可以通过平台可视化界面进行创建,然后本地通过clone拉取元辰仓库代码到本地,然后进行开发。
还有一种方式是先创建好本地从仓库然后再创建远程仓库,岂可信息步骤参考如下:
1)创建本地仓库
2)创建或者修改文件,添加文件到暂存区,提交到版本库
3)创建远程仓库
4)将本地仓库推送到远程仓库(推送代码之前需要配置SSH公钥)
分支branch
仓库新建默认提供了一个master分支,前面的案例是基于master分支进行开发,当多人参与协作开发或者是项目模块划分开发分支划分等情况,一个项目可能会发散不同的分支,因此通过分支管理来进一步管理项目内容
1)创建分支
# 查看目前所有分支
git branch
# 切换分支并切换(创建dev分支并切换)
git checkout -b dev
# 切换分支(如果切换指定分支不存在会报错)
git checkout dev
2)切换分支并管理内容
# 1.切换到dev分支
git checkout dev
# 2.新建一个文件,并将其推送到仓库
// 添加所有文件到暂存区
git add .
// 提交暂存区内容到仓库
git commit -m 'create dev-hello.txt'
3)合并分支
将dev分支的内容合并到主分支:
# 1.先切换到master分支
git checkout master
# 2.执行merge操作
git merge dev
// 如果没有检测到可合并的内容状态提示Already to date.
3.Git工作流程
Workspace: 工作区,平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),安全存放数据的位置,这里面有提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是项目组中的一台电脑用于远程数据交换
远程仓库的工作流程
文件的状态
untracked:未跟踪,此文件在文件夹中, 但没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
tracked:已跟踪,被纳入版本控制
结合一个文件的创建=》提交操作去理解文件状态的变化,平时可以通过git status查看文件状态信息区跟踪:
- 新建文件—>untracked
- 使用add命令将新建的文件加入到暂存区—>staged
- 使用commit命令将暂存区的文件提交到本地仓库—>unmodified
- 如果对unmodified状态的文件进行修改—> modified
- 如果对unmodified状态的文件进行remove操作—>untracked