路飞之git
git 的使用
git简介
1. 版本控制器
"""
完成 协同开发 项目,帮助程序员整合代码
1.帮助开发者合并开发的代码
2.如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
3.代码版本管理
软件:SVN 、 GIT(都是同一个人的个人项目)
github、gitee(两个采用git版本控制器管理代码的公共平台)
git:集群化、多分支
"""
2. git 和svn比较
svn:集成式管理,服务端挂掉就做不了版本管理,代码合并
git:分布式管理,服务端挂掉,本地还可以继续做版本管理,代码合并


3. git介绍
git是版本控制器,控制的对象是开发的项目代码。
代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
4. git,gitee,github,gitlab
# git:版本管理软件,装在操作系统上,有很多命令
# gitee:远程仓库:开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
-国内最大的开源远程仓库
-小公司---》使用gitee的私有仓库
# github:远程仓库:开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
-国际上最大的开源远程仓库
# bitbucket:只有私有仓库
-远程代码仓库
# gitlab:公司内部的远程仓库
git安装
官网下载对应版本:https://git-scm.com/download,双击安装软件--默认选项--在选取安装路径的下一步选取 Use a TrueType font in all console windows 选项,下载完成,任意路径下点右键,显示如下

git工作流程
# 三个区
-工作区 存放文件的地方
-暂存区 工作区的变更,提交到暂存区
-版本库 暂存区的内容,提交到版本库


版本库间通信

git分支

git常用命令
记住的:
git add
git commit -m
git reset --hard 版本号
会用:
git init
git status
git log
git reflog
了解:
git checkout .
git reset HEAD
git config --global user.email "306334678@qq.com"
"""
1.有红色信息(工作区有内容)执行add
2.全绿信息(内容全部在暂存区)执行commit
3.只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
"""
git的使用
桌面有git文件,文件夹想被git管理,文件夹作为仓库,如何操作?
在文件夹里面右击git bash here

-
将已有的文件夹 - 初始化为git仓库
# cd 目标文件夹内部 git init # 初始化仓库 ,当前文件夹多出 .git 文件夹,这个文件夹不要删,如果删除,这就不是git仓库了,之前的版本再也找不回来了,也不能被git管理 -
在指定目录下 - 初始化git仓
# cd 目标目录 git init 仓库名 # 在指定目录创建xxx文件夹 -
在仓库目录终端下 - 设置全局用户
git config --global user.name '用户名' git config --global user.email '用户邮箱' 注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用作者 -
在仓库目录终端下 - 设置局部用户
git config user.name 'kiki' # 用户名 git config user.email '123@qq.com' # 用户邮箱 # 在当前仓库下的config新建用户信息,只能在当前仓库下使用 # 一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户 -
查看仓库状态
当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
在 .git 所在文件夹下 [只看暂存区和工作区] # 查看仓库状态 git status # 看到有两种颜色 -红色:工作区变化了,但是没有提交到暂存区 -绿色:已经提交到暂存区,没有提交到版本库 -没有:所有东西都在版本库中了[所有文件都被git管理起来了] # 查看仓库状态的简约显示 git status -s -
工作区操作
# 通过任何方式完成的文件删与改 # 空文件夹不会被git记录 -
撤销工作区操作:改、删(了解)
# 撤销所有暂存区的提交 git checkout . # 撤销某一文件的暂存区提交 git checkout 文件名 -
工作区内容提交到暂存区
# 添加项目中所有文件 git add . # 当前路径下所有变更都提交 # 添加执行文件 git add 文件名 -
撤销暂存区提交:add的逆运算(很少使用)
# 撤销所有暂存区的提交 git reset HEAD . # 撤销某一文件的暂存区提交 git reset 文件名 # 撤销所有暂存区的提交 git reset . -
提交暂存区内容到版本库
git commit -m '版本描述信息' eg: git commit -m '提交了1.txt' -
撤销版本库提交:commit的逆运算
回滚暂存区已经提交到版本库的操作: # 查看历史版本: git log git reflog # 查看时间点之前|之后的日志: git log --after 2018-6-1 git log --before 2018-6-1 git reflog --after 2018-6-1 git reflog --before 2018-6-1 # 查看指定开发者日志 git log --author author_name git reflog --author author_name # 回滚到指定版本: # 回滚到上一个版本: git reset --hard HEAD^ git reset --hard HEAD~ # 回滚到上三个版本: git reset --hard HEAD^^^ git reset --hard HEAD~3 # 回滚到指定版本号的版本: git reset --hard 版本号 (重点) eg: git reset --hard 35cb292 -
git忽略文件
咱们项目中,有些文件,或文件夹不想被git管理,比如:-node_models/.idea/xx.pyc(python的编译文件)
使用步骤:
1.在仓库目录下 .git 所在目录下 新建 .gitignore 2.在里面写忽略文件 mode_models .idea *.pyc *.log 3.写的就会被忽略 4.已经被管理过的不会被忽略过滤文件写法
# .gitignore 文件 # 1)在仓库根目录下创建该文件 # 2)文件与文件夹均可以被过滤 # 3)文件过滤语法 """过滤文件内容: 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤 /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤 """ eg: a.txt:项目中所有a.txt文件和文件夹都会被过滤 /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤 /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤 *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符) 空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
git多分支
为什么要有分支?
- 可以保证主分支的版本都是可以查看的版本
- 我们都在开发支开发,开发完成,合并到主分支
分支操作
-
分支查看
git branch -
分支创建
git branch 分支名 git branch dev # 创建dev分支 -
分支切换
git checkout dev # 切换到dev分支 -
分支删除
git branch -d dev # 删除dev创建的dev分支是存在
.git文件里,如果切到master,只是隐藏了文件,并没有删除dev分支的文件。各分支的文件只存于各分支里面。
-
合并分支--重要
1.把dev合并到进master 2.切到master分支:git checkout master 3.执行合并命令:git merge dev # 把dev合并到master主分支上 # 针对小公司的分支方案: 1. master分支,dev分支,bug分支 ,所有人在dev分支开发,开发完成合并到主分支 2. master分支,dev分支,bug分支 ,个人分支,个人在个人分支上开发,开发完成合并到dev分支

