Git的使用
#1 协同开发,版本管理
#2 svn(集中式管理),git(分布式管理)
#3 git装完,既有客户端,又有服务的
#4 git工作流程
-工作区,暂存区,版本库
#5 远程仓库:github,码云,公司内部(gitlab)
# 6 安装:一路下一步
# 7 右键--git bash here
# 8 git 命令
-初始化:git init 文件夹名
-初始化:git init #当前路径全被管理
新建文件 mkdir b
-git status 查看哪些被add过
-git add a.txt # 把a提交到暂存区
-git add .
-git commit -m '注释,我新增了a' # 把暂存区的所有都提交到版本库
-需要增加作者信息
git config --global user.email "lqz@qq.com"
git config --global user.name "lqz"
git config user.email "egon@qq.com"
git config user.name "egon"
-把a的新增提交到版本管理
-新建b,在a中新增一行
-git checkout . # 回复到提交版本的位置,a是空的,b没有被git管理,所有,是什么样,还是什么样
-git log # 查看版本管理的日志
-git reflog # 查看日志,条数更多,内容更少
-git reset --hard 版本号
# 红色表示未被管理
# 绿色表示提交到暂存区了
# 忽略文件
-空文件夹不被管理
-指定某些文件或者文件夹不被git管理
-在项目根路径,跟.git文件夹一个路径,新建.gitignore.,在里面配置
- 语法:
# 号是注释,没有用
文件夹名字,表示文件夹忽略,不被管理
/dist 表示根路径下的dist文件夹,不被管理
*.py 表示后缀名为py的文件,都被忽略
*.log*
# 分支操作
-查看分支 git branch 查看所有分支,分支是绿的,表示在当前分支上
-创建分支 git branch dev
-创建并切换到 git checkout -b dev
-删除分支 git branch -d dev
-切换分支 git checkout dev
-合并分支 git merge 分支名 # 把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令
#远程连接
# 1 码云(国内,快)
# 2 新建仓库的时候,不要勾选Readme初始化这个而仓库
# 3 现在什么都没有,新建仓库
mkdir lqz_test
cd lqz_test
git init
touch a.txt
git add a.txt
git commit -m "first commit"
git remote add origin https://gitee.com/liuqingzheng/lqz_test.git # 连接远程
git push origin master
# 4 已经有了仓库
cd b
git remote add origin https://gitee.com/liuqingzheng/lqz_test.git
git push origin master
# 5 git 远程操作命令
-git remote # 查看远程仓库(没有就看不到)
-git remote add origin https://gitee.com/liuqingzheng/lqz_test.git # 跟远程仓库建立连接
-git push origin master # 把本地的master分支提交到远程的origin,需要输入用户名和密码(之前存的需要删掉)
小tips:
git status 没有红色和绿的才能提交到远程
提交代码之前,一定要先拉代码(如果本地不是最新的,提交不上去)
每天一到公司,先拉一下代码,你要提交之前,一定要拉
冲突出现的原因:1 多人同时操作同一个分支 2 分支合并的冲突
线下分支合并,可能会出冲突,解决,直接提交
创建远程分支:本地建完,push上去 远端直接创建
git clone 远程已经有了仓库和代码了
简化版:
上传
1.登录gitee,先在网上搜索SSH公钥私钥,配置好公钥,新建一个仓库
-生成一对公钥和私钥(用命令)百度直接搜生成ssh key的命令即可
-https://gitee.com/help/articles/4181
-ssh-keygen -t rsa -C "lqz@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)
-把公钥复制出来,再码云上配置 设置----左侧下滑点击SSH公钥 粘贴到公钥处会自动显示标题
这里点击进去就能看到gitee的地址(此图从上到下分别是私钥、公钥、gitee的地址)
2.来到项目所在的文件,右键进入点击git bash here
根据提示走完
详细补充版:
安装好后
1.桌面右键--点击git bash here
桌面新建文件 mkdir b
2. git 命令
-初始化:git init 文件夹名
-初始化:git init #当前路径全被管理
-git status 查看哪些被add过
-git add a.txt # 把a提交到暂存区
-git commit -m '注释,我新增了a' # 把暂存区的所有都提交到版本库
3.
登录gitee新建一个仓库
4.
在仓库中将以下复制到git bash here:
git remote add origin https://gitee.com/liuqingzheng/lqz_test.git
git push origin master
跳转到需要输入用户名密码,如果报错就在:将带有git的删除即可
# 5 git 远程操作命令
-git remote # 查看远程仓库(没有就看不到)
-git remote add origin https://gitee.com/liuqingzheng/lqz_test.git # 跟远程仓库建立连接
-git push origin master # 把本地的master分支提交到远程的origin,需要输入用户名和密码(之前存的需要删掉)
# 1 项目创始者,如上
# 2 项目开发者,参与者(换了一台电脑),把代码拉下来继续开发 此处使用https,但在日常工作中我们一般使用ssh
这里我们可以看到克隆成功之后会有luffy-zs的文件夹
-能看到完整的版本和日志控制
-可以回复到任意版本
-git rest --hard 版本号
-git checkout . # 表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前再的版本上的东西
# 3 本地新增c.txt文件
-提交到暂存区
-提交到版本库(没有提交到远程,远程看不到)
-提交到远程:git push origin master
# 4 让a文件夹中的代码成为最新的
-git pull origin master
# 5 重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去
-能看到完整的版本和日志控制
-可以回复到任意版本
-git rest --hard 版本号
-git checkout . # 表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前再的版本上的东西
# 3 本地新增c.txt文件
-提交到暂存区
-提交到版本库(没有提交到远程,远程看不到)
先拉下来 :git pull origin master 以防出现跨版本提交
-提交到远程:git push origin master
# 4 让a文件夹中的代码成为最新的
-git pull origin master
# 5 重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去
# 1 公司内部大部分用ssh连接
-领导给你一个git地址(项目地址)
-你 git clone 地址 到本地
-改代码,改完了---》提交(禁止)
-ssh配置,以后都不用输密码了
# 2 配置如何做
-对称加密(加密和解密用同一套秘密)
-非对称加密(公钥和私钥),公钥加密,私钥解密
-生成一对公钥和私钥(用命令)百度直接搜生成ssh key的命令即可
-https://gitee.com/help/articles/4181
-ssh-keygen -t rsa -C "lqz@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)
-把公钥复制出来,再码云上配置 设置----左侧下滑点击SSH公钥 粘贴到公钥处会自动显示标题
这里点击进去就能看到gitee的地址(此图从上到下分别是私钥、公钥、gitee的地址)
如果要把pycharm中的项目上传到仓库中:
1.首先新建仓库如上,拿到仓库公钥(SSH)最下面,再将仓库内容clone到新的文件夹的右键--点击git bash here中,输入yes 在家文件中就能看到
成功后是这样
在gitee上进行刷新即可
2.在新的文件clone下来之后,打开将其中的所有文件都copy到pycharm项目所在的文件夹内
在pycharm项目所在的文件夹内(这里是luffyapi文件,我们以下简称luffyapi文件)
打开就是master了
如果拿一个仓库里有的项目想加到pycharm内:
用SSH的地址粘贴在这里即可(路径可以改一改 不能重名) 打开
# 1 pip3 install redis # 简单使用 from redis import Redis # conn=Redis() #连接对象 conn=Redis(host='127.0.0.1', port=6379) ret=conn.get('name') print(ret)

