是否有任何指导或标准的最佳实践如何在业余时间为您开发的软件进行版本设计以获得乐趣,但是有些人会使用它?我认为有必要对这样的软件进行编辑,以便您了解第一版正在谈论的内容(例如,修复错误,支持等等).
但是我在哪里开始版本控制?0.0.0?还是0.0?然后我如何增加数字?主要发布.小变化?并且不应该对版本控制系统的任何提交是另一个版本?或者这仅适用于以高效方式使用的版本?
有没有办法比较的庆典,如这样的字符串:2.4.5和2.8和2.4.5.1?
我正在寻找关于如何管理.NET程序集的三个不同程序集版本号的指针,建议甚至口述.产品版本是最简单的,因为这似乎通常由业务决定.然后,文件版本似乎用于部署之间的版本控制,其中实际的程序集版本仅在发货时使用.
现在我只是想找一个简单的方法来标记组件的测试和维护版本,而这些版本都没有依赖,因此我正在考虑在文件版本上自动递增构建和修订版本号,并且为了最终版本,复制当前版本文件版本到程序集版本.该产品正在生产中使用,但仍在开发中 - 您知道 - 其中一家小公司,没有变更控制基础设施的情况.
.net versioning version-control assemblyversions .net-assembly
在IntelliJ中切换分支的概念是什么?我必须是盲人或白痴......
我会假设有一个"切换到复制"选项或类似的东西,但没有...
编辑澄清:我的prev IDE有一个简单的"切换到复制"选项,它更新了所有与当前分支/主干不同的文件.IntelliJ似乎对此有一种完全不同的方法,我似乎并不理解.帮助也不是很有用.
非常感谢有用的关键字,链接或提示.谢谢.
是否有比较版本号的标准习惯用法?我不能只使用直接的字符串比较,因为我还不知道最大点数发布的数量.我需要比较版本,并具有以下成立:
1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10
Run Code Online (Sandbox Code Playgroud) 我正试图像Stripe那样对我的API进行版本测试.下面给出了最新的API版本是2.
/api/users 返回301到 /api/v2/users
/api/v1/users 在版本1返回200个用户索引
/api/v3/users 返回301到 /api/v2/users
/api/asdf/users 返回301到 /api/v2/users
因此,除非指定的版本存在,否则基本上任何未指定版本的内容都会链接到最新版本,然后重定向到它.
这是我到目前为止:
scope 'api', :format => :json do
scope 'v:api_version', :api_version => /[12]/ do
resources :users
end
match '/*path', :to => redirect { |params| "/api/v2/#{params[:path]}" }
end
Run Code Online (Sandbox Code Playgroud) Java项目中系统构建编号和版本号管理的当前最佳实践是什么?特别:
如何在分布式开发环境中系统地管理构建号
如何在源/可用于运行时应用程序中维护版本号
如何与源存储库正确集成
如何更自动地管理版本号与存储库标签
如何与持续构建基础架构集成
有很多工具可用,而ant(我们正在使用的构建系统)有一个维护构建号的任务,但是不清楚如何使用CVS,svn或类似的多个并发开发人员来管理它.
[编辑]
下面出现了几个好的和有用的部分或具体的答案,所以我将总结其中的一些.听起来对我来说就像这里没有真正强大的"最佳实践",而是一系列重叠的想法.下面,找到我的摘要和一些人们可能会尝试回答的结果问题.[对stackoverflow来说是新的...如果我做错了,请提供评论.]
如果您使用的是SVN,则可以使用特定结帐的版本控制.构建编号可以利用它来创建标识特定结帐/修订的唯一构建号.[我们因遗留原因而使用的CVS并没有提供这种程度的洞察力......使用标签进行人工干预可以帮助您实现目标.]
如果您使用maven作为构建系统,则支持从SCM生成版本号,以及用于自动生成版本的发布模块.[出于各种原因,我们不能使用maven,但这有助于那些能够做到的人.[感谢marcelo-morales ]]
如果您使用ant作为构建系统,则以下任务描述可以帮助生成捕获构建信息的Java .properties文件,然后可以通过多种方式将其折叠到构建中.[我们扩展了这个想法,包括哈德逊派生的信息,感谢marty-lamb ].
Ant和maven(以及hudson和巡航控制)提供了将构建号放入.properties文件或.txt/.html文件的简便方法.这种"安全"是否足以防止它被故意或意外地篡改?在构建时将它编译成"版本化"类是否更好?
断言:应该在像哈德森这样的持续集成系统中定义/制定构建编号.[感谢marcelo-morales ]我们已经采纳了这个建议,但它确实破解了发布工程问题:发布是如何发生的?发布中是否有多个buildnumbers?来自不同版本的构建数量之间是否存在有意义的关系?
问题:内部版本编号背后的目标是什么?它用于QA吗?怎么样?它是否主要由开发人员用于在开发期间消除多个构建之间的歧义,或更多用于QA以确定最终用户构建的内容?如果目标是可重复性,理论上这就是发布版本号应该提供的 - 为什么不呢?(请在下面作为你的答案的一部分回答这个问题,它将有助于说明你做出的建议/建议...)
问题:手动构建中是否存在构建号码的位置?这是有问题的,以至于每个人都应该使用CI解决方案吗?
问题:是否应将建立号码签入SCM?如果目标是可靠且明确地识别特定构建,那么如何应对可能崩溃/重启等的各种连续或手动构建系统......
问题:构建号码是否应该简短且甜蜜(即单调增加整数),以便易于存档到文件名中,易于在通信中引用等等......或者它应该是多长的用户名,日期戳,机器名等?
问题:请提供有关构建号分配如何适合您的大型自动发布流程的详细信息.是的,maven爱好者,我们知道这已经完成了,但并非我们所有人都喝醉了kool-aid ......
我真的很喜欢将其充实成一个完整的答案,至少对于我们的cvs/ant/hudson设置的具体例子,所以有人可以基于这个问题构建一个完整的策略.我将标记为"答案"的任何人都可以对这个特定情况给出一个疯狂的描述(包括cvs标记方案,相关的CI配置项和释放过程,将构建号折叠到发行版中,以便以编程方式如果你想询问/回答另一个特定的配置(例如,svn/maven /巡航控制),我将链接到这里的问题.--JA
[编辑09年10月23日]我接受了最高投票的答案,因为我认为这是一个合理的解决方案,而其他几个答案也包括好主意.如果有人想要用marty-lamb 's 合成其中一些,我会考虑接受另一个.我对marty-lamb的唯一顾虑是它不会生成一个可靠的序列化构建号 - 它依赖于构建器系统的本地时钟来提供明确的构建号,这并不是很好.
[编辑7月10日]
我们现在包括如下所示的类.这允许将版本号编译成最终的可执行文件.在记录数据,长期归档输出产品中发出不同形式的版本信息,并用于跟踪我们(有时是数年以后)对特定构建的输出产品的分析.
public final class AppVersion
{
// SVN should fill this out with the latest tag when it's checked out.
private static final String APP_SVNURL_RAW =
"$HeadURL: svn+ssh://user@host/svnroot/app/trunk/src/AppVersion.java $";
private static final String APP_SVN_REVISION_RAW = "$Revision: …Run Code Online (Sandbox Code Playgroud) 你如何准备你的SQL增量?您是否手动将每个架构更改SQL保存到增量文件夹,或者您是否有某种自动化的差异化过程?
我对版本化数据库模式以及源代码的约定感兴趣.也许是一个预先提交的钩子来区分架构?
编辑:看到答案我想澄清一点,我熟悉使用增量运行数据库迁移的标准方案.我的问题是关于自己创建增量,最好是自动创建增量.
此外,版本控制适用于PHP和MySQL,如果它有所作为.(请不要使用Ruby解决方案).
我们在项目中要求存储数据库中实体的所有修订(更改历史记录).目前我们有2个设计方案:
例如,对于"员工"实体
设计1:
-- Holds Employee Entity
"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"
-- Holds the Employee Revisions in Xml. The RevisionXML will contain
-- all data of that particular EmployeeId
"EmployeeHistories (EmployeeId, DateModified, RevisionXML)"
Run Code Online (Sandbox Code Playgroud)
设计2:
-- Holds Employee Entity
"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"
-- In this approach we have basically duplicated all the fields on Employees
-- in the EmployeeHistories and storing the revision data.
"EmployeeHistories (EmployeeId, RevisionId, DateModified, FirstName,
LastName, DepartmentId, .., ..)"
Run Code Online (Sandbox Code Playgroud)
有没有其他办法做这件事? …
如何比较版本号?
例如:
x = 1.23.56.1487.5
y = 1.24.55.487.2