通过推送 Tag 才打 NuGet 包的方法的作用不仅仅是让打包方便,让打包这个动作可以完全在本地执行,无需关注其他系统的使用步骤。更重要的是可以强制每个可能被安装的 NuGet 包版本都能有一个和他对应的 Tag 号,原因是为了解决回退到某个版本发现有一个坑,这个坑是因为某个依赖库的版本问题,此时我期望最小改动,我虽然能拿到这个库的代码,但是我很难知道我这个版本安装的 NuGet 库对应依赖库的哪个 commit 的代码

我之前每次需要追踪某个 NuGet 包对应的依赖库的源代码的版本的时候,都需要进入打包服务器,查看打包日志,在这样很坑玩了很久,公司的配置管理员干掉了服务器,删除了日志。而我接到一个很古老的项目需要修复某个坑,此时这个项目引用了一个底层库的古老版本,此时我不能升级底层库,应该底层库的改动量太大了。但是我又很难定位我现在项目引用的 NuGet 库对应的底层库的哪个 commit 代码。后面只能通过二分的方法,用了几天的开发才完成

所以看到了我上面的坑,小伙伴大概也就能知道为什么我期望将 Tag 和 NuGet 包关联了

在我现在团队的约定里面,只要添加了 alpha 也就是预览版,就可以随意推送测试的 Tag 让服务器帮你打包 NuGet 包,然后在其他的项目安装。为什么会鼓励这样做?原因是有小伙伴说我的某个项目的开发依赖某个库,但是假设这个库一定是合并到主分支之后才能打出 Tag 打包,也就是小伙伴在某个项目的代码将一直不能推送。同时小伙伴也不能在 csproj 里面引用某个私有的版本,因为私有的版本只有小伙伴自己能构建通过,其他小伙伴可构建不通过

假设小 A 需要开发项目 F 而这个项目以来库 L 的更改

而库 L 的更改如果没有合并到 master 分支,就不允许推送 Tag 打包

此时小 A 如果推送了代码,这个代码引用了还没有被发布的 L 库的代码,那么其他小伙伴将无法构建通过

此时小 A 如果推送了代码,这个代码引用了小 A 本地生成的 NuGet 库,那么其他小伙伴将找不到这个 NuGet 库,无法构建通过

如果小 A 不推送代码,只是写了一个 commit 但是这个 commit 包含了 L 库的代码,但是没有在 csproj 里面升级 L 库版本,那么在回滚代码的时候,进入到这个 commit 将构建失败

如果小 A 在 commit 里面升级到他本地生成的 NuGet 库,那么回滚代码的时候,因为公共服务器不存在小 A 的本地的 NuGet 库,依然会构建失败

此时有一个叫头像的小伙伴出了一个馊主意,小 A 虽然 L 库代码没有被合并,但是可以知道这个 L 库被合并之后分配的版本号,此时就在 csproj 里面更新到这个版本,然后通过本地打包的方法引用和推送。但是这个方法存在以下问题

  • 小伙伴本地打包第一次,发现翻车了,想要第二次打包,但是此时的版本号就重叠了,需要经过黑科技删除 NuGet 缓存重新构建,此时的效率特别低
  • 小伙伴在这次 commit 写的代码是他认为发布的时候将会添加的公开方法,但是实际上最后发布的时候更改了公开方法,此时回滚到这个 commit 虽然能下载到 NuGet 库,但是发现 L 库的公开方法不匹配,构建失败

这就是为什么选用推送 Tag 打包的原因,允许小伙伴自己选择预览版的版本推送,自动打包,这样就可以在项目中使用此Tag 打出的预览版的代码。此时的 commit 其他小伙伴也能构建,回滚代码的时候也可以在公共服务器找到 NuGet 包或切换到对应版本的源代码

在 VisualStudio 的帮助下,使用推Tag打包的成本非常低,因为在 VS 里面只需要简单5次点击加上输入版本号就能完成 Tag 新建和推送,详细请看 VisualStudio 如何快速添加一个 Git Tag 推送

在本地推Tag打包还有一个好处是能提升不少的效率,有很多团队例如我现在的团队之前就是使用 jenkins 打包,这个工具太强大而让上手和维护成本都特别高,加上使用的小伙伴太多,服务器性能不足,每次打包都需要等待缓慢的系统响应。而通过 Tag 打包的方式可以隐藏这部分动作,所有动作都在本地执行。只有最后一步推送需要依赖 Git 服务的网络

