|
|
1
2
好吧,我将集中在你问题的共享项目部分,因为我刚从一个工作场所来,在那里我们有多个项目和多个颠覆性的共享项目。 我建议的第一件重要的事情是,你开始使用以下想法: “在硬盘上的任何位置对项目主干进行签出是构建解决方案所必需的全部内容。” 还要记住 没有更改的工作副本没有值 . 不管你在磁盘上的哪个位置签出东西,删除一个工作副本都不应该让你惊慌失措,因为你可以再次签出主干然后马上启动。我发现在我以前的地方,我们非常小心地“设计”开发环境,把所有的东西都放在正确的地方。这是荒谬的,花在这上面的时间永远不会回来。做一次,在一个体面的源代码控制(如svn,或git,或tfs)做它,并且很高兴你现在可以通过工作拷贝像昨天的报纸。 工作副本具有任何值的唯一时间是是否有尚未提交的任何修改。 任何有价值的工作副本都容易受到攻击 . 始终在可行的情况下尽快提交修改。任何形式的硬盘故障(包括工作副本损坏)、意外删除、从工作到不工作的更改等都有可能导致大量工作的丢失-这是很有价值的一点。如果半成品代码不适合在项目的主干中看到,那么就创建一个分支并提交给它。 这意味着您将能够在驱动器的不同位置签出同一项目的多个版本,并对它们进行工作(例如,开发和实时错误修复版本)。它还意味着,检查主干将使该工作副本文件夹下的所有依赖库关闭。 它还意味着拥有头/库所在位置的IDE级别定义是行不通的。这是Visual Studio引入的一个糟糕的想法,但它们也允许您使用单个项目设置中的相对文件夹(应该在哪里)来指定这些内容。相信我,如果您使用的是IDE级别的位置定义,那么在某个时候,您将要构建应用程序,并试图找出更改没有出现的原因。然后当你意识到你刚刚针对一个旧的、有缺陷的库版本构建了最后3个版本时,你会有一种沉闷的感觉。至少我做到了。 为了解决这种乌托邦的情况,如果您将每个项目和库(例如,CoolApp、CFO、ThisControl、CWIDget)视为具有单独发布周期、集群等的单独项目,那么您的境况会更好。朝着独立思考这些事情的方向前进,分别发展和释放它们。 这听起来开销很大,但是如果您希望在不破坏其他使用它的项目的情况下对共享组件进行更改,这是必要的。 考虑到这一点,我建议您构建这样的存储库:
如果您的存储库当前没有这样设置,您可以使用SVNCopy来构造它。您可以在顶层使用标记/主干/分支以及下面的所有内容,但在我看来,这样做使得概念上分离项目更加困难。 现在只需检查主项目(CoolApp)的主干。当然-这不会按原样构建,因为没有任何依赖项目。 下一步是将其他项目添加为 外部因素 . 在使用Tortoissesvn的工作副本的顶级文件夹中,右键单击并转到svn->属性。添加名为“svn:externals”的新属性。以格式定义属性
因此,对于CoolApp,您可以添加以下SVN:Externals定义:
完成后,提交更改,然后进行“更新”,外部的内容也将被删除。 您可以使用这种形式的外部定义构建任何工作副本文件夹结构。您必须修改解决方案文件才能在新位置查找项目,但这通常不是一个大问题。 一旦你以这种方式工作起来,注意让外部物体指向一个主干通常是一个非常糟糕的主意。这是因为当库的主干因为另一个项目而更改时,当您对解决方案(或更新)执行新的签出时,您的完美解决方案将不会生成——即使您认为您没有更改其中的任何内容。 开始为库制作标记,并将外部对象指向它们。这是当您开始将库视为独立的项目时。 这是另一个原则的情况: “对项目的任何更改都必须在主项目的主干中进行相应的修订。” 更改外部位置以指向新的库版本是一个很好的例子,可以说“嘿,我现在使用的是第2版的傻瓜”。上一段中的问题是因为代码在您的“下面”发生了变化。 要修改一个库,您最好签出该库主干的工作副本,修改它并用新版本号标记它。然后在主项目中,将外部更改为指向新标记并更新。 您可以通过将您的库位置从标记“切换”到主干来实现此过程的快捷方式。这样,当您提交时,您将把库更改提交到主干。但是,通过这种方式,您需要记住外部仍然指向标记-您仍然需要标记库并更改项目外部,否则将无法生成新的签出。 如果您依赖任何第三方工具,如nant或nunit,那么将它们作为供应商分支添加到存储库中,并通过外部引用它们。VS允许您通过浏览来引用DLL,这比GAC更灵活。对于一个开发人员来说,这听起来可能不是什么问题,但是如果你尝试一次升级一个项目,你会发现签出项目的主干并知道你已经得到了正确版本的nunit(而不是必须卸载nunit并重新安装正确版本),这样做会更好。 也请注意,没有必要 每一个 将解决方案中的项目作为单独的外部项目。只有在不同的项目之间可以或应该共享的东西才应该被分离出来。 最后,一旦您启动并运行,我真的建议您使用构建引擎,如CruiseControl.net或Hudson(我的最爱)。这会在问题暴露在雷达下并从后面咬你之前给你快速反馈。 好吧,我现在停下来,我不想去拿“最长答案”的徽章。 |
|
|
2
2
Subversion Book(免费在线)提供了几种建议的存储库配置: 本页提供了有关进一步阅读的良好链接: http://svnbook.red-bean.com/en/1.5/svn.tour.importing.html#svn.tour.importing.layout SVN的一个非常好的地方是,在目录中移动是非常小的,这对CVS来说是不正确的。所以,不要觉得有压力来制定一个“最终的”组织权的蝙蝠。做一些有用的事情,玩弄结构直到你更喜欢它。 另一件值得一提的事情是,SVN对数据使用了copy-on-write技术。因此,随时可以根据需要制作整个目录的“svn cp”副本。 |
|
hbhutta · 尝试在目录中创建文件时获取权限错误 2 年前 |
|
|
7BeholdeR7 · 文件夹的重量超过其中的文件(六倍) 3 年前 |
|
|
HoCo_ · 从终端在Atom中添加项目文件夹 8 年前 |
|
|
Pymateur · 如何在Windows上将目录路径作为用户输入? 8 年前 |
|
|
Jasonca1 · PathLib递归删除目录? 8 年前 |
|
|
Bassie · 对话框以错误路径打开文件夹 8 年前 |
|
|
RickRilled · 如何在bash中的目录中操作 8 年前 |