首页 > 其他分享 >使用自定义 MSBuild Task 阻止 git 的大文件提交

使用自定义 MSBuild Task 阻止 git 的大文件提交

时间:2024-12-04 21:59:29浏览次数:3  
标签:MSBuild 自定义 Task git 提交 true

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

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

标签:MSBuild,自定义,Task,git,提交,true
From: https://www.cnblogs.com/jasongrass/p/18587300

相关文章

  • task05&&01拓展:Python 条件判断和代码风格随笔
    在Python编程中,遵循良好的代码规范至关重要。一、空格使用规范•采用空格表示缩进,切勿使用制表符(Tab)。•语法相关的每一层缩进用4个空格表示。•每行字符数最好不超过79个。若表达式过长需多行显示,除首行外,其余行应在正常缩进基础上再增加4个空格。•函数和类定......
  • Task05 :conditionals
    条件在Python中,条件语句用于根据不同的条件执行不同的代码块。常见的条件语句有if语句、if-else语句和if-elif-else语句。例如:a=int(input('请输入一个数字:'))#由于input()函数输入的数据默认为字符串,所以使用int()转换为整数ifa>=10:print(a)#如果a>=10......
  • Element-Plus表格:Table自定义合并行数据的最佳实践
    Element-Plus表格:Table自定义合并行数据的最佳实践“知行合一”——王阳明在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列。 接下来,我们将探讨在实际开发中如何应对这一挑战。本文案例采用的技术:名称版本Vue3^3.5.12element-plus^2.8.8......
  • Task 05&拓展 01
    拓展01代码风格与规范01.1代码风格各类标识符在Python中,标识符(identifier)是⽤于命名变量、函数、类、模块或其他对象的名称。选择合适的标识符名称有助于提⾼代码的可读性和可维护性。命名规则:必须以字⺟(a-z,A-Z)或下划线(_)开头只允许出现英⽂字⺟、数字、下划线对⼤......
  • Task 03&04
    Task03数据类型与操作在了解数据类型之前,有必要先了解字面量1.1.字面量(Literal)字面量是指在程序中直接写出的固定值。在程序运行中不会改变,如数字,字符串,布尔值等。#数字字⾯量103.14#字符串字⾯量"HelloWorld!"#布尔字⾯量True1.2.数据类型(DataTypes)数据类......
  • Task 01&02
    Task01pyinstallation安装Python3.12环境变量的配置创建并激活conda环境教程Datawhale芝士一个管理py环境的工具,可以创建一个虚拟环境个人方法:在thu开源镜像站下滑找到最近Anaconda安装包并下载,根据教程完成安装配置。Task02GettingStartedpython学习准备和......
  • 使用自定义 JsonConverter 解决 long 类型在前端的精度问题
    问题Javascript的number类型存在精度限制,浏览器反序列化JSON时,无法完整保留long类型的精度。在JSON序列化时将long转换为string进行传递就可以保留精度。在ASP.NETCore中,可以创建一个自定义JsonConverter来达到这一目的。实现long和string转换的JsonC......
  • #渗透测试#SRC漏洞挖掘#红蓝攻防#黑客工具之Burp Suite进阶-自定义UI组件教程
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 如需获取工具,评论区留言即可!!!目录一、BurpSuite自定义UI......
  • Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合
    Vue团队欣喜地宣布,Vue3.5(代号TengenToppaGurrenLagann)于9月初发布!本次小版本更新并未引入任何破坏性更改,带来了诸多内部优化以及新功能。在这篇文章中,我们将重点介绍一些新特性和改进。如需了解全部更新内容,请参阅GitHub上的完整更新日志。最近突然想整理一些前......
  • java-自定义日志注解
    ......