###### t_redis_pool.py #redis连接池 import redis #pool必须是单例的 POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=100) # 造一个池子,最多能放100个连接 #######t_redis_conn.py #redis连接池 # import redis # #pool必须是单例的 # pool = redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=100) # 造一个池子,最多能放100个连接 import redis #包内的py文件,如果想右键运行,导包的时候不能带点 from t_redis_pool import POOL # pycharm提示的错 r = redis.Redis(connection_pool=POOL) # 只要执行这一句话,就是从池中拿出一个连接 ret=r.get('name') print(ret)

#####字符串操作 ####1 set的用法 # conn.set('height',180) #基本使用 # conn.set('height','190',nx=True) # conn.set('height','190',xx=True) # conn.set('height1','190',xx=True) ''' ex,过期时间(秒) px,过期时间(毫秒) nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果 xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值 ''' ### 2 # setnx(name, value) # # 设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改 # setex(name, value, time) # # 设置值 # # 参数: # # time,过期时间(数字秒 或 timedelta对象) # psetex(name, time_ms, value) # # 设置值 # # 参数: # # time_ms,过期时间(数字毫秒 或 timedelta对象 # mset # conn.mset({'name1':'11','name3':'dasfd'}) # ret=conn.mget(['name1','name','name3']) # print(ret) # ret=conn.getset('name1', '999') # print(ret) # ret=conn.getrange('name1',0,0) # 前闭后闭区间 # print(ret) # conn.setrange('name1',1,88888) # ret=conn.getbit('name1',9) # print(ret) #incr :统计网站访问量,页面访问量,接口访问量 # conn.incr('name1') # 只要一执行,数字加1 # conn.incr('name1') # 只要一执行,数字加1 # conn.incr('name1') # 只要一执行,数字加1 # conn.incr('name1') # 只要一执行,数字加1 #decr # conn.incr('name1',-2) # conn.decr('name1',3) # conn.append('name1','oo') # conn.incr('name1') ##重点: #set :很多参数 #get #mset #mget #incr #decr #append

