在 VisualStudio 的团队管理功能,提供了方便的添加 Tag 的方法,可以新建一个 Tag 添加 Tag 信息,同时推送某个特定的 Tag 到服务器。配合推 Tag 打包 NuGet 的方法,将可以让整套工具用起来特别爽,完全本地化打 Tag 推送就完成了 NuGet 服务器打包推送

进入团队管理界面,我用的英文版的,但是按钮在中文版也没有变化。我的 VisualStudio 是 2019 的

点击 Tags 进入标记界面

此时可以通过点击 新建Tag按钮 新建一个 Tag 给他版本号和信息,请看下图

点击创建按钮就可以完成了创建,上面代码只有 Tag 号是必须的,而信息是不必须的。当然有信息可以协助小伙伴更好了解这个 Tag 对应的功能

此时就可以看到刚才新建的 Tag 了,右击这个新建的 Tag 号就可以找到推送按钮,点击推送按钮就可以将 Tag 推送到服务器了

熟悉这个方法可以快速给代码添加一个 Tag 号

配合 dotnet 配合 Gitlab 做自动推 Tag 时打包 NuGet 包 可以特别方便打 Tag 打包推送

为什么需要推送 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 如何快速添加一个 Git Tag 推送的更多相关文章

  1. git tag推送小分析

    一个推送可以用三条命令 -[deleted]-git push origin --tags git push origin master --follow-tags git push --follow ...

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

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

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

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

  4. Github学习进阶-初露锋芒,通过命令行将本地git仓库推送到Github上面的仓库

    前提: 1. 需要安装git 客户端.  能打开 git  bash 命令行窗口. 2. 生成了ssh 秘钥,并添加到了Github上面. 一.在Github上面建立一个git仓库. 点击 + 号,在 ...

  5. Git远程推送常见错误及解决方案:

    Git远程推送 关注公众号"轻松学编程"了解更多. 1.问题:git远程提交时出现错误: error: RPC failed; curl 56 OpenSSL SSL_read: ...

  6. 用Pomelo 搭建一个简易的推送平台

    前言 实际上,个人感觉,pomelo 目前提供的两个默认sioconnector和hybridconnector 使用的协议并不适合用于做手机推送平台,在pomelo的一份公开ppt里面,有提到过, ...

  7. git 本地推送远程仓库报错: error: failed to push some refs to 'https://github.com/yangtuothink/mxonline.git'

    报错现象 添加远程仓库后 推送代码的时候报错 报错分析 远程代码和本地代码不匹配问题 远程初始仓库的创建有些默认 的 README什么的本地是没有的 需要先同步后再上传 报错解决 git push - ...

  8. dotnet 使用 Qpush 快速从电脑到手机推送文字

    在手机打字总不是方便,于是就有了 Qpush 这个工具,通过这个工具可以快速从电脑到手机推送文字. 但是这个工具没有找到客户端,于是我就给他写了一个库,通过这个库可以快速进行开发 先介绍QPush 快 ...

  9. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...

  10. git 强制推送

    Git 强制推送方法(一般不建议使用) $ git push -u origin master -f

随机推荐

  1. 关于三维模型OBJ格式轻量化压缩必要性探讨

    关于三维模型OBJ格式轻量化压缩必要性探讨 三维模型的OBJ格式轻量化压缩在当前的计算机图形学和虚拟现实应用中具有重要的必要性.以下是对三维模型OBJ格式轻量化压缩必要性的分析: 1.提高加载和传输效 ...

  2. Women forum两周年有感

    今天是个高兴的日子,Women forum两周年庆. 当Nicole上台分享了她当妈妈的经历时,我感动得要哭了,导致轮到我上台演讲的时候,还沉浸在那种情绪中,导致我脱稿演讲了,于是我就超时了,实在是抱 ...

  3. CPU上下文切换 CPU的调度策略

    CPU上下文切换 就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文,到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务. 根据任 ...

  4. zynq之TF卡写入函数f_printf

    zynq之TF卡写入函数f_printf 1.基本原理 前面使用f_write写入了数据到TF(SD)卡中,可以实现较短字符串的写入.当字符增加时,容易出现乱码.而f_printf则是专门用于字符串写 ...

  5. C++ 自动计时

    #include<iostream> #include<chrono> struct Timer { std::chrono::time_point<std::chron ...

  6. 关于 ThreadLocal 你需要知道的几点

    一.ThreadLocal是什么? 一个类对象类型,提供属线程本地变量,也就是同一个变量对不同线程保存了不同的值,但是和线程自身定义的自属变量不同. 通常以私有静态类型定义,用以保存特定线程特定状态属 ...

  7. yml和properties打印SQL日志信息

    1.配置文件里面配置 第一种是properties类型如下 logging.level.com.datayes.mdi.dao.rdb.mommp.**=debug其中 com.datayes.mdi ...

  8. 15 CSS总结

    15 CSS总结 到此,css的知识就结束了,掌握这些知识,搞爬虫足够了.如果朋友还有兴趣可以去css其他学习网站去看看其他的一些属性用法,(菜鸟教程 https://www.runoob.com/c ...

  9. QImage 与 Mat 互转

    QImage 转 Mat Mat QImage2Mat(QImage &img) { cv::Mat mat; switch (img.format()) { case QImage::For ...

  10. linux上操作 压缩包 的命令

    # tar.gz 解压缩 # 解压 tar -zxvf a.tar.gz # 压缩 tar -zcvf a.atr.gz a # zip 解压缩 # 压缩 zip -vr a.zip a/* # 解压 ...