git
1. git介绍和安装
1.首页功能写完了---》正常应该提交到版本仓库---》大家都能看到这个---》运维应该把现在这个项目部署到测试环境中---》测试开始测试---》客户可以看到目前做的情况
需要有版本仓库,来管理我们的代码
- svn:比较老,公司基本不用
- git:比较流行,做代码管理
2. git 能干什么?
完成,协同开发(多人一起开发)项目,帮助程序眼整合代码
- 1.帮助开发者合并开发的代码
- 2.如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
- 3. 做版本管理 ---》可以 把代码退回到某个版本
3. 安装git
- 官方下载
- 安装:一路下一步,都选默认的,可以修改安装路径,其他不需要修改
- 验证安装;
1. 在cmd中输入:git -v

2. 在任意路径点击右键:能看到:
git gui here:在此处打开一个git图形化界面
git bash here:在此处打开一个命令窗口
2. git,github,gitlab,gitee介绍
文档:https://www.cnblogs.com/liuqingzheng/p/15328319.html
git :是一个软件,做版本管理和代码合并,有一些git命令github:是一个网站,远程代码仓库,全球最大的开源代码托管网站,使用git的命令来上传下载代码
gitee:是一个网站,远程代码仓库,国内最大的开源代码托管网站,使用git的命令来上传下载代码
gitlab:是一个网站,公司内部搭建的代码托管平台,远程代码仓库,使用git的命令上传下载代码
3.git工作流程
分为工作区、暂存区、版本库
- 工作区:git init 当前文件夹初始化成仓库,文件发生变化
- 暂存区:文件的变更 ----》提交到暂存区
- 版本库:把暂存区内容提交到版本库 ----》文件就被版本管理了。以后可以退回到某个版本
git 就是对文件进行管理 ---》代码也是文件
流程核心总结:
""" 1)有红色信息(工作区有内容),就执行 add 2)全绿信息(内容全部在暂存区),才执行 commit 3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本 """
如下图:

4.git常用命令
1.将已有的文件夹 - 初始化为git仓库
git init # 初始化当前文件夹作为仓库 git init XX # 初始化当前文件夹下XX作为仓库

2.设置用户(在本机设置一次全局即可)
后期使用远程仓库,可以区分是谁提交了代码
- 2.1 设置全局用户(针对所以仓库)
""" git config --global user.name '用户名' git config --global user.email '用户邮箱' 注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用 """

当创建完成之后,会在C:\Users\用户文件夹\.gitconfig新建用户信息,如下图所示:

- 2.2 创建局部用户(只针对当前仓库)
git config user.name '用户名' git config user.email '邮箱'
3. 查看仓库状态
# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看 git status #查看仓库状态 git status -s # 查看仓库状态的简约显示
git status:
- 红色:仓库中新增了,或修改了某些文件,还没有提交到暂存区
- 绿色:在暂存区有变化,还没有提交到版本库

4. 工作区内容提交到暂存区
空文件夹不会被git记录
把工作区变更,提交到暂存区了
有红色变成绿色
git add . # 添加项目中所有文件 git add 文件名 # 添加指定文件
5. 提交暂存区内容到版本库
git commit -m "版本描述信息" # 把暂存区所有内容,提交到版本库,被版本管理起来,以后可以回退,查看

6. 查看版本记录
git log # 显示整个版本号 git reflog # 这个版本号显示的简洁点

7. 切换版本
git reset --hard 版本号(可以截一小段)# 切换版本号

8. 只要被版本管理了(一定能要提交到版本库),以后无论如何操作,都能再退回到某个位置
9. 了解
git checkout . # 把工作区变更删除 git reset HEAD # 把暂存区,拉回到工作区 git reset --soft 23e9e095 # 版本号是上一个版本,把版本库内容拉回到暂存区 git reset --mix b23875 # 把版本库内容拉回到工作区,变红
5. git忽略文件
如果一个文件夹被git管理了,所以文件都会被管理,所以文件发生变化,都会变红
在一个文件夹中,可能有些文件,或文件夹不想被git管理,这时候需要设置过滤文件
使用方式:
- 1. 在仓库目录下(其他目录下不要有),新建一个文件:.gitignore

- 2. 在里面写忽略文件或文件夹
""" 过滤文件内容 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤 /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤 eg: a.txt:项目中所有a.txt文件和文件夹都会被过滤 /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤 /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤 *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符) 空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件) """
需要被忽略的文件、文件夹:

