我一般都是源代码控制的新手,我想知道如何处理以下场景:
假设我有一个为一个平台编写的应用程序,在.NET中说Windows Forms,我使用Subversion(或我认为的任何SCM软件开发了它。)
现在,我想更新应用程序以使用WPF,并可能添加一些其他增强功能。我是否会继续在这个WPF版本2.0的树的分支中继续开发?
可能会有一些文件保持相同,包含业务逻辑,数据访问等等,但实际上我想要启动一个全新的解决方案,并且可能只是从版本1.0借用一些东西
什么是最佳做法?使用自己的树/分支/标记文件夹创建一个新的应用程序文件夹,或者尝试将新版本保留为原始1.0应用程序文件夹的一部分?
你是怎么做到的?
或者在一个不太激烈的案例中,例如将应用程序从Silverlight 2升级到Silverlight 3?那么呢?
我很感激那些经历过此事的人的指导。
答案 0 :(得分:3)
我以这种方式构建我的项目:
/branches (different working sets)
/tags (revisions, etc)
/trunk (current production state)
/lib (3rd party libraries and dependencies)
/tools (build tools)
/src
/component-a
/component-b
/component-c
因为subversion只跟踪每次提交的增量,所以没有服务器端惩罚来分支trunk下的所有内容。唯一的考虑因素是您要使用的本地计算机上有多少磁盘空间。
当你推出代码时,在标签下“标记”它。当您需要剥离实验代码时,请创建一个分支。
编辑: 就在不同操作系统或运行时环境之间共享库相关的挑战而言,它实际上取决于项目和组件的大小。在某些情况下,将“核心”逻辑拆分为自己的项目是有意义的,并将“版本化”编译库导出到(可能)许多消费者。这种方法只有在核心逻辑稳定且不经常版本时才能正常工作。
答案 1 :(得分:2)
关于版本控制通常有几种思想流派,但我经常遇到的那个对我有意义的是:
答案 2 :(得分:2)
根据您对@Timo Geusch的评论,似乎您的问题不仅仅是处理已发布软件的版本,而是更多地选择任意数字。重新排列代码与版本控制几乎没有关系,更多的是关于如何设置.NET解决方案(即代码架构)。让我们看看下面的例子,名字很简单:
MySolution
/MyWinFormsProject
在这个例子中,我们有一个名为MySolution
的解决方案。它是一个名为MyWinFormsProject
的WinForms项目。当我们想要从一个WinForms项目切换到一个WPF项目时,它会有问题,因为你在Winforms应用程序中拥有的大多数代码都需要重写。如果你有10000多行代码,这将是一项令人痛苦的任务。
如果你处于这种情况,你真的应该通过删除公共代码并将其放在另一个项目(最好是Class Library
)中来启动重构,我们可以将其称为MyCommonCode
。请记住,您需要在MyCommonCode
中引用MyWinFormsProject
。
MySolution
/MyWinFormsProject
/MyCommonCode
完成后提交,修订号将会提升。如果你以后搞砸了,你可以恢复原状。接下来创建一个名为MyWPFProject
的WPF项目。如果你想从那个开始,你只需要将MyWPFProject
设置为启动项目。
MySolution
/MyWinFormsProject
/MyCommonCode
/MyWPFProject
当你完成后,再次提交。在完成WPF之前,无需删除WinForms项目。
注意:如何准确区分和命名projects and namespaces取决于您,虽然查看一些open souce projects将有助于您获得灵感。
答案 3 :(得分:0)
你tag目前在存储库的头部是“1.0版”/等。