尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用 GitHub CLI 的 gh repo sync 把上游仓库的分支同步到 fork?

如何用 GitHub CLI 的 gh repo sync 把上游仓库的分支同步到 fork? 如何用 GitHub CLI 的 gh repo sync 把上游仓库的分支同步到 fork【免费下载链接】cliGitHub’s official command line tool项目地址: https://gitcode.com/GitHub_Trending/cli/cli当你 fork 了一个上游仓库之后上游会持续产生新的提交。此时你需要把上游的分支更新到自己的 fork——可以是本地的 fork 克隆也可以是远端尚未克隆的 fork。GitHub CLI 的gh repo sync命令就是为这个场景设计的它把源仓库的分支更新到目标仓库的对应分支使两者保持一致。gh repo sync 的工作方式命令格式为gh repo sync [destination-repository]不带参数时当前所在的本地仓库被选为目标仓库源仓库默认取目标仓库的父仓库即 fork 对应的上游可以用--source-s覆盖同步默认使用源仓库的默认分支更新目标仓库的对应分支并采用 fast forward 更新方式指定--force时改为 hard reset强制让两个分支一致可以用--branch-b指定要同步的分支例如--branch v1。同步远端 fork 时命令会先调用 GitHub 的 merge-upstream API如果该方式失败比如不是 fast-forward会回退到低层的 git references API用源仓库该分支最新 commit 的 SHA 更新 fork 上的引用。准备条件在 fork 的本地克隆中运行前确认两点已通过gh auth login完成认证git 的凭据由 gh 提供。项目验收测试中的前置步骤是gh auth setup-git另外本地克隆里必须存在一个指向源仓库父仓库的 remote通常 fork 克隆的origin或upstream否则命令会报cant find corresponding remote for owner/repo。同步本地 fork 克隆在 fork 的本地克隆目录下执行gh repo sync要同步上游的特定分支而不是默认分支gh repo sync --branch v1执行成功后终端输出形如✓为成功图标分支名与仓库名按实际情况替换✓ Synced the main branch from upstream-owner/repo to local repository同步远端 fork无需本地克隆如果 fork 还只存在于远端直接在仓库根目录或任意位置指定目标仓库gh repo sync owner/cli-fork源仓库默认取该 fork 的父仓库要显式指定另一个源仓库时用--sourcegh repo sync owner/repo --source owner2/repo2成功时输出形如dest-owner为 fork 所属的 ownerbranch为目标分支✓ Synced the dest-owner:branch branch from source-owner:branch注意源仓库和目标仓库必须位于同一 host否则会报cant sync repositories from different hosts。验证同步结果本地同步的验证可以按验收测试repo-fork-sync.txtar中的方式来做在上游推送了一个文件后执行gh repo sync然后确认该文件已经出现在 fork 克隆中ls asset.txt同时用git status --porcelain检查工作区应无输出干净状态说明同步没有引入未提交的改动。验收测试repo-sync.txtar还验证了另一种情形当前 checkout 的不是被同步的分支时gh repo sync只移动目标分支的引用当前分支如topic保持不变切回默认分支即可看到与远端一致的内容。远端同步则以上一步输出的Synced the ...成功消息为完成依据。常见报错与处理命令遇到下列报错时按各自提示处理即可以下报错文案均摘自 sync.go 与 http.go报错信息原因与处理refusing to sync due to uncommitted/untracked local changes当前分支有未提交改动。先git stash --all重试同步后执行git stash pop恢复这是报错自带的 tip。cant sync because there are diverging changes; use --force to overwrite the destination branch目标分支与源分支已分叉无法 fast forward。确认可以丢弃分叉的本地提交后加--force重试——它会以 hard reset 方式把目标分支强制对齐源仓库会覆盖分叉的提交慎用。cant sync main because its checked out in another worktree at path目标分支被其他 worktree checkout 了。报错 tip 是到那个 worktree 里执行gh repo sync若是残留的过期 worktree 元数据先git worktree prune再重试。cant determine source repository for owner/repo because repository is not fork目标仓库不是 fork无法推断源仓库需用--source显式指定源。cant find corresponding remote for owner/repo本地克隆中没有指向源仓库的 remote需先配置对应 remote。Upstream commits contain workflow changes, which require the workflow scope or permission to merge...上游提交包含 workflow 变更需要workflowscope。按提示执行gh auth refresh -s workflow。--force的两种行为可以对应理解为本地同步执行git reset --hard FETCH_HEAD远端同步则是对目标分支引用发起带force的更新见 git.go 与 http.go。参考资料命令定义与帮助文本pkg/cmd/repo/sync/sync.gofork 同步验收测试acceptance/testdata/repo/repo-fork-sync.txtar本地同步验收测试acceptance/testdata/repo/repo-sync.txtarworktree 冲突验收测试acceptance/testdata/repo/repo-sync-worktree.txtar【免费下载链接】cliGitHub’s official command line tool项目地址: https://gitcode.com/GitHub_Trending/cli/cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表