Git工具
Git工具
git简介
最主流的代码管理软件,同为代码管理软件还有少部分公司使用svn。
它们的主要功能有:
-
帮助开发者合并开发的代码,协同开发
-
如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
-
代码版本管理
git与svn的比较
svn:集成式管理,服务端挂掉就做不了版本管理,代码合并
git:分布式管理,服务端挂掉,本地还可以继续做版本管理,代码合并
git、gitee、github、gitlab
git:版本管理软件,装在操作系统上,有很多命令
gitee:远程仓库:开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
github:远程仓库:开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
bitbucket:只有私有仓库
gitlab:公司内部的远程仓库
git安装
傻瓜式下一步即可。
在win的任何文件位置,可以右击鼠标在当前位置使用git的bash终端,这个终端的特点是可以输入一些linux指令。
安装后,git所在目录也会添加到环境变量中,可以直接使用git指令。
调整win右击菜单
在注册表中添加,只要执行以下bat指令即可。
reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
taskkill /f /im explorer.exe & start explorer.exe
git操作区
本地操作区
- 工作区:存放文件的地方,会被检测改动
- 暂存区:工作区的变更,可以提交到暂存区
- 版本库:暂存区的内容,可以提交到版本库
远程仓库
git基础命令
指令 | 功能 | 补充 |
---|---|---|
git init | 在当前文件夹进行git管理 | 目录中会多出一个隐藏文件夹.git |
git init xx | git管理xx文件夹 | 在当前目录下的xx文件夹进行管理 |
git status | 查看工作区和暂存区的状态 | 红色表示发生变化的工作区文件,绿色表示提交到暂存区的文件,没有的文件都提交到版本库了。 |
git add 文件夹/. | 将工作区变更提交到暂存区 | . 表示提交所有变更 |
git commit -m '版本注释' | 暂存区的内容作为一个版本提交到版本库 | 暂存区的内容清空,版本库出现一个新版本,提交版本时需要作者和邮箱 |
git config --global user.email "邮箱" | 全局设置邮箱 | 全局是指本操作系统 |
git config --global user.name "leethon" | 全局设置用户名 | |
git config user.name "lee" | 当前git环境设置 | 局部是指本git管理目录 |
git log | 查看版本库版本信息 | |
git reflog | 查看版本库版本信息 | 更精简一些,版本号只展示前几位 |
git checkout . | 将工作区的变更回退到上次提交的状态 | 回退前的变更内容会消失,妥善使用 |
git reset HEAD | 将暂存区的内容拉回工作区 | |
git reset --hard 版本号 | 工作区回退到某个版本 | 查看版本库信息有版本号,输入版本号不用输全,前几位能区分即可 |
git reset --soft 版本号 | 暂存区回退到某个版本 | 工作区不受影响 |
git忽略文件
在.git同级目录下,添加文件.gitignore
,然后在内部按行书写需要忽略的文件名和文件夹名:
-
直接匹配所有文件夹下的同名文件(夹)
.idea __pycache__
-
带指定路径下的同名文件
\x\xx
-
模糊匹配(*表示0~无数个所有字符)
*.pyc
解决pyc文件提交过后,再尝试忽略无效的问题
pyc文件是缓存文件,无关紧要,我们先将所有的pyc文件删除,然后再重新提交一遍即可,以后再产生的pyc文件就不会被git管理了。
可以在git bash环境中执行以下代码来删除所有pyc
find . -name "*.pyc" -exec git rm -f "{}" \;
git分支
git管理只在单线开发显然是不够的,对于项目而言至少有主分支,测试开发分支,有时候需要拉出bug分支。对于协同合作而言,每个人又有个人分支。
不过对于git而言,除了有本地分支,还有线上分支,我们可以在线上部署针对项目的分支,在每个人的本地依据个人的习惯建立分支。所以不必凌乱。
本地分支操作
指令 | 功能 | 补充 |
---|---|---|
git branch | 查看所有存在分支 | |
git branch 分支名 | 创建一条新的分支 | 基于当前分支克隆得到 |
git checkout 分支名 | 切换到指定分支 | 加-b可以创建加切换 |
git branch -d 分支名 | 删除分支 | 一般不删 |
git merge 分支名 | 将指定分支合并到当前分支 | 分支合并可能出现冲突 |
本地分支是基于版本的分支,工作区和暂存区只存在一个公用区域,当我们在一个分支下进行commit时,无论是什么分支,工作区和暂存区都会清空改动,不过当前分支的工作区使用的是新版本的未改动,而切换到其他分支则工作区会回到上个版本的未改动。
分支合并冲突:
假设:我在master克隆创建了一条新的分支dev,dev对代码进行了改动,并commit提交,master也对代码相同位置进行了改动并提交了,那么当master对dev进行合并时就会产生冲突,此时,合并得到的代码,会在冲突处标记出来,在工作区等待人工处理冲突。
git远程仓库
远程仓库有github、gitee、gitlab,在工作环境中,公司可能会自己搭建gitlab,并给员工账号。
这里选择在gitee上操练一下远程仓库:
创建与连接远程仓库
创建空的远程仓库
从本地仓库建立
本地连接远程仓库(http)
第一次提交代码需要输入用户名密码连接,后续会存储到win的凭据管理器中,以后再连接会自动输入。
本地连接远程仓库(ssh)
通过ssh连接,需要先生成公钥私钥,并将公钥部署到项目上
生成的公钥文件存在指定的.ssh文件夹下,打开将公钥部署到项目或者个人公钥上。
部署完成后,去复制项目的ssh地址。
复制ssh地址后,建立连接。
git remote add origin ssh地址
# origin前文我们用过,如果提示这个名字已被用,我们也可以选择断开之前的连接
git remote remove origin
# 或者选择个新的连接名
建立连接后就可以提交和拉取代码了。
本地同步仓库代码
克隆代码
将整个项目克隆到本地,克隆后记得安装依赖。
git clone 远程仓库地址
提交代码
提交的代码必须是本地commit过的。
# git push 连接名 线上分支名
git push origin master
提交有可能遇到一些问题,最常遇到的就是提示需要先拉取代码再上传。
因为要同步到线上的版本库,版本库是整体变新的,那在之前拉取代码在本地更改良久后,可能线上的版本已经迭代了几次,我们基于老版本的更改可能就存在冲突,为了保证冲突可以被解决,所以需要开发者先再拉取一次线上的新版本与本地代码合并,如果有冲突解决冲突并commit再push提交到线上,如果没有冲突则可以直接提交。
拉取代码
拉取代码就是将线上最新版本库的代码和本地合并。
# git pull 连接名 线上分支名
git pull origin master
对于社畜而言,我们可能最多的操作就是add、commit、pull、push
提交分支
当我们提交的分支的名字线上没有时,git线上管理平台上,会产生一条新的分支,这条分支可以被审核测试后合并,也可以丢弃,我们建立主分支时其实也是用此原理。
解决冲突
git会在分支合并时或者拉取代码(本质也是分支合并)时识别明显的冲突,并按照以下形式显示:
<<<<<<< HEAD
我的代码
=======
拉取合并过来的代码
>>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5
如果比对后,发现代码功能重复,则需要删除自己的代码,或与他人沟通删除他人的代码,如果代码只是修改到同一位置,则只需要排列开即可。
如果想减少出现冲突,提高拉取代码的频次
git线上分支
建立线上分支
合并线上分支
dev迭代多次后,现在我想将其合并到master主分支上:
使用Pull Requests工具,创建一个合并的方向dev->master
在这里管理者等待审查和测试通过后,即可通过线上合并,审查和测试能够指派人员。
git线上回滚:
不推荐,将最初版本的代码通过以下代码强推到线上:
git push origin master -f
为开源项目贡献代码
了解一下即可,毕竟好的项目,作者懒得理你,小的项目,你提交上去作者偷摸自己就改了,还是要搞出自己的名望才有贡献代码的机会。
forked一个库:
将自己库上的分支clone下来,自己改动代码(贡献!!)
改动好之后,提交PR给作者等待作者同意合并代码,这样就可以成为代码的贡献者!(作者也许会说,我讨厌没有边界感的人)
pycharm使用git
几乎所有的git指令都被封装到pycharm的可视化界面上了。
右击呼出菜单使用git功能
上方菜单栏有关git的常用操作
右下角使用分支功能
左下角查看一些版本信息
代码文件版本历史功能