注意:但主分支上出了bug,会单独拉出来bug分支,解决之后再合并到主分支上。
合并分支可能出现的问题?
是两个分支同时处理bug分支/dev分支处理相同的问题以及处理的内容相同,合并时就会出现冲突,如何解决?
冲突解决
出现冲突的原因:1.多人在同一分支开发,2.分支合并出现冲突
# 冲突出现的样子
<<<<<<< HEAD 我的代码
print('刘亦菲')
======= 它的代码
print('彭于晏')
>>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5 # 版本号
# 情况1:多人在同一分支开发冲突
-张三:
git pull origin master
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git push origin master
-我:
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git pull origin master
# 冲突了
# 解决冲突-->箭头去掉-->阅读代--->选择保留或删除别人或自己的代码--->再提交----解决后再提交到远程仓库
# 情况2:分支合并出现冲突
-我:
1 创建dev分支
git branch dev
2 在dev分支的views.py 中第2行加入代码
3 提交到本地仓库
-我:
1 在主分支的views.py 中第2行加入代码
2 提交到版本库
3 在主分支合并代码 git merge dev
4 冲突了,解决冲突
5 再提交代码,到此结束
git远程仓库
把本地的版本提交到远程仓库(gitee、github、gitlab.....)
gitlab的搭建过程:https://zhuanlan.zhihu.com/p/413217715
本篇文字是以远程仓库gitee为讲解
-
作为项目仓库初始化人员
线上要创建空仓库 => 本地初始化好仓库 => 建立
remote链接(remote add)=> 提交本地仓库到远程(push) -
作为项目后期开发人员
远程项目仓库已经创建成功 => 复制远程仓库到本地
(clone)=> 进入仓库就可以进行接下来的开发
采用HTTP协议连接远程仓库
本地提交luffy_api,将代码提交到远程仓库,提交代码需要用户名和密码
新建仓库

操作
# 远程
1.远程要创建仓库:gitee上创建仓库,右上角 +
2.保证仓库是空的,填写基本信息
# 本地提交到版本库
1.在luffy_api 敲git init--初始化
2.设置忽略文件(.gitignore)
.idea
*.log # 一定要是包,如果没有init文件是不会被管理的
scripts
*.pyc
3.pycharm/git bash 敲----git add .
4.提交库---git commit -m '第一次提交'
提交到了本地版本库-------被版本管理了
# 本地安装远端提示的信息
pycharm如何导入仓库
1.安装远端提示的步骤操作
GIT全局设置:
git config --global user.name "kimi"
git config --global user.email "1603847806@qq.com"
创建git仓库
mkdir luffy_api
cd luffy_api
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/mos-house-is-in-a-hurry/luffy_api.git
git push -u origin "master"
2.设置用户和邮箱
3.咱们是已有仓库
cd luffy_api
git remote add origin https://gitee.com/mos-house-is-in-a-hurry/luffy_api.git
git push -u origin "master"
4.cd luffy_api
5.添加一个远程仓库地址名字叫origin,地址是xxx
git remote add origin xxx
6.# 把本地的版本库推送到远程仓库
# 把本地当前所在分支,推送到 origin对应的远程的master上
git push origin master
# 需要输入用户名密码,输入一次,以后就不用输入了(本地保存了:凭据管理)
凭据管理在本地里---也可删除,删除了之后需要每次都登录
注意:用户名是邮箱

