点我展开:基本信息

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

克隆仓库到本地并上传

  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继续加油!