dotnet CBB 为什么决定推送 Tag 才能打包的更多相关文章

  1. git推送tag到远端服务器

    git推送tag到远端服务器 默认情况下,git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库.1.push单个tag,命令格式为:git push origi ...

  2. git 打标签并推送tag到托管服务器

    我们常常在代码封板时,使用git 创建一个tag ,这样一个不可修改的历史代码版本就像被我们封存起来一样,不论是运维发布拉取,或者以后的代码版本管理,都是十分方便的. 首先我们了解下 git 的 ta ...

  3. [Android Pro] git 打标签、推送tag到托管服务器、验证是否成功

    reference to : http://www.cnblogs.com/ShaYeBlog/p/5576601.html 我们常常在代码封板时,使用git 创建一个tag ,这样一个不可修改的历史 ...

  4. [Git] Git把Tag推送到远程仓库

    转载: http://blog.csdn.net/hustpzb/article/details/8056518 用git tag来给工程打上标签,但是这个命令只是在本地仓库打标签而已, 为了能把标签 ...

  5. 【WP 8.1开发】手机客户端应用接收推送通知

    上一篇文章中,已经完成了用于发送通知的服务器端,接下来我们就用这个服务端来测试一下. 在开始测试之前,我们要做一个接收通知的WP应用. 1.启动VS Express for Windows,新建项目, ...

  6. iOS开发,推送消息 steps

    概述:推送过程简介 一.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请. ...

  7. Xamarin.Forms学习系列之Android集成极光推送

    一般App都会有消息推送的功能,如果是原生安卓或者IOS集成消息推送很容易,各大推送平台都有相关的Sample,但是关于Xamarin.Forms的消息推送集成的资料非常少,下面就说下Xamarin. ...

  8. Git把Tag推送到远程仓库

    # 创建附注标签 $ git tag -a v0.1.2 -m “0.1.2版本” 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签 $ git tag -l ‘v0.1.*’ # ...

  9. dotnet core使用IO合并技巧轻松实现千万级消息推送

    之前讲述过多路复用实现单服百万级别RPS吞吐,但在文中有一点是没有说的就是消息IO合并,如果缺少了消息IO合并即使怎样多路复用也很难达到百万级别的请求响毕竟所有应用层面的网络IO读写都是非常损耗性能的 ...

  10. [译]如何在GitHub仓库创建一个标签tag, 并推送到远程分支?

    问: 我在GitHub上有一个仓库,我需要给他打个tag.我在shell打了tag,但是在Github上没有显示出来.我还要做其他什么么? 我在shell中使用的命令是: git tag 2.0 当我 ...

随机推荐

  1. 为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.安全特性 在上篇文章中,我们了解到HTTP在通信过程中,存在以下问题: 通信使用明文(不加密),内容可能被窃听 不验证通信方的身份,因 ...

  2. 记录--Vue中使用websocket的正确姿势

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1:首先谈谈websocket是什么? WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket通信协议于201 ...

  3. KingbaseESV8R6用户登录失败自动锁定后解锁遇到权限问题

    测试用户登录失败自动锁定 创建用户tee并授权. TEST=# create user tee; CREATE ROLE TEST=# alter user tee with createdb; AL ...

  4. 使用fiddler抓取HTTPS的数据包(抓取App端的数据包)

    众所周知,我们在做接口测试的时候有两种情况: 第一种是先拿到接口测试规范文档,再去做接口测试. 第二种是没有接口文档,只有通过自己抓包. 那么说到抓包,就不得不说抓包工具,对于浏览器web端,我们只需 ...

  5. 初学STM32 CAN通信(三)

    1. stm32 CAN通信标准库函数 //CAN通信初始化函数 uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct ...

  6. #裴蜀定理#洛谷 2520 [HAOI2011]向量

    题目 分析 首先若 \(a,b\) 都为 0 要特判. 若 \(\begin{cases}x=pa+qb+p'a+q'b\\y=qa+pb-q'a-p'b\end{cases}\) 合并同类项可以得到 ...

  7. #斯坦纳树#洛谷 4294 [WC2008]游览计划

    题目 分析 几乎就是模板题,考虑不同点就是它是点权, 所以在求两个子集的时候要减去这个点的点权, 还有一点恶心的就是要输出方案,令人作呕 代码 #include <cstdio> #inc ...

  8. 使用vcpkg和OHOS SDK构建开源软件

    安装OHOS SDK 参照OHOS IDE和SDK的安装方法,安装构建工具. 创建用户环境变量OHOS_NDK_HOME,指向OHOS SDK的安装路径,比如D:\Tools\Huawei\OHOS\ ...

  9. C 语言函数完全指南:创建、调用、参数传递、返回值解析

    C 语言中的函数 函数是一段代码块,只有在被调用时才会运行. 您可以将数据(称为参数)传递给函数. 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用. 预定义函数 事实证明,您已 ...

  10. 深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓

    在本文中,我们将介绍 IoC(控制反转)和 DI(依赖注入)的概念,以及如何在 Spring 框架中实现它们. 什么是控制反转? 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给 ...