0基础python教程 重学Git

高效使用Git和GitPython:从入门到精通 Git和GitPython提供了强大的版本控制功能和自动化能力。通过学习和使用这些工具,开发者可以更有效地管理代码版本和协作。 阅读详情

看着标题很多的同学相信都会有疑问,为了要重学Git,之前难道学习的正确,没错,如果不是正确的学习Git后面遇到的问题就会很棘手,不知道如何去解决,就不能更好的运用Git,下面跟着老刘一起来重新学习Git吧!

## 1 Git介绍

```python

# Git的作用

1 对文件(代码)进行版本管理

2 完成 协同开发 项目,帮助程序员整合代码

    i)帮助开发者合并开发的代码

    ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突

# Git简介

Git是分布式版本控制系统,控制的对象是开发的项目代码

# 举例

比如你在写毕业论文,想删除一个段落,又怕将来想恢复找不回来怎么办?

于是你先把当前文件另存为一个新的文件,再接着改,改到一定程度,再另存为成另一个新文件,这样一直改下去,最后你的文件变成了:

    -毕业论文1.doc

  -毕业论文2.doc

  -毕业论文3.doc

  -毕业论文-永不修改版.doc

  -毕业论文-打死不改版.doc

  -毕业论文-再改去死版.doc

过了一段时间,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找

看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删

```

## 2 Git 和SVN

![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggqvsye2khj30kj0a6mx3.jpg)

![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggqvt8t61hj30m10da3yk.jpg)

**Git:分布式,无网络时也可以提交到本地版本库,待到有网络时再push到服务器. **

**svn:非分布式.无网络不可以提交**

## 3 Git,GitHub,GitLab,Gitee

```python

Git:是一种版本控制系统,是一个命令,是一种工具。

GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台

GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发

Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台

```

## 4 Git工作流程

