Git相关概念
Git是一个开源的分布式版本控制系统,由Linus Torvalds在2005年创建,用于有效、高速地处理从小到大的项目版本管理。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流行的版本控制系统之一。
git的工作模式
不同于SVN的集中式两层模式,Git在整体架构上是三层数据交换,即workspace、Respository、Remote。
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
Workspace:工作区
工作区是你当前电脑中的一个目录,它包含了你正在工作的项目的文件。也就是我们本地操作的文件,处于工作区的文件的更改在提交之前不会记录在Git的版本历史中。
Index / Stage:暂存区
暂存区是工作区和仓库区之间的一个中间区域,用于准备下一次提交。我们日常使用时,新增文件,再未执行add命令之前,它是属于工作区的,当add之后,则是属于暂存区。
Repository:仓库区(或本地仓库)
这是git在本地生成的一片区域,用来存放执行了commit之后的内容,Git用仓库区来保存项目历史,这里包含了项目的完整历史记录,包括所有的提交、分支、标签等。
仓库区是本地的,不与远程仓库直接交互。也就说在未进行push之前,你的所有改动、调整都还是在你的本机中,并未同步到远端,也不会影响其他人
Remote:远程仓库
远程仓库是托管在服务器上的版本库,主要用于多个开发者之间的协作,这里远程仓库才相当于SVN的服务端,可以理解为最终存放稳定代码的地方。
总体来看,git进行文件管理的流程是:
- 先在本地初始化本地仓库(包含了暂存区)
- 编辑文件
- 协作场景:使用fetch或clone,将远程仓库内容同步到本地仓库中,然后checkout到工作区
- 新增场景:直接在本地(工作区)新增文件
- 将文件 add 到 暂存区
- 使用commit,将暂存区文件同步到本地仓库中
- 使用pull,将本地仓库中的内容同步到远程仓库
git的分支
相比于svn的一个分支即一个目录的管理方式,git的分支管理则更为强大。
- master:主分支,负责记录上线版本的迭代,该分支代码与线上代码是完全一致的。
- develop :开发分支,该分支记录相对稳定的版本,所有的
feature
分支和bugfix
分支都从该分支创建。 - release :发布分支,用于代码上线准备,该分支从
develop
分支创建,创建之后由测试人员发布到测试环境进行测试,测试过程中发现 bug 需要开发人员在该release
分支上进行 bug 修复,修复完成自测没问题后,在上线之前,需要合并该release
分支到master
分支,同时需要再合并该分支到develop
分支。
平时开发工作中,会根据需要由开发人员创建几类临时分支:
- feature :特性(功能)分支,用于开发某个特定的功能,该分支从
develop
分支创建 ,不同的功能创建不同的功能分支,开发完成自测没问题后,需要合并该分支到develop
分支,之后删除该分支。 - hotfix :热修复分支,用于修复某个紧急的 bug,该分支只有在紧急情况下使用,该分支从
master
分支创建,用于紧急修复线上的 bug,修复完成自测没问题后,需要合并该分支到master
分支,以便上线,同时需要再合并该分支到develop
分支,之后删除该分支。
Git常用实操
安装连接Git
安装
首先本地安装Git客户端,直接去 Git 官网下载对应系统的软件了,下载地址为 git-scm.com
下载后傻瓜式 "next" 安装git即可。
安装后,可在菜单路径找到:
右键随处打开git的命令行,执行 git -v后,出现版本,至此,客户端安装完成。
远程仓库认证连接
进行全局配置
首先,设置全局账号、邮箱配置
javascript
//--global 表示对所有git工程都有效
//设置用户名:
git config --global user.name 用户名
//设置邮箱:
git config --global user.email 邮箱
此部分的配置存放在当前用户主目录下:C:\Users\admin\.gitconfig下 ,可直接进行修改
配置ssh key
本地Git仓库和GitHub仓库之间的传输是通过SSH加密传输的,所以需要配置ssh key
打开git客户端命令行
bash
ssh-keygen -t rsa -C ${上一步配置的邮箱}
生成ssh key 文件,一般存放于用户的根目录下。
.ssh目录下存放SSH Key的秘钥对:id_rsa是私钥,不能泄露;id_rsa.pub是公钥,可以公开。
git仓库认证
这里我以外网公共服务Gitee - 基于 Git 的代码托管和研发协作平台 作为远端代码管理仓库为例,将本地的git与远端关联。
登录Gitee后,找到个人账号设置,找到公钥SSH:
根据要求将id_rsa.pub文件内容填写到相应位置
最常使用
拉取项目
初始化本地仓库
在拉取远端仓库里的项目之前,需要先在本地新建或者找一个空的文件夹,用来充当本地仓库
对选定的文件夹执行初始化命令:
bash
git init
初始化后,所选文件夹下会出现.git隐藏目录,此时说明初始化本地仓库完成
进行项目拉取
此时你的团队团队告知项目远程仓库的地址,需要将项目从远程仓库拉取到本地仓库
bash
git clone https://XXXXXX/xxx/xx.git
分支操作
进入到你拉取的项目目录后:
查看分支
bash
//查看本地仓库和远程仓库对于该项目的全部分支
git branch -a
//查看远程仓库该项目的全部分支
git branch -r
绿色则代表本地记录了该分支,红色则表示该分支目前仅在远程仓库,并未到本地仓库
切换分支
看到项目后,我们一般是master分支(main分支),我们开发一般是使用feature分支,此时需要切换所在分支,使用checkout命令
javascript
//单纯切换为远端的分支
git checkout [远端分支名]
//拉取远端分支到本地仓库,并且自定义该分支在本地仓库中的名称,然后切换到该分支
git checkout -b [本地分支自定义名] [远端分支名]
更新项目
- 远程分支被别人更新了,你需要更新代码
bash
$ git pull origin <branch-name>
- 本地有修改,不能直接git pull
bash
$ git stash # 工作区修改暂存
$ git pull # 更新分支
$ git stash pop # 暂存修改恢复到工作区
提交
首先,需要查看文件的状态,可以在项目目录下使用git status命令:
这个命令会显示当前工作目录中未提交(uncommitted)的更改,包括以下几个方面:
- 未跟踪的文件(Untracked files):这些是新创建的文件,Git 还没有将其纳入版本控制。(如果想提交,需要先执行 git add,再commit)
- 已修改的文件(Modified files):这些文件已经被修改,但尚未添加到暂存区(提交时,直接commt即可)。
- 已暂存的文件(Staged files):这些文件的更改已经被添加到暂存区,准备在下一次提交时被包括进去。(已经commit的文件)
- 冲突的文件(Conflicted files):如果在合并过程中出现冲突,这些文件会在解决冲突之前显示为冲突状态。
bash
# 查看目录下文件状态
$ git status
# 执行add后,文件状态改变为已跟踪未提交
$ git add --all # 当前项目下的所有更改
$ git add . # 当前目录下的所有更改
$ git add xx/xx.py xx/xx2.java # 添加某几个文件
# 执行commit 后,文件状态改为已提交
$ git commit -m"<这里写commit的描述>"
# 执行push 后,文件状态为已推送
$ git push -u origin master #第一次需要关联上
$ git push #之后再推送就不用指明应该推送的远程分支了
推荐一个git命令练习工具: Learn Git Branching