我在网络上搜索了一下,没有找到一份好的“初学者”指南来介绍SVN,这里不是指“如何使用命令”,而是控制源代码的方法。
我想澄清以下主题:
- 你多久提交一次?像平常按 Ctrl + s 一样经常提交吗?
- 分支和标签是什么,如何控制它们?
- SVN 中放入什么?只有源代码还是其他文件也可以共享在这里?(未被视为版本化的文件..)
我不知道分支和标签是什么,也不知道它们的目的,但我猜想当你上传东西到主干时,当你进行重大构建时,你将其移动到分支中?所以,在这种情况下,什么被认为是重大构建呢?
我在网络上搜索了一下,没有找到一份好的“初学者”指南来介绍SVN,这里不是指“如何使用命令”,而是控制源代码的方法。
我想澄清以下主题:
我不知道分支和标签是什么,也不知道它们的目的,但我猜想当你上传东西到主干时,当你进行重大构建时,你将其移动到分支中?所以,在这种情况下,什么被认为是重大构建呢?
当我们在这里实施Subversion时,我自己也问了同样的问题 -- 大约20个开发人员分布在4-6个项目中。 我没有找到任何一个好的“答案”来源。以下是我们的答案在过去3年中如何发展的一些部分:
-- 尽可能经常提交;我们的经验法则是,每当您完成了足够的工作量,如果修改丢失,必须重新做一遍,则提交;有时我每15分钟提交一次,有时可能是数天(是的,有时需要我一天才能写1行代码)
-- 我们使用分支,就像你早期的回答建议的那样,用于不同的开发路径;现在对于我们的一个程序,我们有3个活动分支:一个用于主要开发,一个用于尚未完成的并行化努力,另一个用于修订为使用XML输入和输出文件的努力;
-- 我们几乎不使用标签,尽管我们认为我们应该使用它们来标识发布给生产环境的版本;
想象开发沿着单一路径进行。在某个时间或开发状态下,市场决定发布产品的第一个版本,因此您会在路径上放置一个标记,标记为“1”(或“1.0”或其他内容)。在某些时候,一些聪明的人决定将程序并行化,但决定那需要几周时间,而人们希望同时继续沿着主路径前进。所以您在路径上建立一个分叉点,并且不同的人走向不同的分支。
道路上的标记称为“标签”,而分叉点则是“分支”划分的位置。偶尔,分支也会重新汇合。
-- 我们将构建可执行文件(或系统)所需的所有材料放入存储库;这意味着至少包括源代码和make文件(或Visual Studio的项目文件)。但当我们有图标和配置文件等所有其他内容时,都会放入存储库。某些文档会进入存储库;当然,任何可能与程序有机融合的文档(例如帮助文件)以及开发人员文档都适合放在这里。
我们甚至将Windows可执行文件放在那里作为我们生产发布的单一位置,以提供给寻找软件的人 -- 我们的Linux版本会发送到服务器,因此不需要存储。* How often do you commit? As often as one would press ctrl + s?
尽可能经常进行代码提交。只有在源代码控制下,代码才存在 :)
频繁的提交(之后是较小的更改集)可以使你轻松地集成你的更改,并增加不破坏任何东西的机会。
其他人指出,当你拥有一个功能完整的代码片段时再提交代码,然而我发现更经常提交代码也很有用。有几次我注意到自己将源代码控制作为快速撤销/恢复机制。
当我在自己的分支上工作时,我喜欢尽可能多地提交代码(字面上就是按ctrl + s键的次数)。
* What is a Branch and what is a Tag and how do you control them?
阅读SVN书籍是学习SVN的起点:
* What goes into the SVN?
文档、编译所需的小型二进制文件以及其他有价值的内容都应该放入源代码控制。
提交代码的频率取决于您的项目管理风格。如果提交会破坏构建(或功能),许多人会避免提交。
分支通常有两种用法:1)一个活跃的开发分支(主干保持稳定),或2)用于备选开发路径的分支。
标签通常用于标识版本发布,以便不会在混乱中丢失。'发布'的定义由您决定。
补充一组答案:
有人说这取决于你的风格。
对你来说,最重要的问题是你有多频繁地“集成”你的软件。测试驱动开发、敏捷和Scrum(以及许多其他方法)依赖于小的改变和持续集成。他们宣扬做出小的改变,每个人都找到了错误并一直修复。
然而,在一个更大的项目中(考虑政府、国防、10万行以上的代码),你根本无法使用持续集成,因为这是不可能的。在这种情况下,最好使用分支进行许多小的提交,但只将能够工作并准备好集成到构建中的内容带回主干。
但是,分支的一个缺点是,如果没有得到妥善管理,将会是在你的仓库中将工作带回主干的噩梦,因为每个人都是从主干的不同位置开发的(这恰恰是持续集成的最大争议之一)。
对于这个问题,没有明确的答案,最好的方法是与你的团队合作,共同寻找最佳折中的解决方案。
每天从SVN更新以获取前一天的更改
每天提交代码,以便如果您生病或缺席,其他人可以轻松接手。
不要提交会导致错误的代码,因为这会影响其他开发人员。
按小块工作并每天提交有意义的注释!
作为团队:保持开发分支,然后将预发布代码(供QA使用)移动到生产分支。此分支应始终具有完全可用的代码。
对于提交代码,我采用以下策略:
尽可能频繁地提交。
每个功能更改/错误修复都应该有自己的提交(不要一次提交多个文件,因为这会使该文件的历史记录不清晰--例如,如果我独立更改了日志模块和GUI模块并同时提交了两者,则两个更改将在两个文件历史记录中都可见。这使得阅读文件历史记录变得困难),
不要在任何提交中破坏构建--应该能够检索存储库的任何版本并构建它。
所有构建和运行应用程序所需的文件都应在SVN中。测试文件等不应该包括在内,除非它们是单元测试的一部分。
commit . -m 'bug #201 fixed y2k bug in code'
将告诉查看历史记录的任何人该修订版用于什么目的。