以后项目给别人—》项目装了哪些模块[模块版本]–》别人用是不知道的—》需要导出项目依赖—》放在项目路径下—》以后在运行项目前–》先安装依赖[版本号要对应]
# 一般约定俗成都叫 requirements.txt,但是会有别的
# 1 虚拟环境---》所有装的第三方,都应该是该项目的依赖---》直接导出虚拟环境的所有第三方模块即可
# 在命令行中安装这个模块 会自动生成一个 requirements 文件 里面有对应的模块名字和版本号
pip freeze > requirements.txt
软件开发一个功能后---》把代码提交到某个位置---》大家都能拿到
现在存在的问题
1 多人在同一项目上开发---》代码合并--》多人协同开发
2 做版本管理--》版本回退,查看。。。
# SVN 、 GIT 能完成上述操作
-svn 比较老,用的公司不多
-git比较流行
git是什么?
版本控制[软件] - 控制的对象是文件
# 下载:
https://git-scm.com/downloads
-win:Git-2.43.0-64-bit.exe 下载,一路下一步安装即可
git init # 管理该文件夹
git init 文件夹 # 在当前文件夹下创建文件夹,并把新创建的文件夹作为仓库
只要初始化的文件有 增删改查操作 查看仓库的时候都会变成红色
git status
git status -s #查看仓库状态的简约显示
颜色区别介绍
# 红色:工作区有变更,但是没有提交到暂存区
# 绿色:工作区变更提交到暂存区,但是没有提交到版本库---》还没有被版本管理起来
# 白色:所有变更都被版本管理了
git add 文件名 文件夹 # 可以指定文件提交到暂存区
git add . # 所有变更 点代表所有
git commit -m '注释' # 只要提交一次,就会有个版本号,以后根据版本号我们可以回退到任意版本
# 一定要注释 比如这个文件进行了什么操作
# 全局设置 以后再建项目 就不需要重新添加用户了
git config --global user.name '用户名'
git config --global user.email '用户邮箱'
# 局部设置: 只对当前仓库有效
git config user.name 'xxx'
git config user.email '[email protected]'
查看版本记录
git log
查看时间点之前|之后的日志:
>: 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 reflog
按 Q 退出
两个查看版本的区别
# git log
commit 7884b345a03ec8a1dfae5976d3e1c4ec55a2f785 (HEAD -> master) # 版本号
Author: xxx <4@qq.com> # 作者
Date: Mon Jan 22 12:29:13 2024 +0800 # 日期
xxx # 注释
# 如果做了代码回撤---》这里的日志看不到,就通过git reflog来查看
git reflog # 可以看得到所有的提交记录 包括回退的版本
$ git reflog
a12627a (HEAD -> master) HEAD@{0}: commit: 宝贝上号吧
c0da972 HEAD@{1}: commit (initial): xxx
git checkout . # 把工作区变更回退(还没放到暂存区)
git checkout 文件名
git reset - HEAD # 暂存区回退到工作区
git reset --soft 版本号 # 唯一表示,可以不写全 版本区拉回暂存区 版本号是唯一标识
git reset --mix 版本号 # 把版本库直接拉回到工作区
git reset --hard 版本号 # 版本库直接回到工作区
回滚到上一个版本 或者其它版本
git reset --hard HEAD^
git reset --hard HEAD~
回滚到上三个版本:
git reset --hard HEAD^^^
git reset --hard HEAD~3
回滚到指定版本号的版本:
git reset --hard 版本号 (重点)
git reset --hard 35cb292
# 只要是被版本管理了,后期我们可以回退到任意版本
# 在仓库中,某些文件或文件夹,不期望被git管理,不被版本管理
比如 前端文件:
-node_models
-.idea
-.vscode
...
怎么作呢?
# 在仓库目录下新建一个文件:.gitignore
标明哪些不被git管理,标明语法如下:
-如果是文件,直接写文件名
-如果是文件夹,直接写文件夹名
""" 过滤文件内容
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
例如:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
注意:
# 以'#'开始的行,被视为注释.
# 忽略掉所有文件名是 lqz.txt的文件.
lqz.txt
# 忽略所有生成的 html文件,
*.html
# lqz.html是例外,不在忽略范围内
!lqz.html
# 忽略所有.o和 .a文件.
*.[oa]
## 后端项目的忽略文件
luffy.log
__pycache__
*.pyc
.idea
scripts
.vscode
**/migrations/*.py
!**/migrations/__init__.py
#### 空文件夹不被git管理
所有会在空文件夹下创建一个 __init__.py的文件
注意: 以后再创建分支之前---》先保证 所有文件都被git管理起来
1 查看分支
git branch
* master # 只有一个master分支
dev
2. 创建一个dev分支
git branch dev # 创建一个dev分支
3 切换分支
git checkout dev # 切换到dev分支
git checkout -b 分支名 # 创建后直接切换的该分支
切换分支之后再查看
* 在谁身上 就是当前所在的分支
* master # 只有一个master分支
dev
4 删除分支(不能自己删自己)
git branch -d dev
5 合并分支
-切换到master上
-git merge dev # 把dev合并到当前分支
1. 注册账户
https://gitee.com/
2. 在gitee建立一个仓库 新建仓库
3. 在本地执行
git config --global user.name 用户
git config --global user.email 邮箱
比如:
git config --global user.name "liuqingzheng"
git config --global user.email "[email protected]"
添加远程仓库地址
git remote add origin https://gitee.com/liuqingzheng/lqz2.git # 添加远程
git remote add origin 地址
本地提交到远程仓库
git push origin master # 也可能是其他分支
# 远程仓库命令
git renote
git remote -v # 查看具体链接地址
# 查看remote命令帮助文档
git remote -h
# 删除远程源
git remote remove 源名
git remote remove origin
# 添加远程源
git remote add 源名 源地址
git remote add orgin https://gitee.com/liuqingzheng/app01.git
# 提交代码到远程源(以后会经常用)
git push 源名 分支名
# 克隆远程源(以后会经常用)
git clone 远程源地址
# 从远程仓库拉去代码(以后会经常用)
git pull 源名 分支名
# 之前咱们添加远程仓库,地址是 http开头的,使用的是http链接远程仓库
# 输入了用户名和密码---》记录在操作系统本地---》以后就不用在输入用户名密码了
git remote add orgin https://gitee.com/liuqingzheng/app01.git
# 咱们要学习---》ssh方案---》不需要输入用户名密码了---》公钥私钥认证方式
-本地机器 保留 私钥
-在远程仓库配置 公钥
-远程仓库地址,就不是http的了,而是
git@gitee.com:liuqingzheng/lqz2.git#ssh方案,需要公钥私钥
# 如何生成公钥私钥? 所有操作系统都支持这个操作
"""
教程地址:
https://help.gitee.com/enterprise/code-manage/%E6%9D%83%E9%99%90%E4%B8%8E%E8%AE%BE%E7%BD%AE/%E9%83%A8%E7%BD%B2%E5%85%AC%E9%92%A5%E7%AE%A1%E7%90%86/%E7%94%9F%E6%88%90%E6%88%96%E6%B7%BB%E5%8A%A0SSH%E5%85%AC%E9%92%A5#article-header0
"""
# 操作步骤
1 cmd/git bash here 命令窗口中执行 两个命令窗口都可以
ssh-keygen -t ed25519 -C "[email protected]"
ssh-keygen -t ed25519 -C "用户邮箱"
2 在操作系统用户--家路径中生成一个 ssh文件夹 里面有公钥私钥 pub结尾的是公钥
id_ed25519.pub # 公钥--》给别人
id_ed25519 # 私钥---》自己留着
3 去gitee配置公钥
https://gitee.com/profile/sshkeys
ssh -T git@gitee.com # 输入yes
4 以后可以免密操作
5 增加一个远程仓库地址:指定是ssh链接
git remote add origin git@gitee.com:liuqingzheng/lqz2.git
6 把代码推送到远端
git push origin master
### 以后用https还是ssh呢?
-公司里用ssh居多
# 公司中你们的使用流程
1 要么自己注册,公司给你注册好了---》账号密码和gitee地址
2 登录到gitee上,能看到一个项目(别人创建的,但你是开发者,你能看到)
2.1 本地生成ssh公钥和私钥--->把公钥配置在gitlab
2.2 继续后续操作
3 把代码拉取到本地(已经配置好了ssh公钥和私钥)
git clone git@gitee.com:liuqingzheng/lqz2.git
4 修改代码,加代码
5 本地提交
6 推送到远端
# 补充:加密
-0 编码:
base64
url编码和解码
-1 摘要算法
md5
sha1
-3 对称加密
加密和解密使用同样的秘钥
DES
3des
aes
-4 非对称加密
加密使用一个秘钥,解密使用另一个秘钥:公钥和私钥
公钥加密---》私钥解密
RSA
DSA
多人合作开发一个项目
步骤
在本地拉取项目
git clone git@gitee.com:liuqingzheng/luffy_api.git
在拉取的仓库中加代码
先把它加入git管理 然后用pycharm打开 完成开发之后在提交
记得先写好忽略文件 把不需要提交的加入忽略文件在提交
git add .
git commie -m '我的第一次'
git push origin master
以后都开发当时拉下来这个文件夹
#####注意:#####
如果某个文件或文件夹已经被版本管理了,后期再设置忽略,就无效了
-如何让它再被忽略呢?
-把这个文件删除后,以后就被忽略了
# 新人来的时候操作
# 1 组长,把你加成开发者 然后登录自己的gitee 就可以看得到项目了 然后再拉取下来
git clone https://gitee.com/liuqingzheng/luffy_api.git
# 2 使用pycharm打开
# 3 git 操作
修改 user 的app下 __init__.py,写入
print("hello world")
git add .
git commit -m ''
git push origin master
------先提交的----
# 第二个人
# 1 拉取(本地早就有)
git clone https://gitee.com/liuqingzheng/luffy_api.git
# 2 使用pycharm打开
# 3 git 操作
修改 user 的app下 __init__.py,写入
print("lqz")
git add .
git commit -m ''
git push origin master
# 不允许提交---》跨版本了
git pull origin master # 拉取远端和本地保持一致
# 我出冲突了,解决冲突
# 再提交
git add .
git commit -m '处理问题'
git push origin master
# 提交完之后 你提交代码的远程仓库添加了新的代码 你自己的用户也会更新项目 继续从自己那里拉取下来开发 在提交的远程 这样子循环操作
# 1 创建dev分支
# 2 创建bug分支
# 3 在bug分支修改 发现user文件有问题---> 在bug分支修改好了
# 4 合并进主分支---》没有冲突
# 5 dev分支开发,新增一个xx.py 文件---》提交到版本库
# 6 另一个人也发现了这个问题--->然后他也修改了这个文件
# 7 跟主分支合并--》出冲突---》解决冲突
# 8 如果两个人修改的是同一个功能 跟同事商量 保留一个即可
###冲突的样子
<<<<<<< HEAD
print('sssssl')
=======
print('lsssss')
>>>>>>> dev
# 张三:
git pull origin master
xx.py 第四行加入 print('张三')
git add .
git commit -m '加了张三'
git push origin master
# 我
# 如果我pull,在最新的基础上,写,不会出冲突
git pull origin master
# 我没有pull,尽管写---》写了同一个位置,pull下来就会冲突 原因是同事提交的新的代码
只需要重新pull 重新提交 push即可
# 之前学过,本地分支合并
git merge 分支名
# 学习直接在线上合并分支
## 远程创建分支,拉取到本地##
-远程创建分支,拉取到本地
-点点点创建
-在本地执行:
git pull origin # 拉下来,但是看不到,只有切进去才能看到
git checkout bug
# 本地创建,推送到远端##
-本地创建分支
git branch dev
git checkout dev # 切到dev分支
git push origin dev # 把本地当前分支,推动到远端dev分支
# 线上分支合并
-在本地dev分支加入xx.py 加入 一句话
-推送到远端 dev分支
-在远端 把dev合并进maste
# 你提合并请求---》你领导审核代码---》同意---》你才合进来
注意: #### commit 的时候 单引号有时候提交有问题 就用双引号