点我展开:基本信息
uv 管 Python 项目环境与依赖,Git 管代码版本,两者互相独立又能自然串联: “git clone → uv sync → 开发 → git push” 是日常项目开发中更轻量、更容易复现的流程。
一体化工作流
日常最小循环
git clone <repo-url> # 1. 克隆项目
cd /d D:\repo # 2. 进入项目文件夹
uv sync # 3. 根据 pyproject.toml / uv.lock 同步环境
uv run python test.py # 4. 在项目环境中运行测试文件
# pyCharm写代码...
cd "D:\repo" # 进入项目路径
git status # 5. 查看修改状态
git add . # 6. 每改动一次
git commit -m "msg"
git push # 7. 想同步时再 push
uv终端
路径管理
| 代码 | 功能 |
|---|---|
dir |
查看当前文件夹内容 |
cd .. |
返回上一级文件 |
cd xxx |
xxx为当前文件夹里面的内容 |
cd /d F:\xxx |
切换路径(/d保证不同盘符也能切换) |
uv 是什么?
uv 是一个用 Rust 编写的 Python 包管理与项目环境管理工具。它可以理解为极速版的 pip + venv + poetry 三合一:安装包快,能锁版本,能创建虚拟环境,也能一键运行脚本。
uv 的环境默认依附在项目路径下,一般是当前项目中的 `.venv`。项目真正需要维护的是 `pyproject.toml` 和 `uv.lock`,`.venv` 可以随时删除并通过 `uv sync` 快速重建。
核心文件
| 文件 | 谁读写 | 核心价值 | 是否提交到 Git |
|---|---|---|---|
pyproject.toml |
开发者 / uv | 定义项目依赖与元数据 | 必须提交 |
uv.lock |
uv 自动维护 | 锁定完整依赖树,保证环境一致 | 强烈建议提交 |
.venv/ |
Python 解释器 | 实际运行空间 | 不要提交 |
包管理
| 动作 | 命令 | 结果 |
|---|---|---|
| 初始化项目 | uv init |
生成 pyproject.toml |
| 创建虚拟环境 | uv venv |
创建 .venv |
| 新增包 | uv add pandas |
更新 pyproject.toml 和 uv.lock |
| 删除包 | uv remove pandas |
从配置中移除依赖并清理环境 |
| 锁定依赖 | uv lock |
更新 uv.lock |
| 同步环境 | uv sync |
让 .venv 匹配 lock 文件 |
| 运行命令 | uv run python main.py |
在项目环境中运行脚本 |
| 查看依赖树 | uv tree |
查看当前项目依赖关系 |
安装 requirements.txt 依赖包
uv venv
uv pip install -r requirements.txt
注:如果项目已经维护 pyproject.toml 和 uv.lock,优先使用 uv sync;只有接手旧项目时,才需要从 requirements.txt 安装依赖。
新项目环境配置工作流
step1:进入项目目录:cd /d xxx
step2:初始化项目:uv init
step3:添加依赖:uv add numpy pandas requests
step4:运行脚本:uv run python main.py
step5:打开 PyCharm,文件 → Settings → Project → Python Interpreter → Add Interpreter → Existing,选择当前项目下的 .venv\Scripts\python.exe
step6:提交依赖配置文件:git add pyproject.toml uv.lock
uv 内核配置在 Jupyter Notebook 中
将 jupyter notebook 理解为项目环境中的一个包。需要在当前项目的 .venv 中安装后,再把这个环境注册为 Jupyter 内核。
step1:进入项目路径:cd /d F:\xxx
step2:添加 notebook 相关依赖:uv add notebook ipykernel
step3:将当前项目环境加入 Jupyter 内核:
uv run python -m ipykernel install --user --name my_project --display-name "Python(my_project)"
step4:启动 notebook:
uv run jupyter notebook
git终端
在 Git Bash 中可以使用 Git 来管理代码。Git Bash 是 Git 的一个命令行工具,它提供了一个类似 Linux 的环境,让你可以在 Windows 系统上使用 Git 命令。Git 是一个分布式版本控制系统,用于跟踪文件和目录的更改,非常适合管理代码。
git中本地会保留main和其他所有分支的信息,可切换到各个分支进行操作。
克隆仓库到本地并上传
- 到达指定目录
# 若文件夹project存在
cd "/path/to/your/project"
# 若文件夹不存在
cd "/path/to/your/"
mkdir project
cd project
- 初始化 Git 仓库
cd /path/to/your/project
git init # 初始化文件夹,使其支持git
- 克隆现有仓库
git clone <仓库URL>
本地修改
查看修改状态
# 修改状态是与上一次提交对比的
git status
- 将文件添加到暂缓区
# 单个文件添加到暂存区
git add
# 添加所有更改的文件到暂存区
git add .
- 提交更改
# 提交到给git系统
git commit -m "提交信息"
- 查看历史提交记录
git log --oneline
- 推送到远程仓库
# 本地推送到远程仓库分支,origin是固定的。
git push origin <分支名>
# 推送到main
git push origin main
clone远程库并创建本地新的分支
# 克隆远程仓库
git clone <repo-url>
cd your-repo
# 查看所有分支
git branch -a
# 基于 main 创建并切换到本地分支
git checkout -b feature-x main
上传本地文件到新的仓库
- 首先在GitHub上面创建一个仓库,仓库中存在README文件。
- 将git bash中的路径移到对应文件夹下面,之后输入如下代码:
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/Bigdata-xy/project.git
git push -u origin main
远程合作更新数据场景
远程仓库分支有人更新自己分支后需要拉取最新信息。
- 仅拉取更新动态,及
git log中的信息更新,文件的信息不更新:git fetch - 拉取log更新及文件合并更新:
git pull
- 仅拉取更新动态,及
提交pr时,与main存在冲突,核心是将main中的最新信息合并到本地分支中
拉取目标分支的最新更改:
git checkout master #切换到本地master分支 git pull origin master #更新最新的master切换到你的分支:
git checkout feature-branch合并目标分支的更改:
git merge master查看冲突信息(如果存在):
git status手动解决冲突
# 打开冲突文件 nano test.py<<<<<<< HEAD 这是你的分支中的内容 ======= 这是目标分支中的内容 >>>>>>> master标记冲突已解决:
git add test.py完成所有冲突后合并:
git commit -m "xxx"推送更改到远程分支:
git push origin feature-branch
回滚场景的预演
当前代码修改错误,需要回退到之前特定的提交。
查看所有提交信息:
git log --oneline回退特定提交(撤销特定提交的id):
git revert --no-edit e48cae1
3.1 没有冲突,即回退到特定位置。
3.2 可能会出现冲突,这个时候会进入到 (master|REVERTING),按照如下步骤:
查看存在冲突的信息:
git status进入有冲突的文件:
nano main.py修改有冲突的内容(两个文件均对相同行的内容进行了修改,系统不知道对冲突如何处理)
<<<<<<< HEAD <当前分支的内容> ======= <要撤销的提交的内容> >>>>>>> 69f78b4475fd6bbde2a1421dc395129f6d89cd94
进行新的提交:
git add . && git commit -m "xxxx"查看提交记录:
git log --oneline
注:回到revert id 的前一次提交,可以通过git revert --skip 取消这次回退。
其他知识积累
- 查看本地有但远程没有的提交。
git log origin/main..main
- 代理打开后,网页走代理但是终端不走代理,可以先找出代理端口,再设置终端怎么走:
PS C:\Users\24561> Get-NetTCPConnection -State Listen |
>> Where-Object { $_.LocalAddress -eq '127.0.0.1' -and $_.LocalPort -ge 1000 } |
>> Select-Object LocalPort,OwningProcess -Unique |
>> ForEach-Object {
>> $proc=(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name
>> [PSCustomObject]@{Port=$_.LocalPort;Process=$proc}
>> }
Port Process
---- -------
50010 WXWork
49683 nimdnsResponder
49678 SunloginClient
49677 SunloginClient
4709 wpscloudsvr
3213 OriginWebHelperService
1080 ShadowsocksR # 1080为终端端口
# 将终端git设置为代理端口
PS C:\Users\24561> git config --global https.proxy http://127.0.0.1:1080
PS C:\Users\24561> git config --global http.proxy http://127.0.0.1:1080
对于PR的习惯问题
在正式提交前,有两个核心点,一个是不要和远程仓库存在冲突,第二个是要给自己的分支内容先备份一下。`
git add .和git commit -m "back_branch"git pull origin main --rebase拉取远程仓库最新更新,并且对log记录进行重新整理,从拉取结点开始计算,本地提取记录均在main提交之后。git push origin xiaoyao_branch -f这里要-f提交的id全部变了,远程仓库会拒绝普通的push,必须强制push。
我不小心修改了远程仓库的一些代码怎么办?
git checkout origin/main -- main.py将对于代码段内容返回到远程中。# 重新提交 git add . git commit --amend --no-edit # 合并到上一个提交中,保持 log 干净 git push origin xiaoyao_branch -f
其他问题
- 为什么远程创建了一个新的分支,本地查看分支没有找到?
- 优先更新分支:
git fetch origin - 之后再查看:
git branch -r - 切换到对应分支:
git checkout 新分支名 - 确认当前的分支:
git branch --show-current
- 优先更新分支:

