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 重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去

 

ssh连接和https连接

# 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的地址粘贴在这里即可(路径可以改一改 不能重名) 打开

 

Python操作Redis之普通连接

# 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)

 

 

Python操作Redis之连接池

复制代码
###### 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)
View Code
复制代码

 

 

操作之String操作

复制代码
#####字符串操作
####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
View Code
复制代码

 

 

Hash操作

复制代码
# 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
View Code
复制代码

 

 

操作之List操作

复制代码
### 列表操作
# 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
View Code
复制代码

 

redsi的其他使用

# 其他操作
# 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)

posted @   朱饱饱  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示