1、git介绍
1、公司里多人协同开发一个项目,需要版本管理工具:svn,git
2、git可以实现版本控制
3、git,gitee,github,gitlab
gitee:中国的github(很多公司在用)
github:远程仓库,全球最大的开源代码库
gitlab:公司自己搭建的远程仓库,公司的代码放在上面
2、git工作流程
工作区:
开发程序的文件夹
暂存区:
修改后的文件临时暂存到内存中
本地版本库:
将写好的项目放在本地版本库中保存
服务器版本库:
将写好的项目放在服务器版本库中保存
3、git安装
https://git-scm.com/downloads
# 无脑下一步即可
4、基本操作
# 1、初始化仓库,让git接管你的项目
git init
# 2、查看仓库状态
git status
-红色:新建,修改,删除,在工作区没有放到暂存区
-绿色:放到暂存区,没有提交到版本库
-没有东西:说明所有变更都被版本管理起来了
# 3、将当前路径下的所有变更提交到暂存区
git add .
# 4、将暂存区的内容提交到版本库
git commit -m '注释'
# 5、设置用户(目的在于可以在远端看到是谁提交了内容,更方便公司的管理)
# 5.1、设置全局用户(在家路径下创建用户,每个项目都用这一个用户)
>: git config --global user.name 'tianyanlong'
>: git config --global user.email 'tianyanlong2000@163.com'
# 5.2、设置局部用户(局部是指在某个项目下创建用户,可以在不同项目下创建不同用户)
>: git config user.name 'tianyanlong'
>: git config user.email 'tianyanlong2000@163.com'
# 6、撤销工作区操作
git checkout .
# 7、撤销暂存区操作(了解)
git reset .
# 8、撤销版本库提交
git reset --hard 版本号
# 9、查看版本管理日志
git log # 显示作者,版本号,注释
git reflog # 显示精简信息,显示的更多(版本切换也会显示)
5、过滤文件
1 我们项目中有一些文件,文件夹,不要提交到版本库
2 在项目根路径新建:.gitignore.(win平台)
3 在文件中写忽略的文件/文件夹
-直接写文件夹名字或者/文件夹名字,表示忽略这个文件夹
-# 表示注释
-直接写文件名,表示忽略该文件
-* 表示通配符,表示任意数量任意字符 案例:*.log 以.log结尾的都忽略
-?表示单个字符 ?.log
6、多分支开发
# 1、查看分支
git branch # 绿色代表当前所在分支
# 2、新建分支
git branch 分支名
# 3、切换分支
git checkout 分支名
# 4、删除分支
git branch -D 分支名 # 只有在另外一个分支下才能删除当前分支
# 5、合并分支(子分支合并到主分支)
git branch master # 先切换到主分支
git merge dev # 再将子分支合并到主分支
7、gitee创建仓库流程
7.1、流程
新建完了之后页面是这样的
7.2、远程仓库
-gitee,github,gitlab
-remote源操作(远程仓库)
-查看远程仓库:git remote
-添加远程仓库(远程仓库的名字origin):git remote add origin https://gitee.com/liuqingzheng/test.git
-git项目创始者和开发者
-采用ssh协议连接远程源
-提交本地代码到远程仓库
git flow:git 工作流,人为设定的一个标准,多条分支,分别有不同的用途
7.3、remote源操作
-查看远程仓库:
git remote
-添加远程仓库(远程仓库的名字origin):
git remote add 远程仓库名字 仓库地址
git remote add origin https://gitee.com/liuqingzheng/test.git
-删除远程仓库
git remote remove origin
8、项目创始者和开发者的操作
8.1、创始者的操作
1 没有项目纯空的
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/liuqingzheng/test.git
git push -u origin master
2 项目已经存在,在本地以及操作了(git_test)
cd git_test
git remote add origin git@gitee.com:tian-yanlong/logistics_api.git
git push -u origin "master" # 本地代码推送到远程
# 推送 远程仓库名 主分支
3 提交的时候需要输入gitee的用户名和密码
4 提交成功以后,在远程仓库能看到版本变更记录
8.2、开发者的操作
# 因为是开源的所有人都可以克隆
git clone https://gitee.com/liuqingzheng/test.git
# 修改改代码
git add .
git commit -m
git remote 配置远程仓库(我现在不用配,同一台机器已经配置过了)
git push origin master
# 在提交代码之前,要先更新
git pull origin master
9、pycharm操作git
9.1、git init
让git管理项目,本质是在项目根目录下创建了.git文件夹
9.2、git add .
将工作区的内容放到暂存区中
9.3、git commit -m 注释
将暂存区的内容存放到本地版本库中
9.4、git remote add origin url
添加了远程仓库之后,才能把本地版本库中的内容上传到服务器端版本库中
9.5、git push origin master
将本地版本库中的内容上传到服务器端版本库中
9.6、git pull origin master
将服务器端版本库中最新内容同步到本地
9.7、git clone url
从gitee中下载别人的代码
10、采用ssh协议连接远程源(公司一般用这种)
10.1、简介
1 使用https操作的,第一次提交的时候,输入用户名密码
2 企业里通常使用ssh
-公钥:配置在gitee
-私钥:留在你本地
10.2、生成公钥和私钥
在git bash here 下,位置无所谓执行
ssh-keygen -t rsa -C "tianyanlong2000@163.com"
-会在 C:\Users\tianyanlong\.ssh文件夹下生成公钥私钥
-公钥给别人,私钥不能泄露(非对称加密:对称加密)
非对称加密:加密用公钥,解密用私钥
对称加密:加密和解密用同样的密码
10.3、在gitee上添加公钥
先打开设置,然后再按图操作
10.4、把remote源改成ssh
11、协同开发
1 多人开发同一个项目
2 现在你们git clone 项目,在你本地了
3 可以改代码了,当你git push 的时候,提交不了
4 项目管理员分配给你权限(gitee中管理--》仓库成员--》邀请成员)
5 这一个项目有一个管理员,若干开发者
6 重点:不能跨版本提交,只能先拉到最新,再提交
7 如果某个开发者再s1.py 的第14行加入了东西,我也加入了,他先提交(它没问题)
8 当我再拉取,出冲突了
<<<<<<< HEAD
你的代码
=======
同事的代码
>>>>>>> d78b8fb39f6469e810868218a052bc3174b3e1fc
9 解决冲突
-留你的代码:你写的好
-留他的代码:你觉得他写的好
-你们的都留着:你俩虽然改了一行,但是功能不一样
12、分支合并
12.1、线上分支合并
1 在线上新建一个dev1分支
2 拉去到本地
3 在本地dev1分支增加一行代码,提交到版本库
4 在本地dev1分支又增加一行代码,提交到版本库
5 远程分支合并
-pull request,指定从哪个分支合并到哪个分支
-绿色表示没有冲突,可以正常合并
-普通和扁平化(变基)
6 本地、远程的dev1和master就完全一样了
12.2、线下分支合并
1 本地dev1分支新增代码,提交到版本库
2 本地dev1分支合并到master
-切到master
-git merge dev1 (没有冲突直接合并)
-git push origin master (本地master提交到远端master)
3 切到dev1分支,再提交到远端
4 到此,本地分支合并完成,远端的dev1跟master完全一样,本地的dev1跟master也完全一样
12.3、合并分支冲突解决
1 再master加一行,提交到版本库
2 再dev1同样尾增增加一行,提交到版本库
3 把dev1合并到master,就会出冲突
-切到master分支
-git merge dev1 有冲突
-解决冲突(到底留什么,你觉得)
-提交到远端
13、远程仓库回滚
1 远程仓库,回到最初路飞第一次提交的地方
2 再本地回复到第一次提交
git reset --hard 59dbf80c
git push origin master -f # 强制提交
3 切记 -f 清醒的时候使用
14、其他了解
git flow
-是一种建分支的方案
-预览分支,开发分支,bug分支,主分支,测试分支...
pull和fetch区别
git pull:拉代码+合并
git fetch:拉代码,需要手动合进去
变基rebase
-合并分支的时候,是否保留之前分支的日志
git客户端:
-官方下载的一个(命令行下)
-pycharm编辑器
-sourcetree:美观,分支通过不同颜色显示,看着好看