You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Azure函数后端代码到子仓库并保留Git历史及解决报错

问题描述
  • 在GitHub仓库维护名为AnkiSentenceCardBuilder的Azure函数项目,需将后端代码提取至新子仓库,供WinForm等其他表现层复用
  • 为保留Git提交历史,拟定步骤:当前仓库添加类库项目→迁移所有后端代码至类库→克隆仓库并删除原Azure函数项目
  • 创建类库后遇错误:Can't determine project language from files. Please use one of [--csharp, --javascript, --typescript, --java, --python, --powershell, --custom]
  • 推测是Azure函数工具误将类库识别为Azure函数项目,且不能用func init修复(该命令会把类库转为Azure函数)
  • 补充:对Git和Azure不熟悉,使用VS以C#开发
解决方案

一、先解决类库识别错误

  • 删除Azure函数专属文件:检查类库项目目录,若存在host.json、local.settings.json、.funcignore这类Azure函数配置文件,直接删除——这些文件会让函数工具误判项目类型
  • 修正类库项目配置:打开类库的.csproj文件,确认开头是标准.NET类库的SDK声明:<Project Sdk="Microsoft.NET.Sdk">,如果是Azure函数的<Project Sdk="Microsoft.NET.Sdk.Functions">,直接修改成前者
  • 清理函数工具缓存:打开命令行进入类库目录,执行func clean命令,清除残留的函数项目缓存

二、正确提取代码并保留Git提交历史

方法1:Git过滤拆分(保留完整历史,推荐)

  1. 完成原仓库内的代码迁移
    • 在VS中创建标准.NET类库项目(比如.NET 6/7版本),确保配置正确(用普通.NET SDK,无函数相关文件)
    • 将所有后端业务代码从Azure函数项目迁移到类库,调整命名空间和引用,确保编译通过后提交到Git
  2. 克隆并过滤仓库
    • 克隆原仓库到本地新目录:
      git clone https://github.com/你的用户名/原仓库名.git AnkiBackendLib
      
    • 进入新目录,用Git过滤命令只保留类库相关的文件和历史:
      git filter-repo --path 类库项目文件夹名/ --path-rename 类库项目文件夹名/:
      
      (如果没有git filter-repo,先通过pip install git-filter-repo安装)
    • 将过滤后的仓库推送到新的GitHub子仓库:
      git remote set-url origin https://github.com/你的用户名/新子仓库名.git
      git push -u origin main
      
  3. 清理原仓库:回到原Azure函数仓库,删除类库项目文件夹,提交并推送即可

方法2:简单迁移(适合Git新手,历史合并为单次提交)

  1. 在原仓库完成类库创建和代码迁移,提交代码
  2. 创建新的GitHub仓库并克隆到本地
  3. 把原仓库中的类库文件夹复制到新仓库目录,提交并推送
  4. 缺点:类库的历史会变成一次新提交,无法保留之前的零散修改记录,但操作简单

三、后续建议

  • 拆分后,原Azure函数项目可以通过NuGet引用新类库(私有仓库可配置GitHub Packages或本地引用),避免重复代码
  • 后续后端逻辑在类库仓库维护,Azure函数仅负责触发和调用类库方法

内容的提问来源于stack exchange,提问作者Tyler Mason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:55:13