点我展开:基本信息

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.tomluv.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.tomluv.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和其他所有分支的信息,可切换到各个分支进行操作。

克隆仓库到本地并上传

  1. 到达指定目录
# 若文件夹project存在
cd "/path/to/your/project"

# 若文件夹不存在
cd "/path/to/your/"
mkdir project
cd project
  1. 初始化 Git 仓库
cd /path/to/your/project
git init # 初始化文件夹,使其支持git
  1. 克隆现有仓库
git clone <仓库URL>
  1. 本地修改

  2. 查看修改状态

# 修改状态是与上一次提交对比的
git status
  1. 将文件添加到暂缓区
# 单个文件添加到暂存区
git add

# 添加所有更改的文件到暂存区
git add .
  1. 提交更改
# 提交到给git系统
git commit -m "提交信息"
  1. 查看历史提交记录
git log --oneline
  1. 推送到远程仓库
# 本地推送到远程仓库分支,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

上传本地文件到新的仓库

  1. 首先在GitHub上面创建一个仓库,仓库中存在README文件。
  2. 将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

远程合作更新数据场景

  1. 远程仓库分支有人更新自己分支后需要拉取最新信息。

    • 仅拉取更新动态,及git log中的信息更新,文件的信息不更新:git fetch
    • 拉取log更新及文件合并更新:git pull
  2. 提交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

回滚场景的预演

当前代码修改错误,需要回退到之前特定的提交。

  1. 查看所有提交信息:git log --oneline

  2. 回退特定提交(撤销特定提交的id):git revert --no-edit e48cae1

3.1 没有冲突,即回退到特定位置。

3.2 可能会出现冲突,这个时候会进入到 (master|REVERTING),按照如下步骤:

  • 查看存在冲突的信息:git status

  • 进入有冲突的文件:nano main.py

  • 修改有冲突的内容(两个文件均对相同行的内容进行了修改,系统不知道对冲突如何处理)

    <<<<<<< HEAD
    <当前分支的内容>
    =======
    <要撤销的提交的内容>
    >>>>>>> 69f78b4475fd6bbde2a1421dc395129f6d89cd94
    
  1. 进行新的提交:git add . && git commit -m "xxxx"

  2. 查看提交记录:git log --oneline

注:回到revert id 的前一次提交,可以通过git revert --skip 取消这次回退。

其他知识积累

  1. 查看本地有但远程没有的提交。

git log origin/main..main

  1. 代理打开后,网页走代理但是终端不走代理,可以先找出代理端口,再设置终端怎么走:
PS C:\Users\24561> Get-NetTCPConnection -State Listen |
>>   Where-Object &#123; $_.LocalAddress -eq '127.0.0.1' -and $_.LocalPort -ge 1000 &#125; |
>>   Select-Object LocalPort,OwningProcess -Unique |
>>   ForEach-Object &#123;
>>     $proc=(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name
>>     [PSCustomObject]@&#123;Port=$_.LocalPort;Process=$proc&#125;
>>   &#125;

 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
  1. 对于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。
  2. 我不小心修改了远程仓库的一些代码怎么办?

    • git checkout origin/main -- main.py将对于代码段内容返回到远程中。

    • # 重新提交
      git add .
      git commit --amend --no-edit  # 合并到上一个提交中,保持 log 干净
      git push origin xiaoyao_branch -f
      

其他问题

  1. 为什么远程创建了一个新的分支,本地查看分支没有找到?
    • 优先更新分支:git fetch origin
    • 之后再查看:git branch -r
    • 切换到对应分支:git checkout 新分支名
    • 确认当前的分支:git branch --show-current

SZUer继续加油!