Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
版本控制时将Git与.NET结合的最佳方法_.net_Git_Versioning - Fatal编程技术网

版本控制时将Git与.NET结合的最佳方法

版本控制时将Git与.NET结合的最佳方法,.net,git,versioning,.net,Git,Versioning,我目前正在做一个项目(只有我一个人),我已经知道如何处理它的版本控制。我使用的是经典的。 我的问题是,我希望在一些提交中有指向相应版本的标记,但我不想手动执行 现在我正在做: 如果我要发布v0.2.13,我将更改AssemblyInfo.cs并设置该版本 在Git上提交更改 在Git上添加标签v0.2.13(手动) 建设项目 创建一个.zip文件(并非所有时间),并将其命名为ProjectName v0.2.13 我做错了吗? 我可以很容易地创建一个脚本来自动执行最后一步,但我想知道是否有一

我目前正在做一个项目(只有我一个人),我已经知道如何处理它的版本控制。我使用的是经典的

我的问题是,我希望在一些提交中有指向相应版本的标记,但我不想手动执行

现在我正在做:

  • 如果我要发布
    v0.2.13
    ,我将更改
    AssemblyInfo.cs
    并设置该版本
  • 在Git上提交更改
  • 在Git上添加标签
    v0.2.13
    (手动)
  • 建设项目
  • 创建一个
    .zip
    文件(并非所有时间),并将其命名为
    ProjectName v0.2.13
我做错了吗?


我可以很容易地创建一个脚本来自动执行最后一步,但我想知道是否有一个自动执行其他部分的好方法?

我成功地使用了以下步骤来完成类似的操作:

  • 将新提交推送到共享git repo
  • TeamCity server签出代码、运行测试并构建项目
  • 如果成功,TeamCity还会移动/删除/打包部署包的文件
  • 然后它将zip FTPs到一个部署暂存区,在那里可以手动部署(这可以完全自动化,但我们的设置很奇怪)
您可以使用post-commit钩子标记分支并推送到TeamCity服务器。

我在提交后使用它

根据构建系统的工作方式,您可能可以添加一个目标“版本”,用于标记当前分支并推送此标记。 您还将添加一个“包”目标,该目标取决于“构建”和“发布”目标


如果这不起作用,只需创建自己的Makefile。您可能需要也可能不需要对“Makefile”进行不同的命名。

Nant适合您的需要!选中此项:


它易于使用并与git存储库相结合:-)

如果您没有能力使用构建服务器,那么这可能是手动执行的最佳方式。但是,如果您有时间,我强烈建议您安装某种类型的构建服务器。我们在这方面取得了很多成功。如果您已将其设置为跟踪存储库,那么有一些方法可以做到这一点,以及构建后部署(有很多可能的链接,我建议您只需点击链接即可)


我发现在设置版本控制时非常有用;您几乎可以排除NuGet位,它应该有一些适当的信息。至于TeamCity的设置,只需快速搜索“TeamCity设置教程”,您应该拥有大量资源。祝你好运

我在MSBuild中有一个生成脚本,它自动检索当前签出的git commit,然后在生成时向程序集添加如下属性:

[assembly: AssemblyInformationalVersion("0.2.13+e3a6f2c1")]
[assembly: AssemblyVersion("0.2")]
[assembly: AssemblyFileVersion("0.2.13")]
版本的数字部分来自我的构建脚本读取的version.txt文件

程序集版本缺少第三个八位字节,因为当您增加版本号时,它可以避免绑定重定向要求。AssemblyFileVersion包含该属性所允许的所有数据,AssemblyInformationVersion可以是您想要的任何字符串,因此使用包含git提交id可以准确指示生成此项目的源版本

然后,在构建成功后,如果愿意,可以添加v0.2.13标记。就我个人而言,一旦构建最终版本,我就会增加version.txt文件,以便所有后续构建都具有更高的版本号。之后的每个构建都会有这个版本,直到我发布该版本,标记提交,再次增加version.txt文件,然后重复

顺便说一下,
AssemblyInformationalVersion
字符串出现在Windows资源管理器的文件属性中,因此这为从任意构建的二进制文件转换为匹配的原始源代码提供了一种保证。 此外,不幸的是,这种方法会导致csc.exe报告AL????生成时出现警告,因为语义版本格式不符合x.y.z语法。但这并不意味着任何东西都坏了,我只是忽略了警告


我从不明确地压缩源代码,因为这与源代码控制的责任是多余的。至少如果您的源代码由某个在线服务托管(甚至在您的私有intranet上),那么大多数git主机已经为给定的提交id提供了动态下载zip功能。

这是一个类似方法的示例。没有自动提交。@VonC我现在来看看……所以如果你有多个程序集x,y,z,在发布后它们都有相同的新版本。另外,如果在程序集x中,没有发生任何更改?这是默认行为,是的。每个构建都会根据version.json文件中的内容以及该版本更改前的提交次数来计算版本。如果您在一个repo中构建多个项目,并且不希望一个项目导致另一个项目的“git版本高度”增加,那么您也可以使用version.json中的
pathFilters
属性进行配置。