分支v1.5.x的Git包安装时浅克隆导致非默认分支 checkout 失败
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 76/100
調査の方向性
cmds/cmd_package/cmd_package_update.py:220-225 から始めて install_git_package を読み、その後、ブランチ名と古いコミット SHA を使ってインストールを再現します。ブランチ、タグ、または HEAD 以外の SHA を使用する Git パッケージが正常に clone と checkout を実行でき、既存の HEAD のケースも引き続き動作すれば作業完了です。
索引モデルが issue の本文から書いたものです。
説明
问题描述
在分支v1.5.x的代码下,在安装 Git 类型包时,install_git_package 函数使用 --depth=1 浅克隆,但未指定分支。这导致非默认分支的包无法正确 checkout。
问题代码位置
cmds/cmd_package/cmd_package_update.py:220-225
clone_cmd = 'git clone ' + package_url + ' ' + repo_name_with_version + ' --depth=1'
execute_command(clone_cmd, cwd=bsp_package_path)
git_check_cmd = 'git checkout -q ' + ver_sha
execute_command(git_check_cmd, cwd=repo_path)
问题分析
场景1:VER_SHA 为分支名
当 package.json 配置如下:
{
"version": "galactic-legacy",
"VER_SHA": "galactic-legacy"
}
- --depth=1 只克隆默认分支
- git checkout galactic-legacy 失败,因为该分支不在浅克隆中
实验验证:
$ git clone https://github.com/wuhanstudio/micro_ros.git test --depth=1
$ git checkout galactic-legacy
error: pathspec 'galactic-legacy' did not match any file(s) known to git
场景2:VER_SHA 为 commit SHA
当仓库 HEAD 更新后,指定的旧 SHA 不在浅克隆中,checkout 同样失败。
影响范围
所有使用分支名或非 HEAD SHA 作为 VER_SHA 的包都会安装失败。
受影响的典型包:micro_ros 的多个版本配置(galactic-legacy, humble-gcc-10 等)。
建议修复方案
根据 VER_SHA 类型选择正确的克隆方式:
import re
def is_commit_sha(ver_sha):
"""检测 VER_SHA 是否为 commit SHA(40位十六进制)"""
return ver_sha and re.match(r'^[0-9a-f]{40}$', ver_sha)
def install_git_package(...):
if ver_sha and not is_commit_sha(ver_sha):
# 分支名/标签名:使用 --branch 参数
clone_cmd = 'git clone ... --depth=1 --branch ' + ver_sha
else:
# SHA:fetch 后 checkout
clone_cmd = 'git clone ... --depth=1'
execute_command('git fetch origin ' + ver_sha, cwd=repo_path)
execute_command('git checkout -q ' + ver_sha, cwd=repo_path)
- 主要言語
- Python
- スター
- 78
- フォーク
- 64
- 平均マージ
- 1日 2時間
- マージ済み PR(30日)
- 7
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
RT-Thread/env のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
-
【建议】能否将env的包全部离线化 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
-
改进 env 的文档 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
似ている issue
-
bug confirmed issue
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
open-webui/open-webui#30750 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
OpenwaterHealth/openmotion-bloodflow-app#604 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 90/100