使用自定义 MSBuild Task 阻止 git 的大文件提交
NuGet Gallery | Jgrass.MSBuild.GitTask
前言#
在 .NET 项目自定义 MSBuild Task 中提到,可以使用自定义 MSBuild Task 来实现自定义功能。
这里介绍实现的 git 提交大文件提交拦截功能。
引入 nuget 包之后,设置好要拦截的大小,内置的 LargeFileInterceptTask
会自动在当前仓库写入一个 git pre-commit hook,实现拦截功能。
具体原理见:git 禁止大文件提交到仓库中
代码实现#
JasonGrass/Jgrass.MSBuild.GitTask: custom git task of msbuild
基本实现方法,在 .NET 项目自定义 MSBuild Task 已经说明。
因为进行了第三方引用,在打包时,需要将第三方引用加入到 nuget 包中,最终的 csproj
是这样的。
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
将依赖项复制到输出目录
<None Include="$(OutputPath)\*.dll" Pack="true" PackagePath="tasks\$(TargetFramework)\"/>
将输出目录中的依赖项,复制到 package 中
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<OutputType>Library</OutputType>
<DevelopmentDependency>true</DevelopmentDependency>
<Version>1.0.0-beta</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<BuildOutputTargetFolder>tasks</BuildOutputTargetFolder>
<NoPackageAnalysis>true</NoPackageAnalysis>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>https://github.com/JasonGrass/Jgrass.MSBuild.GitTask</RepositoryUrl>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build.Framework" Version="17.12.6" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="17.12.6" />
<PackageReference Update="@(PackageReference)" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CliWrap" Version="3.6.7" />
</ItemGroup>
<ItemGroup>
<Folder Include="Assets\tasks\" />
</ItemGroup>
<ItemGroup>
<None Include="Assets\build\**" Pack="True" PackagePath="build\" />
<None Include="Assets\scripts\**" Pack="True" PackagePath="scripts\" />
<None Include="..\README.md" Pack="True" PackagePath="" />
<None Include="$(OutputPath)\*.dll" Pack="true" PackagePath="tasks\$(TargetFramework)\"/>
</ItemGroup>
</Project>
其它没有什么特别的,直接看源码即可。
参考资料#
项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv
MSBuild 保留属性和已知属性 - MSBuild | Microsoft Learn
常用的 MSBuild 项目属性 - MSBuild | Microsoft Learn
作者:
J.晒太阳的猫
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)