![未命名文件 (1)](https://tva1.sinaimg.cn/large/008i3skNgy1guqseyffpoj60x40eqmyu02.jpg)

## 5 Git使用

### 5.1 流程(核心总结)

```python

"""

1)有红色信息(工作区有内容),就执行 add 

2)全绿信息(内容全部在暂存区),才执行 commit

3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本

"""

```

### 5.2 安装

```python

# 1.下载对应版本:https://git-scm.com/download

# 2.安装git:在选取安装路径的下一步选取 Use a TrueType font in all console windows 选项

```

### 5.3 基础命令

#### 将已有的文件夹 - 初始化为git仓库

```python

"""

>: cd 目标文件夹内部

>: git init

"""

```

#### 在指定目录下 - 初始化git仓库

```python

"""

>: cd 目标目录

>: git init 仓库名

"""

```

#### 在仓库目录终端下 - 设置全局用户

```python

"""

>: git config --global user.name '用户名'

>: git config --global user.email '用户邮箱'

注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用

"""

```

#### 在仓库目录终端下 - 设置局部用户

```python

"""

>: git config user.name '用户名'

    -- 用户名

>: git config user.email '用户邮箱'

    -- 用户邮箱

注:在当前仓库下的config新建用户信息,只能在当前仓库下使用

注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

"""

```

#### 查看仓库状态

```python

"""

# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看

>: git status  

    -- 查看仓库状态

>: git status -s  

    -- 查看仓库状态的简约显示

"""

```

#### 工作区操作

```python

# 通过任何方式完成的文件删与改

# 空文件夹不会被git记录

```

#### 撤销工作区操作:改、删(了解)

```python

"""

>: git checkout .

    -- 撤销所有暂存区的提交

>: git checkout 文件名

    -- 撤销某一文件的暂存区提交

"""

```

#### 工作区内容提交到暂存区

```python

"""

>: git add .  

    -- 添加项目中所有文件

>: git add 文件名  

    -- 添加指定文件

"""

```

#### 撤销暂存区提交:add的逆运算(很少使用)

```python

"""

>: git reset HEAD .

    -- 撤销所有暂存区的提交

>: git reset 文件名

    -- 撤销某一文件的暂存区提交

>: git reset .

    -- 撤销所有暂存区的提交

"""

```

#### 提交暂存区内容到版本库

```python

>: git commit -m "版本描述信息"

```

#### 撤销版本库提交:commit的逆运算

```python

"""

回滚暂存区已经提交到版本库的操作:

    查看历史版本:

        >: 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

"""

```

#### 扩展阅读

```python

# git log 和git reflog的区别

git log 命令可以显示所有提交过的版本信息

如果感觉太繁琐,可以加上参数  --pretty=oneline,只会显示版本号和提交时的备注信息

git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

# git reset --hard,--mix,--soft的区别

hard (硬)-> 全部删除,会彻底返回到回退前的版本状态,了无痕迹

mixed (中)-> 保留工作目录,文件回退到未commit的状态

soft (软)-> 保留工作目录、暂存区 ,文件会回退到未 add(未到暂存)的状态

总结:

soft是撤销commit的提交,但工作区未提交的更改还是保留;

mixed是撤销暂存区的提交,工作区的更改同样也保留;

而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了

```

## 6 Git忽略文件

Git工作目录中,有些文件必须要有,但又不能提交它们,就可以设置忽略文件

在Git工作区的根目录下创建一个特殊的`.gitignore`文件,然后把要忽略的文件名放进去,Git就会自动忽略这些文件

```python

# .gitignore 文件

# 1)在仓库根目录下创建该文件

# 2)文件与文件夹均可以被过滤

# 3)文件过滤语法

""" 过滤文件内容

文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤

/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤

例如:

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]

"""

```

## 7 Git分支

### 7.1 基本使用

```python

"""

1.创建分支

git branch 分支名

2.查看分支

git branch

3.切换分支

git checkout 分支名

4.创建并切换到分支

git checkout -b 分支名

5.删除分支

git branch -d 分支名

6.查看远程分支(列出所有分支,包含远程)

git branch -a

7.合并分支

git merge 分支名

把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令

8.删除远程分支

git push origin --delete lqz

9.新建远程分支

本地lqz分支建立完成

git push origin lqz 

"""

"""

1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发)

2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可

3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev)

"""

```

### 7.2 dev分支合并到master分支

![未命名文件 (2)](https://tva1.sinaimg.cn/large/008i3skNgy1guqz5c5882j60p107w0t002.jpg)

### 7.3 基于分支的线上bug修复(开发新功能,出现bug)

![未命名文件 (3)](https://tva1.sinaimg.cn/large/008i3skNgy1guqztf0lfvj60s70aqjry02.jpg)

```python

# 无冲突情况

git branch dev # 创建dev分支

git checkout dev # 切换到dev分支

vi d3.txt       # 新增d3.txt

git add .

git commit -m 'd3.txt' # 提交到版本库

git checkout master    # 切换到master分支

git branch bug         # 创建bug分支

git checkout bug       # 切换到bug分支

vi b4.txt              # 在bug分支,新增b4.txt  

git add .

git commit -m 'b4.txt'

git checkout master    # 切换回master分支

git merge bug          # 合并bug分支

git log

git merge dev          # 合并dev分支,无冲突,写注释

git log

```

```python

git branch -d dev

git branch -d bug

# 有冲突情况

git branch dev # 创建dev分支

git checkout dev # 切换到dev分支

vi d4.txt       # 新增d4.txt

git add .

git commit -m 'd4.txt' # 提交到版本库

git checkout master    # 切换到master分支

git branch bug         # 创建bug分支

git checkout bug       # 切换到bug分支

vi b4.txt              # 在bug分支,新增b4.txt  

git add .

git commit -m 'd4.txt'

git checkout master    # 切换回master分支

git merge bug          # 合并bug分支

git log

git merge dev          # 合并dev分支,出冲突

'''

CONFLICT (add/add): Merge conflict in d4.txt

Auto-merging d4.txt

Automatic merge failed; fix conflicts and then commit the result.

'''

# 打开d4.txt发现如下错误

<<<<<<< HEAD    # 原来代码

bug-add-d4

=======         # 新代码

sada

>>>>>>> dev

#  手动修复,解决冲突,再提交

git add .

git commit -m '解决冲突'

git log

```

## 8 Git远程仓库

**我们要协同开发,代码要提交到远程仓库,可以使用gitee,github,gitlab,本文以gitee为例**

### 8.1 创建远程仓库

```python

# 首先注册gitee账号,登陆后,创建仓库

```

**注意:git push -u origin master 中-u的意思是,只要执行一遍这个命令,以后执行git push 就等同于git push origin maste,所有-u表示设置一个默认 **

### 8.2 remote源操作

```python

"""

1)查看仓库已配置的远程源

>: git remote

>: git remote -v

2)查看remote命令帮助文档

>: git remote -h

3)删除远程源

>: git remote remove 源名

eg: git remote remove origin

4)添加远程源

>: git remote add 源名 源地址

>: git remote add orgin https://gitee.com/liuqingzheng/app01.git

5)提交代码到远程源

>: git push 源码 分支名

6)克隆远程源

>: git clone 远程源地址

"""

"""

1)通过克隆方式连接远程源,默认远程源名就叫origin;所以主动添加远程源来连接远程仓库,源码也用origin

2)本地一个仓库只需要和远程一个源进行同步,所以只需要连接一个远程源,如果还想把本地代码同步给第三个平台,那么可以通过主动添加远程源来连接第三个平台的远程仓库,此时的源码就不能再叫origin了,比如online都可以

3)pull和push都可以提供选择不同的源码,和不同的远程仓库交互

"""

```

### 8.3 采用ssh协议连接远程源

```python

# 生成公钥私钥,帮助文档

官网:https://gitee.com/help/articles/4181#article-header0

# 在命令行下执行命令

ssh-keygen -t rsa -C "306334678@qq.com" # 邮箱可以任意填写

# 生成的公钥私钥,会放在用户家路径下的.ssh文件夹下

本机命令,查看公钥:cat ~/.ssh/id_rsa.pub

# 复制公钥,粘贴到gitee上配置

    -项目仓库 => 管理 => 部署公钥管理 => 添加公钥 => 添加个人公钥

# 把原来的 origin删除,新增ssh源

git remote remove orgin

git remote add orgin git@gitee.com:liuqingzheng/app01.git

# 配置成功后,再拉取和提交代码,不需要输入用户名密码认证了

```

### 8.4 如何成为其他码云项目的开发者

```python

如果公司项目已经存在,同事新入职,基于原项目开发

"""

1)生成自己电脑的公钥,配置到自己的码云个人公钥中

2)把自己的码云用户名提供给别人,别人添加你成为项目开发者

3)自己确认添加,成为开发者,克隆开发项目,进行开发

"""

```

### 8.5 协同开发

```python

"""

1)作为开发者,第一次同步项目

>: git clone 项目地址

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

"""

```

### 8.6 线上分支合并(提交pr)

#### 无冲突情况

```python

# 本地创建分支

git branch dev

# 把本地分支提交到远程

git push  origin dev

# 在本地dev分支修改代码

git checkout dev

vi d5.txt

git add .

git commit -m '新增d5'

# 推送到远程

git push  origin dev

```

![image-20210924002401179](https://tva1.sinaimg.cn/large/008i3skNgy1gur0wjexf0j61wa0eodi902.jpg)

![image-20210924002620931](https://tva1.sinaimg.cn/large/008i3skNgy1gur0yzez7aj61e60u041l02.jpg)

![image-20210924003103078](https://tva1.sinaimg.cn/large/008i3skNgy1gur13ujqipj61i80u0adt02.jpg)

#### 有冲突情况

```python

git pull origin master  # 主分支拉取最新

vi d5.txt

git add .

git commit -m '修改d5.txt'

git push  origin master  # 主分支修改一行,提交到远程

git checkout dev  # 切换到dev分支

 vim d5.txt

git add .

git commit -m 'dev修改d5.txt'

git push  origin dev    # 修改同一行,提交到远程,注意同一行内容不能一致

## 线上提交pr,线上不能自动合并,需要手动合并

git checkout master

git pull https://gitee.com/liuqingzheng/app01.git dev

# 手动修改冲突

git add .

git commit -m '合并pr'

git push origin master

# 再去线上,看到分支已经合并好了

```

### 8.7 远程仓库回滚

```python

"""

用dev分支举例

1)本地切换到远程要回滚的分支对应的本地分支

git checkout dev

2)回滚本地分支

git reset --hard 版本号

3)本地版本强行提交给服务器

git push origin dev -f

"""

```

## 9 冲突解决

### 9.1 多人开发同一分支导致冲突

```python

"""

1)在远程仓库和本地仓库版本不一致时,拉取远程仓库版本到本地时,两个版本进入融合,可能会出现版本冲突

2)定位冲突文件冲突代码,线下沟通冲突代码,整合代码解决冲突

3)将解决冲突后的代码重新提交到本地版本库

4)再拉去远程仓库,直到没有冲突,提交本地版本库到远程

"""

"""

<<<<<<< HEAD  # 冲突的开始

# 自己的代码

=======  # 分割线

# 别人的代码

>>>>>>> b63c408abd05b87fc492d40523240561999dba50  # 冲突的结束(版本)

"""

"""

1)删除冲突相关标识:冲突的开始、分割线、冲突的结束(版本)

2)线下沟通,根据实际需求完成代码整合

3)测试整合后的代码

"""

"""

出现冲突的前提:

1)不同开发者同时操作了同一文件

2)并且在相同行写了代码

强调:有业务交际时,版本合并不一定会出现冲突相关的标识,但是可能会带着代码运行崩溃,所有理论上每一次版本合并,都要测试合并后的所有功能(及其之少的情况)

"""

```

### 9.2 分支合并导致冲突

```python

分支合并出现冲突效果跟上面一样,只需要解决冲突,重新提交即可

"""

<<<<<<< HEAD  # 冲突的开始

# 自己的代码

=======  # 分割线

# 别人的代码

>>>>>>> dev  # 冲突的分支

"""

```

## 10 同一个人在公司开发和在家开发

### 10.1 正常情况

```python

# 公司电脑,有代码

git branch lqz

git checkout lqz # 创建一个自己的分支,写代码

vi new.txt

git add .

git commit -m '公司开发了'

git push origin lqz

# 家里电脑,没有代码,需要先克隆

cd Desktop/proj

git clone https://gitee.com/liuqingzheng/app01.git

cd app01

git pull origin lqz #拉取lqz分支内容

git checkout lqz    # 切换到lqz分支

# 基于此继续开发,公司开发的代码也拉下来了,写完记得提交到远程

# 到了公司只需要再pull一下即可把家中开发的开发同步过来

```

### 10.2 公司忘记提交代码情况

```python

# 忽然有一天,在公司开发了代码,没有提交到远程仓库

# 回家就没法拉取最新公司开发的代码,只能基于远程仓库最新代码继续开发其他功能(跟公司开发的功能不一样)

# 在家中开发完成提交到远程

# 第二条天到公司,拉取远程最新代码(可能有冲突)

```

## 11 Git标签管理

```python

# 1 打tag

git tag -a "v1.0" -m "new tag v1.0"

# 2 推送tag到远程

git push origin v1.0

# 3 可以看到远程有tag了

# 4 基于其他位置打log

git reflog # 查看日志id

# 5 打tag

git tag -a "v1.1" id号 -m 'test'

# 6 推送tag到远程

git push origin v1.1

```

## 12 为开源项目贡献代码

```python

# 第一步:fork开源代码,fork后,在你的个人仓库里就可以看到这个开源代码了(相当于copy了一份)

# 第二步:在自己仓库进行修改

修改代码,提交暂存,提交到版本库,提交到自己gitee

# 第三步:给开源作者提交pr

# 第四步:开源软件作者就会收到pr,他选择是否合并,合并后,你就成了开源软件开发者

```

![image-20210924011328551](https://tva1.sinaimg.cn/large/008i3skNgy1gur2bzmed2j61lq0u043002.jpg)

## 13 变基操作(rebase)

**让提交记录变得更加简洁**

### 13.1 第一,多个记录整合成一个记录

![未命名文件 (5)](https://tva1.sinaimg.cn/large/008i3skNgy1gur3uhyglyj60np08eaag02.jpg)

```python

git branch lqz  # 创建分支lqz

git checkout lqz # 切换到分支lqz

vi lqz.txt       

git add .

git commit -m '增加lqz.txt' # 新增lqz.txt 并提交

vi lqz1.txt

git add .

git commit -m '增加lqz1.txt' # 新增lqz1.txt 并提交

vi lqz2.txt

git add .

git commit -m '增加lqz2.txt' # 新增lqz2.txt 并提交

git log   # 查看版本日志

# 指定合并从当前版本开始往前的哪个版本(不包含)

git rebase -i 8fa035cd6805e8b35ccb9ceee9a9710c9b819b3c

# 把第二行开始,改为s

# 加入注释,合并后的注释

git log # 只能看到合并后的注释了,多次更改变成了一次

# 注意:已经提交到远程仓库的版本,不要再使用rebase,只合并本地版本提交的几率

```

### 13.2第二,解决分支合并分叉问题

![未命名文件 (6)](https://tva1.sinaimg.cn/large/008i3skNgy1gur4jas2zoj61150d0dgj02.jpg)

```python

#### 正常merge合并

git branch dev

git checkout dev

vi dev.txt

git add .

git commit -m 'dev增加dev.txt'

git checkout master

vi master.txt

git add .

git commit -m 'master增加master.txt'

# 使用merge合并

git merge dev # 写入注释合并

# 图形化查看版本情况

git log --graph

##### 使用rebase合并

git branch -d dev # 删除dev分支

git branch dev

git checkout dev # 新建,切换到dev分支

vi dev1.txt

git add . 

git commit -m 'dev 增加dev1.txt' # 新建dev1.txt 并提交到版本库

git checkout master

vi master1.txt

git add .

git commit -m 'master增加master1.txt' # 切换到master,新建master1.txt,并提交到版本库

git checkout dev

git rebase master  # 切换到dev分支,完成变基

git checkout master

git merge dev     # 切换到master,完成合并

git log --graph   # 查看,变成了一条线

```

![image-20210924023612523](https://tva1.sinaimg.cn/large/008i3skNgy1gur4q25eflj617e0kw41r02.jpg)

#### rebase合并出冲突情况解决

```python

git branch -d dev # 删除dev分支

git branch dev

git checkout dev # 新建,切换到dev分支

vi lqz.txt       # 在内部增加一行话

git add . 

git commit -m 'dev 增加lqz.txt' # 新建lqz.txt 并提交到版本库

git checkout master

vi lqz.txt

git add .      # 在内部也增加一行话

git commit -m 'master增加lqz.txt' # 切换到master,新建lqz.txt,并提交到版本库

git checkout dev

git rebase master  # 切换到dev分支,完成变基,出现冲突

# 解决冲突

vi lqz.txt  # 把冲突解决掉

# 查看状态

git status # git rebase正在进行状态

# 继续往下走

git add .

git rebase --continue

git checkout master

git merge dev     # 切换到master,完成合并

git log --graph   # 查看,变成了一条线

git rebase --continue

```

### 13.3 第三

```python

git branch -d dev

git branch dev

git checkout dev # 删掉dev,重新创建,并切换到dev分支

git push origin dev # 把本地dev同步到远程

vi gs.txt

git add .

git commit -m '公司写了代码,提交到本地'  # 忘了提交到远程仓库

# 回家后,继续开发,从远程拉下来

mkdir pr

cd pr

git clone https://gitee.com/liuqingzheng/app01.git  # 把代码克隆下来

cd app01

git checkout dev   # 切换到dev分支,此时是没有gs.txt的

vi j.txt           # 在家继续开发

git add .

git commit -m '家里写了代码'  

git push origin dev      # 家里写的代码提交到远程仓库

# 第二天来到公司,拉取代码继续开发,如果直接拉取,会分叉

# 不使用git pull 拉取代码,会分叉

# 先 git fetch 拉取

git fetch origin dev  # 先拿下来,自定合并代码,使用merge合并会分叉

# 使用rebase合并

git rebase origin/dev

'''

由原来的 git pull origin dev

变成

git fetch origin dev

git rebase origin/dev

'''

```

![image-20210924030355748](https://tva1.sinaimg.cn/large/008i3skNgy1gur5ix3r35j61160n677j02.jpg)

## 

## 14 git pull 和git fetch

```python

1. 相同点

首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。

2. 不同点

git pull 类似于 git fetch+git merge

```

零基础转行数据科学家:项目驱动的26周实战路径图 数据科学不是高深数学或炫技工具的堆砌,而是一种以业务问题为起点、以数据为媒介、以可交付价值为终点的系统性工程能力。其核心在于理解数据如何在真实业务中产生、流动与失效,并通过SQL、Python和可视化等基础技术,完成‘问题定义→数据获取→清洗建模→结论翻译→行动反馈’的完整闭环。尤其对零基础转行者而言,关键跃迁点在于放弃线性学习幻觉,转向项目驱动——用最小可行业务问题(如快递柜空置率分析)倒逼SQL实战、Python工程化、API集成与模型解释等硬技能,在真实脏数据、模糊需求和跨部门协作中锻造数据处理韧性与 阅读详情

相关推荐

Streamlit Cloud零运维部署:Python数据应用一键上云

Streamlit 是一款面向数据科学团队的开源Python框架,用于快速构建交互式Web应用;Cloud 部署则指无需配置服务器、SSL证书或CI/CD流水线的托管服务。其核心原理是将`.py`脚本自动封装为带HTTPS、自动扩缩容和版本管理的生产级Web应用,技术价值在于消除环境配置、依赖冲突与权限运维等传统瓶颈。典型应用场景包括业务部门实时看板、跨团队协作工具、非技术人员可操作的数据界面等。本文聚焦 Streamlit Cloud 的‘无感适配’开发流程、Secrets安全机制、requirement

weixin_30825581的博客 428

看完这篇还不会用Git,那我就哭了!

你使用过 Git 吗?也许你已经使用了一段时间,但它的许多奥秘仍然令人困惑。 Git 是一个版本控制系统,是任何软件开发项目中的主要内容。通常有两个主要用途:代码备份和代码版本控制。你可以逐步处理代码,在需要回滚到备份副本的过程中保存每一步的进度! 常见的问题是 Git 很难使用。有时版本和分支不同步,你会花很长时间试图推送代码!更糟糕的是,不知道某些命令的确切工作方式很容易导致意外删除或覆盖部分...

武培轩 1万+

Hugging Face零基础入门:无需GPU的AI开发最小闭环

AI开发正从底层框架编程转向模型即服务(MaaS)范式,Hugging Face作为开源模型与推理服务的集大成平台,将复杂模型调用降维为API级操作。其核心原理是通过transformers库自动处理分词、张量对齐、设备调度等工程细节,使开发者聚焦业务逻辑而非CUDA配置或显存管理。技术价值在于大幅降低AI应用门槛,支持快速原型验证、领域微调与一键部署,广泛应用于文本摘要、情感分析、智能客服等真实场景。本文以零基础用户视角,详解如何利用Hugging Face完成从模型发现、本地推理到Spaces上线的完整

weixin_34290631的博客 438

Python学习之Git基本操作

版本库创建 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。 所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: 1 2 3 4 5 ...

John Will的博客 9811

AI工作流操作系统:从工具使用到基础设施搭建

AI工作流本质上是将大模型能力转化为可复用、可集成、可运维的工程化基础设施,其核心在于数据流闭环与系统化编排,而非单点AI工具调用。它融合Prompt工程、本地化部署(如Ollama+Qwen)、API稳定性治理与LangChain流水线编排等关键技术,支撑从会议纪要自动化到抖音脚本生成等真实业务场景。相比传统‘AI工具教程’,该范式强调数据主权、可审计性与环境可复现性,使AI真正像MySQL或Git一样成为开发与运营的底层能力。本文聚焦实战导向的AI工作台搭建,覆盖Docker化部署、三层漏斗架构与合规闭

WGH100817的博客 461

Python调用系统命令:os.system与subprocess核心差异与实战避坑指南

在Python中执行系统命令是自动化、运维和集成开发的基础能力,其底层涉及进程创建、标准流管理、编码处理与安全控制等关键机制。`os.system()`作为早期兼容接口,仅返回退出码,无法捕获输出、缺乏超时控制且存在命令注入风险;而`subprocess`模块提供精细的进程生命周期管理、管道通信、跨平台编码支持(如`text=True`)及健壮错误处理(如`check=True`、`timeout`)。它支撑着CI/CD脚本、爬虫环境启动、FFmpeg音视频处理、Docker容器内命令调用等典型工程场景。本

weixin_33713707的博客 450

Git、GitHub、Gitee、GitLab的学习

Git、GitHub、Gitee、GitLab的学习 本教程基于尚硅谷Git入门到精通全套教程(涵盖GitHub\Gitee码云\GitLab),哔哩哔哩链接:https://www.bilibili.com/video/BV1vy4y1s7k6 1.Git ​ Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目。 Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作 流分支等特性。其性能优于 Subversion、CVS、Perf

qq_461491877的博客 881

PyQt5 + HFSS:给你的仿真脚本做个专属GUI界面(零基础搭建指南)

本文详细介绍了如何使用PyQt5为HFSS仿真脚本创建专属GUI界面,适合零基础用户快速上手。通过Python二次开发,实现参数可视化调整、进度实时监控等功能,大幅提升团队协作效率。文章涵盖环境配置、界面设计、HFSS集成到打包部署的全流程,是仿真工程师提升工作效率的实用指南。

weixin_42535720的博客 185

python项目作业_期末作业.py · 光辉/python练手小项目 - Gitee.com

# 期末考试# 题1'''在这一个月,我们学了python基础,简单总结下,有六种数据类型和函数。(1)请从str,list,dict,set选出 1 种数据类型,进行归纳总结。(2)请整理函数的知识点进行归纳总结。#例 元组(tuple)#1.可变不可变对象?序列还是非序列?#2.操作元祖的方法有多少种,其中哪几个方法使用频率高,并选择1-3个方法进行代码展示#3.是否可迭代#4.索引和步长简...

weixin_39553653的博客 575

基于ESP32的摩托车蓝牙对讲系统开发实践

蓝牙音频传输技术在现代通信中扮演着重要角色,其核心原理是通过无线射频实现数字音频信号的双向传输。在工程实践中,蓝牙HFP协议常用于语音通信场景,而ESP32等嵌入式平台因其低成本和高集成度成为DIY项目的理想选择。本项目通过ESP32-WROOM-32D开发板结合PCM5102 DAC和INMP441数字麦克风等模块,构建了一套摩托车骑行专用的蓝牙对讲系统。该系统特别针对高速移动环境下的风噪抑制和连接稳定性进行了优化,采用数字信号处理技术实现实时降噪,并通过I2S接口确保音频质量。这种方案不仅成本控制在30

weixin_33239721的博客 414

Vue集成飞书前端JSSDK

文章目录前言<1>飞书前端JSSDK<2>使用步骤1.将JSSDK引入到VUE2.读入数据总结 前言 公司需要使用飞书软件,所以转战飞书开发,也是对新知识的探索与研究,飞书SDK也一直都在更新,路虽远,行必达。 <1>飞书前端JSSDK 1、官网地址:https://open.feishu.cn/document/uYjL24iN/uITO4IjLykDOy4iM5gjM 2、当前使用的飞书前端JSSDk的版本:1.5.4 <!-- 在html文档中 --&gt

A 1万+

重学Node.js:从事件循环到现代全栈开发的系统性进阶指南

在当今高并发、实时交互的Web应用开发中,异步非阻塞I/O模型是构建高性能服务的关键技术原理。Node.js作为基于V8引擎的JavaScript运行时,通过其事件驱动架构和单线程事件循环机制,为I/O密集型场景提供了卓越的并发处理能力,这一技术价值使其在API服务、实时应用和全栈开发中广泛应用。随着技术演进,现代Node.js生态已从简单的服务器端脚本发展为涵盖微服务、Serverless函数和工具链的完整解决方案,开发者需要深入理解其模块化体系、性能优化和工程化实践。本文聚焦于Node.js的核心异步编

weixin_33966095的博客 443

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 625

Cursor AI编辑器深度实践:代码理解、Git语义与本地模型协同

AI原生编辑器正从‘代码补全工具’演进为‘项目级代码理解协作者’。其核心原理在于构建动态上下文图谱,融合AST分析、Git历史、跨文件依赖与工程意图识别,从而实现远超传统Copilot的精准重构与安全演进能力。技术价值体现在显著降低遗留系统认知负荷、提升重构可信度与保障敏感数据本地化处理。典型应用场景包括医疗/金融类私有代码库的合规开发、高技术债项目的渐进式现代化,以及跨国团队在弱网环境下的稳定AI协作。本文基于30天真实工程实践,聚焦Cursor的上下文感知机制、Git驱动的意图推理及Ollama本地模型

weixin_33881140的博客 385

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

重点在supplier part是立创商城的编号,可以搜到。

2301_80397661的博客 3263

用Arduino+ESP32复现TDOA定位:低成本实现厘米级精度的完整教程

本文提供了一套利用Arduino和ESP32平台,结合NRF24L01+模块与GPS/PPS时间同步方案,低成本复现高精度TDOA(到达时间差)定位系统的完整教程。教程详细阐述了从硬件选型、天线阵列设计、时间同步实现到核心算法与多径抑制的实战步骤,旨在帮助开发者和硬件爱好者以可控成本实现厘米级精度的定位演示系统。

weixin_29084111的博客 162

GPU点云处理为何值得重学?从Gpupdal看高性能计算路径

点云数据规模快速增长,传统基于CPU的点云处理库在千万级甚至亿级数据面前逐渐力不从心。GPU凭借SIMT并行架构,天然适合点云中大量独立点的计算任务,但直接编写CUDA kernel门槛高、工程复杂。Gpupdal作为面向GPU的点云数据抽象库,将数据布局、内存管理和内核调度封装在底层,提供类PDAL的流水线接口,让开发者无需深入CUDA细节即可完成大规模点云滤波、降采样与特征计算。从体素降采样到统计滤波,从C++到Python绑定,Gpupdal正在降低GPU点云处理的应用门槛。在自动驾驶感知、三维重建和

weixin_33755649的博客 426

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1731

深度学习入门:从机器学习范式迁移到动手实践的核心指南

机器学习旨在从数据中学习规律,而深度学习作为其重要分支,带来了根本性的范式迁移。其核心原理在于通过多层神经网络自动学习数据的层次化特征表示,从而将传统机器学习中繁重的特征工程很大程度上自动化。这一技术价值在于极大地提升了模型处理原始数据(如图像、文本)的能力,推动了计算机视觉、自然语言处理等领域的突破。在实际应用场景中,理解从机器学习到深度学习的转变,掌握数据、算法、算力三大驱动力,并践行“动手”实践,是构建扎实AI工程能力的基础。本文以《动手学深度学习》为脉络,结合特征工程、过拟合等关键概念,深入解析如何

weixin_30628077的博客 335

从 0 到 1 玩转小智 AI 智能音箱:开发教程 + 实战项目全攻略

如果说 MCP 是工具箱,那 SDK 就是 “技能模板”—— 小智音箱的自定义技能本质是 “意图识别 + 逻辑响应” 的组合,就像给嵌入式设备写驱动程序,只要按规则调用接口,就能实现各种功能。小智 AI 音箱的开发门槛并不高,核心是利用 MCP SDK 封装好的接口,结合嵌入式开发的 “硬件对接 + 逻辑编程” 思维,就能实现各种自定义功能。从环境搭建到技能开发,再到实战项目落地,每一步都是对 “软件控制硬件” 的实践 —— 而这正是嵌入式开发的核心魅力。

weixin_42300449的博客 1193

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

如何快速掌握200+极客时间电子书:一站式技术成长宝库指南

极客时间电子书项目是一个汇集了200多本优质技术电子书的开源资源库,覆盖了从编程基础到架构设计、从算法到产品管理的全方位技术领域。这个项目为开发者提供了一个完整的技术成长学习路径,让你能够系统性地提升技术能力。 ## 📚 为什么你需要这个技术学习宝库? 在技术快速迭代的今天,系统性的学习变得尤为重要。极客时间电子书项目将200多本高质量的电子书整理在一起,为你节省了大量寻找学习资源的时间。无

gitblog_01175的博客 827

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python学到什么程度能写项目?80个实战项目从入门到就业

编程学习的关键在于从语法知识走向真实项目开发。很多学习者掌握了列表、字典、函数后,却卡在无法独立编写程序的阶段。项目驱动式学习通过构建可运行的代码,帮助理解爬虫、数据处理、Web服务等核心技术的实际原理,逐步建立调试与工程化能力。从模拟登录爬虫到Pandas数据分析,再到FastAPI接口开发,每个实战任务都对应真实业务场景,让技能落地到就业需求中。本文梳理了一套包含80个Python实战项目的学习路线,按基础语法、爬虫、数据分析、Web框架等阶段进阶,并给出环境配置与排错方法,为想通过项目积累经验、准备求

weixin_33391446的博客 268

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机基础核心原理:从编码到网络,构建开发者底层思维

计算机系统是一个由硬件、软件和网络协议协同工作的复杂体系。其核心原理在于信息的数字化表示与处理,这构成了所有软件运行的基石。从最底层的二进制编码开始,数据通过特定的编码规则(如ASCII、Unicode、UTF-8)被计算机识别和处理,这是理解字符、图像、音频等一切信息存储与传输的起点。在此基础上,计算机硬件体系结构(如CPU、存储层次)与操作系统原理(如进程管理、内存管理)共同协作,将高级语言代码转化为可执行的指令,并高效管理资源。这些底层机制直接决定了软件的性能、可靠性与并发能力。进一步地,计算机网络协

weixin_30919571的博客 405

用 3 行代码跑通 AI 模型推理:ModelScope 模型即服务(MaaS)实战教程

深夜十一点,你刚拿到一个需求:在本地部署一个文本情感分析模型,还要顺带试试人像卡通化。你打开了搜索引擎,翻遍了教程,却发现要完成这件事,你得先搞懂 PyTorch 的模型加载流程、预处理器的 tokenizer 怎么拼、输出张量怎么解码成人类能看的结果……光是"让模型跑起来"这一步,就劝退了无数开发者。而 ModelScope(模型即服务平台,Model-as-a-Service)要解决的正是这个

gitblog_00237的博客 395

EMQX 节点关闭流程优化解析:Session Durability 与 DS Raft 后端下的快速停机实现

本文聚焦 EMQX 开源仓库发布记录 [changes/ee/feat-16040.en.md](https://link.gitcode.com/i/1e76f28c1abced9f2ba130d403c70bd3) 所描述的一项核心改进:在启用 Session Durability(会话持久化)且由 DS Raft 后端支撑时,EMQX 优化了节点的关闭例程,使整集群关闭时节点能更快响应 sh

gitblog_01134的博客 965

Relay 持久化查询(Persisted Queries)实战指南:从 persistConfig 配置到服务端执行

Relay 编译器内置对持久化查询(Persisted Queries)的支持:通过 `persistConfig` 配置,客户端所有 query / mutation 的操作文本会被替换为定长哈希 ID,从而显著减少上传字节数,并让服务端获得按 ID 白名单执行查询的权限,提升安全性。本指南以 [version-v14.0.0 的 Persisted Queries 文档](https://li

gitblog_00964的博客 897
上一篇: 0基础python教程 Docker部署gitlab(避坑版)
下一篇: 0基础python教程 paramiko模块的使用
和老刘学python
博客等级 码龄5年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值