# hash操作 # conn.hset('hash1','name','lqz') # conn.hset('hash1','name2','lqz') # conn.hset('hash1','name','lqz444') # key不可以重复, # ret=conn.hget('hash1','name') #只能取一个 # print(ret) # conn.hmset('hash2',{'key1':'value1','key2':'value2'}) # ret=conn.hmget('hash1','name','name2') # ret=conn.hmget('hash1',['name','name2']) # print(ret) # ret=conn.hgetall('hash1') # 尽量少用 # print(ret) # ret=conn.hlen('hash1') # ret=conn.hkeys('hash1') # ret=conn.hexists('hash1','name1') # ret=conn.hdel('hash1','name') # conn.hset('hash1','name',12) # ret=conn.hincrby('hash1','name') # # print(ret) # 以后想取出hash类型内所有的数据,不建议用hgetall,建议用hscan_iter # 一次性先取一部分回来(假设有1w条,先取回100条,把这100条做成了生成器) # ret=conn.hscan_iter('hash1') # print(ret) # for i in ret: # print(i) ##重点掌握 # hset # hget #hmset #hmget # hincrby # 区分hgetall和hscan_iter

### 列表操作 # ret=conn.lpush('list1',1,2,3,4,5) # ret=conn.rpush('list1',999) # ret=conn.lpushx('list2',1) # ret=conn.lpushx('list1',888) # 必须有这个key才能放 # ret=conn.rpushx('list1',666) # 我们猜,返回总长度 # ret=conn.llen('list1') # ret=conn.linsert('list1','before','3','77777777') # ret=conn.linsert('list1','after','3','66666666') # ret=conn.lset('list1',3,'22222') #从0开始计数 # ret=conn.lset('list1',0,'11111') # ret=conn.lrem('list1',2,'5') # 从前往后删除两个5 # ret=conn.lrem('list1',-1,'5') # 从后往前删除1个5 # ret=conn.lrem('list1',0,'5') # 删除所有5 # ret=conn.lpop('list1') # ret=conn.rpop('list1') # ret=conn.lindex('list1',0) # ret=conn.lrange('list1',0,2) # 前闭后闭 # ret=conn.ltrim('list1',1,2) # 重点block,阻塞,可以写一个超时时间 # ret=conn.blpop('list1',timeout=10) # print(ret) # 自定制分批取列表的数据 # conn.lpush('test',*[1,2,3,4,45,5,6,7,7,8,43,5,6,768,89,9,65,4,23,54,6757,8,68]) # conn.flushall() def scan_list(name,count=2): index=0 while True: data_list=conn.lrange(name,index,count+index-1) if not data_list: return index+=count for item in data_list: yield item # print(conn.lrange('test',0,100)) for item in scan_list('test',5): print('---') print(item) # 重点 lpush lpop blpop lrange llen
# 其他操作
# conn.delete('list1')
# ret=conn.delete('hash1')
# ret=conn.exists('hash2')
# ret=conn.keys('cache*') #查询以cache开头的所有key
# ret=conn.expire('hash2',2)
# ret=conn.type('name3')
# ret=conn.type('test')
# ret=conn.type('test')
print(ret)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南