使用自定义 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

C# 在不同环境下调用 shell 脚本 | L's Blog

Tyrrrz/CliWrap: Library for running command-line processes

作者:JasonGrass

出处:https://www.cnblogs.com/jasongrass/p/18587300

版权:本作品采用「署名 4.0 国际」许可协议进行许可。

posted @   J.晒太阳的猫  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示