注意:提交到版本库之后发现漏写了忽略文件的情况?
# 比如忘记添加了luffy.log,如何解决?
# 只要版本被管理,就算写上忽略,还是会被监控的
1. luffy.log--->暂存区---》版本库
2..gitignore---》写上忽略,但是不好被忽略,只要luffy.log有变化还是会被监控到
解决方法:
1.删除luffy.log---》会被监控到---》add,commit---》版本库中已经没有luffy.log
采用SSH协议连接远程仓库
采用ssh方案:需要公钥和私钥 。私钥在本地保存,公钥配置到gitee上,下次提交就需要其他任何认证了。
使用步骤
1.生成公钥私钥:https://gitee.com/help/articles/4181
本机命令,查看公钥:cat ~/.ssh/id_rsa.pub
2.在命令窗口中执行,一路回车
ssh-keygen -t ed25519 -C "1603847806@qq.com"
-生成在:C:\Users\Administrator\.ssh 两个文件,一个公钥,一个私钥
3.把公钥,配置在gitee上
4.之前origin对应的地址是 https的,现在要使用ssh提交代码,需要把它删除,再增加成ssh的协议
git remote remove origin
git remote add origin git@gitee.com:mos-house-is-in-a-hurry/luffy_api.git
5.提交本地代码到远程仓库
git push origin master
将公钥配置在gitee库上,那是你的身份凭证。没有就拉取不了别人的代码(前提是成为同行开发者,观察者是没有权限的)

协同开发
# 如何成为其他码云项目的开发者
"""
1.生成自己电脑的公钥,配置到自己的码云个人公钥中
2.把自己的码云用户名提供给别人,别人添加你成为项目开发者
3.自己确认添加,成为开发者,克隆开发项目,进行开发
"""
#如何成为公司自建git服务器的开发者
"""
1.生成自己电脑的公钥(公钥生成一次就可以了),把它提交给项目管理者
2.项目管理者添加你公钥,加入开发者,提供给你项目克隆地址
3.克隆开发项目,进行开发
"""
# 协同开发
1. 作为开发者,第一次同步项目(前台已经是项目开发者了)
git clone 项目地址
eg:git clone git@gitee.com:liuqingzheng/luffy_api.git
2. 保证自己本地有dev分支,且与远程仓库版本同步(确保远程也有dev分支)
3. 本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互
4. 交互顺序:必须 先拉(pull)后提(push)
5. 必须切换到要交互的分支,再与远程同名的分支进行交互,如本地dev与远程dev交互
git checkout dev
git add .
""" 提交仓库的时候要设计用户名和邮箱,有局部先局部,没有就用全局的"""
# 设置用户名和邮箱
git config user.name kimi
git config user.email 1603847806@qq.com
git commit -m '本次提交的信息提示'
git pull origin dev # 拉下来可以看不见,切到dev就能看见
git push origin dev
# 也可以 git push origin SSH
# 刚去公司
1.自己注册,hr给你 gitlab 账号和密码
自己去账号里配置ssh
2.老大会把一个仓库地址给你 【它已经把你加成开发者了】 https ssh
3. clone下来代码
4.使用pycharnm打开,配置环境===》代码运行起来
5.开发代码,本地提交---》push到远端
add
commit
push
线上分支合并
# 线下分支合并
git merge dev
# 线上 分支合并
1.gitee上,新建一个分支 ,本地同步远程dev分支 --防止冲突,本地清空dev分支
2.拉取远程的分支dev
git pull origin dev # 拉下来看不到分支,切过去才看dev
git checkout dev # 切换到dev分支
3. 在dev上开发开发
随便加代码
4.git add
5. git commit # 提交到本地的dev了
6. 将远程dev分支推到远端 dev
git push origin dev
7.master中没有代码,dev中有提交的,现在要线上分支合并
把远程的dev合并进远程的master
8. 提交pr 提交rr
-在网站上,申请提交pull request
-领导审核,测试,通过后,点击合并
-线上dev就合并进线上的master了


远程仓库回滚
建议----一般都不能使用
# 想远程的代码,是最初的状态
# 步骤:
1 本地版本回退
git reset --hard 版本号
2 强行推到远端
git push origin master -f
为开源项目贡献代码
目前学习的是gitee库,想为好的开源项目改进某些东西并合并进开源项目,如何做?
- 先fork开源项目,复制这个项目到我的仓库中
- clone下来,改代码,一路提交远端我的仓库
- 提交pr,等待作者同意
pycharm使用git
- 配置git的安装路径

- pycharm使用git使用add、commit提交到版本库和git pull origin master、git push origin master等命令



与历史库做对比!


浙公网安备 33010602011771号