进行提交:

提交完成,变绿色,在暂存区

注意:
1. 忽略文件,在一开始就要忽略,如果已经被版本管理了,在忽略就没用了
2. 如果之前没有被管理,且已经提交了,可以按照下面步骤做:
删除---》提交到版本库---》再在忽略文件中加入
记住:
迁移记录文件是否提交---》建议不提交
**/migrations/*.py # 忽略迁移记录
!**/migrations/__init__.py #不不忽略 __init__.py
6. git多分支

分支操作:
### 命令操作分支 #1. 创建分支 git branch dev #2. 查看分支 git branch #3. 分支合并(可能经常用) git merge dev #4. 删除分支 git branch -d 分支名 # 不能在当前分支上,删除当前分支 #5. 分支切换 git checkout 分支名 """ 1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发) 2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可 3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev) """
7. git远程仓库
远程仓库有:github、gitlab、gitee
远程仓库以:gitee 为例,目标:把luffy_api提交到远程仓库
1. 远程仓库是空的情况
- 1. 在gitee上创建了仓库(确保仓库是空的)
新建仓库:下面的什么都不用选,只要填写:仓库名称、路径即可

选择HTTP:

-2. 本地:git init

-3. 本地:git commit -m 提交版本

Git 全局设置:
- git config --global user.name 'chen'
- git config --global user.email 'chen@qq.com'
-4. 指定远程仓库地址
添加一个远程仓库,名字叫 origin 地址是 后面地址
- git remote add origin https://gitee.com/maverick-lucky/luffy_api.git

-5. 推送到远端
- git push origin master # 将本地的master分支推送到远端origin对应的地址
# 会弹出:让你输入用户名和密码 -----》gitee的用户名密码
2. 远程仓库有东西的情况
-1. 本地先不做仓库 -----》将 .git 文件夹删除
- 2. 找个位置,把远程仓库内容下载下来
- git clone https://gitee.com/maverick-lucky/luffy_api.git
-3. 把我们写好的代码,赋值到这个文件夹下
-4. 提交到本地仓库
- git add .
- git commit -m
-5. 推送到远程仓库
git push origin master
本地还没开始写代码,远端建仓库(有东西):
- 把远端仓库下载下来,用pycharm打开,写代码--本地提交--提交到远程
现在公司里有个项目了,写了很多代码了,也用版本管理了
- 远程仓库一定是空
- 本地的不要删---》直接提交到远程---》远程也有之前的版本管理
在公司里,这些都不用你做,创建仓库,提交初始化的代码都是领导做好了
- 你只需要从远程仓库,下载代码:git clone
- 用pycharm打开,继续写--提交即可
7.1 普通开发者,使用流程
1. 领导会把你的账户添加为开发者
2. 下载代码到本地 ---》 在这个基础上开发
- 方式一(命令):git clone https://gitee.com/maverick-lucky/luffy_api.git
- 方式二:使用pycharm下载
- 先配置git

- 方式三:下载zip,下载后使用pycharm打开
3. 使用pycharm 打开
- 写代码,先提交到本地仓库
- 提交到远程仓库
8. ssh方式连接远程仓库
前面,提交、拉取代码都是走的https协议
公司内部,一般会走 ssh协议,以后不需要用户名密码了,只需要ssh的公钥和私钥(是非对称加密:加密用公钥,解密用私钥)
操作步骤:
- 1. 生成公钥私钥(在cmd中执行下面的命令)
ssh-keygen -t ed25519 -C "2209627577@qq.com"

-2. 用户家路径,生成的公钥和私钥:C:\Users\Administrator\.ssh 在这个路径下:

- 3. 复制公钥,配置在gitee上
- 设置 ---》添加ssh公钥,把公钥粘贴,确认


