分布式版本控制系统 Git 的使用
简介与安装配置
Git是目前世界上最先进的分布式版本控制系统
分布式版本控制:
即每个参与协作的人都拥有全部的代码!有一定安全隐患!所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。不会因为服务器损坏或者网络问题,造成不能工作的情况!
Git下载地址:https://git-scm.com/download/win
官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows
安装
一路下一步即可,可以修改安装路径
配置环境变量
一般安装时会自动配置
启动Git
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
查看Git的配置文件
所有的配置文件,其实都保存在本地!
查看配置 :
git config -l
查看不同级别的配置文件:
#查看系统 configgit config --system --list #查看当前用户(global)配置 git config --global --list
#修改当前用户(global)配置
git config --global -e #(edit)
- Git\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级
- C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置,里面保存了用户名和邮箱等信息
设置用户名与邮箱
当你安装Git后首先必须要做的事情是设置你的 用户名 和 e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息,它被永远的嵌入到了你的提交中。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。
# --global 可简写为 -g 意为全局配置 git config --global user.name "Lamb" #用户名 git config --global user.email 2384748045@qq.com #邮箱
Git的基本理论与使用
Git 在本地有三个工作区域:工作区(Working Directory)、暂存区 (Stage/Index) 、本地仓库 (Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。
Git 的四个工作区域:
-
工作区
-
暂存区(Stage/Index):暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
-
历史区:又称本地仓库,这个不算工作区,而是 Git 的版本库,里面有你提交到所有版本的数据。
-
远程仓库:托管代码的服务器
Git的工作流程
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;(git add)
因此,git管理的文件有三种状态:已修改(modified);已暂存(staged);已提交 (committed)
Git的使用流程
1.创建Git本地仓库
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
本地仓库搭建:
创建全新的仓库,需要用GIT管理的项目的根目录执行:
# 在当前目录新建一个Git代码库
$ git init
执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
克隆远程仓库:
克隆远程目录,将远程服务器上的仓库完全镜像下载一份至本地!
# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]
2.暂存区操作
从工作区到暂存区
$ git add 文件路径 #暂存指定文件
$ git add . #暂存所有文件
查看文件状态(查看对应的暂存区内容)
$ git status
从暂存区撤回到工作区
$ git reset 文件名
3.忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
#为注释 *.txt #忽略所有.txt结尾的文件,这样的话上传就不会被选中! !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
4.将暂存区的文件提交到历史区
提交对应的暂存区文件到历史区 (暂存区就没有了)
$ git commit . -m 描述信息
历史区数据是不能撤回的 但是它可以回滚数据来影响对应的暂存区和工作区
$ git log #查看历史提交信息,包括了版本号 $ git log --oneline #查看简化版提交信息
$ git reset --hard 版本号 #回到指定版本 $ git reset --hard head^ #回到上一个版本,head^表示上一个,head^^^表示上三个版本
功能 | 场景 | |
---|---|---|
–hard | 清空工作区与暂存区 | 放弃目标版本后所有的修改(将所有的修改全部删除) |
–soft | 保留工作区与暂存区,但是把版本之间的差异存放在暂存区 | 合并多个commit |
–mixed(或缺省) | 保留工作区清空暂存区,把版本之间的差异存放在工作区 |
总结使用(适用于第一次提交,后面的提交应切换分支)
克隆项目的提交(推荐使用)
git clone 地址(配置了ssh秘钥则要选择ssh地址) git add . git commit . -m 第一次提交 git push 别名 master
自己创建的提交
git init
git remote add 别名 远程地址(配置了ssh秘钥则要选择ssh地址)
git add .
git commit . -m 第一次提交
git push 别名(地址) master --force(第一次提交要加--force强行覆盖git远程仓库的代码,后面不需添加)
分支
分支命名规范
git 分支分为集成分支、功能分支和修复分支,分别命名为 master、feature 和 fix,均为单数。不可使用 features、future、hotfixes、hotfixs 等错误名称。
-
master(主分支,永远是可用的稳定版本,不能直接在该分支上开发)
-
develop(开发主分支,所有新功能以这个分支来创建自己的开发分支,该分支只做合并操作,不能直接在该分支上进行开发)
-
master_check(未上线前的开发分支,该分支只做只合并操作,不能直接在该分支上开发,前期开发完成后将feature分支合并到此分支)
-
online(线上分支,由发版人员确认测试没问题后,将online_check分支合并到此分支)
-
online_check(开发主分支,所有新功能以这个分支来创建自己的开发分支,该分支只做只合并操作,不能直接在该分支上开发)
-
feature-xxx(功能开发分支,在develop上创建分支,以自己开发功能模块命名,功能测试正常后合并到develop分支,开发完成后合并到online_check分支上)
-
fix-xxx(修改bug分支,在master分支上创建,修复完成后合并到 online_check)
注意事项:
-
一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发。
-
feature 分支在申请合并之前,最好是先 pull 一下 master_check 分支下来,看一下有没有冲突,如果有就先解决冲突后再申请合并。
# 列出所有本地分支 git branch git branch -l #查看所有分支 all git branch -a # 列出所有远程分支 git branch -r # 新建一个分支,但依然停留在当前分支 git branch [branch-name] # 新建一个分支,并切换到该分支 git checkout -b [branch] # 切换分支 git checkout [branch-name] # 合并指定分支到当前分支 $ git merge [branch] # 删除分支 $ git branch [branch-name] -D # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch] #拉取远程仓库代码 git pull origin 分支名 #如果有冲突需解决冲突再提交 #如果拉取不成功可以使用这个强制的方法 git pull origin 分支名 --allow-unrelated-histories
配置SSH登录
以gitee为例,
SSH登录步骤:需要本地电脑生成一段密钥,然后去代码托管网站(Gitee、GitHub、Gitlab)中个人账号的SSH公钥管理添加这段密钥,这台电脑就可以拉代码了。
1.在本地生成密钥:
cd ~/.ssh #进入ssh目录 ls #查看有没有配置过密钥,如果之前生成过则无需再生成 ssh-keygen -t rsa -C "邮箱号"
然后会出现下面的三处填写:
- 保存密钥的位置(回车就是默认)
- 密码(回车不设置密码,如果设置密码使用idea的ssh代码会拉不下来)
- 确认密码
2.将密钥复制到gitee中
clip < ~/.ssh/id_rsa.pub #复制密钥
进入码云的 个人设置 -> SSH公钥:标题可以任意输入,公钥将你直接粘贴过来,点击确定就可以了。