-4. 以后,在操作git,不需要用户名密码了(走的是公钥和私钥)----》 只针对我们自己的机器
- 5. 把远程仓库的连接,修改成 ssh协议
- git remote remove origin # 把原来的remote的对应关系删除(之前的协议是HTTP)
- git remote add origin git@gitee.com:maverick-lucky/luffy_api.git #新增一个对应关系,协议是ssh
- 6. 以后本地改了代码,提交到本地版本库,想推送到远程仓库,直接:git push 即可,不需要在输入用户名密码了
总结:使用git流程
- 1. 注册一个gitlab账户
-2. 领导会把你加成开发者
-3. 进入到你的家里,你就能看到这个项目了
-4. 项目clone到本地:
-https方式:git clone https://gitee.com/maverick-lucky/luffy_api.git
-ssh方式:git clone git@gitee.com:maverick-lucky/luffy_api.git
-5. 在本地生成公钥私钥,把公钥配置在gitlab
-6. 以后,在pycharm中打开项目写功能,提交到本地,提交到远端即可
9. 协同开发
9.1 避免冲突
张三:改了 settings.py 第一行,提交了
李四:改了 settings.py 第二行,提交了
你也在改setting.py ,没有拉取代码,不知道他们提交了,动了第二行,但是跟李四代码不一样你要提交,必须先拉取,一拉,把张三的,李四的都会加到你代码中,就会出冲突
如果你想避免冲突,勤拉取代码
9.2 协同开发
同学一:
git clone 项目
pycharm打开
写代码:__init__.py
git add . # 当输入这个命令,执行失败是因为当前目录下有个venv文件夹--》删除这个文件夹
git commit -m 'ss' # 提交到本地版本库
git push origin master # 推不上去 要先git pull origin master
同学二:
在pycharm中改代码
改的不是同一个文件
git add .
git commit -m 'sasdfasd'
git pull origin master # 由于我们改了不是同一个文件,不会冲突
git push origin master # 把自己的推上去即可
""" 1)作为开发者,第一次同步项目(前台已经是项目开发者了) git clone 项目地址(https/ssh) 2)保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建) 3)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互 4)交互顺序:必须 先拉(pull)后提(push) 5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互 git checkout dev # 切换分支 git add . git commit -m '本次提交的信息提示' git pull origin dev # 先拉,先下载最新版本的分支 git push origin dev # 在推送,在提交自己写好的版本 """
10. 冲突解决
""" 1. 在远程仓库和本地仓库版本不一致时,拉取远程仓库版本到本地时,两个版本进入融合,可能会出现版本冲突 2. 定位冲突文件冲突代码,线下沟通冲突代码,整合代码解决冲突 3. 将解决冲突后的代码重新提交到本地版本库 4. 再拉去远程仓库,直到没有冲突,提交本地版本库到远程 """ """ <<<<<<< HEAD # 冲突的开始 # 自己的代码 ======= # 分割线 # 别人的代码 >>>>>>> b63c408abd05b87fc492d40523240561999dba50 # 冲突的结束(版本) """ """ 1. 删除冲突相关标识:冲突的开始、分割线、冲突的结束(版本) 2. 线下沟通,根据实际需求完成代码整合 3. 测试整合后的代码 """ """ 出现冲突的前提: 1. 不同开发者同时操作了同一文件 2. 并且在相同行写了代码 强调:有业务交际时,版本合并不一定会出现冲突相关的标识,但是可能会带着代码运行崩溃,所有理论上每一次版本合并,都要测试合并后的所有功能(及其之少的情况) """
10.1 多人在同一分支开发
同学一:
git clone 项目
pycharm打开
写代码:__init__.py ,第五行,改成 print('阿斯顿发送到发')
git add . # 提交至暂存区
git commit -m 'ss' # 提交至本地版本库
git push origin master # 推不上去 git pull origin master
同学二
在pycharm中改代码
改的是同一个文件,不同行 print('aaa')
git add .
git commit -m 'sasdfasd'
git pull origin master # 由于我们改了是同一个文件,会冲突
冲突:
<<<<<<< HEAD # 下面是我的代码 print('asdfasdfads') ======= # 下面是别人代码 print('tang') >>>>>>> 2174bd1a466536dda553ba3835cfd9768ae32be0 # 别人代码的版本号
解决:
1. 先删除报错,然后看代码,如果改的一样,就留别人的,把自己的代码删除
2. git add .
3. git commit -m
4. git push origin master
10.2 合并分支

操作步骤:
# 1. 创建dev分支,并在dev分支中进行操作 git branch dev #切换分支 git checkout dev # 在dev分支操作 # 写自己的代码 # 提交至暂存区,在提交到本地版本库 git add . git commit -m 'dev操作描述' # 2. 在master分支操作 git checkout master # 在同一个文件中写自己的代码 # 提交至暂存区,在提交到本地版本库 git add . git commit -m 'master操作描述' # 合并分支出现冲突 git merge dev # 出现冲突 # 解决冲突 # 提交 git add . git commit -m
浙公网安备 33010602011771号