向现有项目添加版本控制

时间:2020-03-06 14:33:49  来源:igfitidea点击:

我正在做一个已经发展壮大的项目,而且我是唯一的开发人员。我们目前不使用任何版本控制,但我绝对需要开始。

我想使用Subversion。将现有项目转移到其中的最佳方法是什么?

我有一个用于开发新功能的测试服务器,然后将这些文件传输到2个生产服务器。有没有一种工具可以自动将文件上传到测试,然后自动部署到实时服务器?

所有这些都是使用Visual Studio在ASP.NET中开发的(如果需要的话)

解决方案

将我们现有的基础导入到SVN存储库中,将其签出,然后再次开始工作。

为了扩大先前的答案...

1)创建一个新的SVN存储库
2)将到目前为止已完成的所有代码提交给它
3)再次检查所有代码,以在开发机器上创建工作副本
4)工作!

确实,这绝对不是障碍。

我们应该看一下Visual SVN,它已无缝集成到Visual Studio中。

Subversion服务器安装...
Subverison客户库安装...

安装Ankh与VS集成
安装Tortoise以进行文件管理器集成

在文件管理器中,右键单击"解决方案...导入..."的顶级方向。

对于要求而言,这可能是过高的选择,但是在一台计算机上创建SVN存储库,然后在另一台计算机上创建竞争性的集成服务器。我会推荐TeamCity。 (如果硬件非常昂贵,我们也可以为此使用虚拟PC)

一旦构建完成并经过测试,这将允许我们添加自定义构建步骤以部署到生产服务器上。

TeamCity了解更多信息。 Thi还提供了Visual Studio插件。

开始使用Subversion很容易。下载TortoiseSVN,它将SVN集成到Windows资源管理器中。下载AnkhSVN进行VS集成。将svnserve设置为Windows服务(在文档中)。

然后,我们要做的就是从svn中检出一个空目录,并将所有代码文件复制到该目录中。然后用Tortoise添加它们,然后提交。在Visual Studio中更改文件时,Ankh会向我们显示已更改的文件,我们可以在其中提交。

尽管我们可能会发现批处理脚本和xcopy就足够了,但我们使用NAnt脚本进行了所有部署。

我对Perforce的了解比对Subversion更为熟悉,但是将项目置于版本控制之下并不难。

安装并运行版本控制软件后,清除代码目录中所有非源代码的内容(例如,运行" make clean")。然后使用仅使用命令将新文件递归添加到存储库中。接着提交,我们就完成了。我建议签出到另一台计算机上并至少构建一次,以确保我们拥有构建所需的一切。

至于部署到服务器上,这实际上不是版本控制问题。通常,我们可以将其放入构建系统(即" make testinstall"," make install")或者仅编写Shell脚本。

除了技术问题之外,只需获取SVN并开始使用它即可。我们将看到直接的好处(查看代码历史记录,进行diff调试以查看哪些更改引入了上周不存在的错误),并且我们将永远不会回头。

我个人不喜欢集成在IDE中的源代码控制。我使用与Windows资源管理器集成的Tortoise SVN,可让我们直接从OS检入,比较,合并等文件。

+1由Joe和Steve提供的答案。.我还要提到,设置忽略列表或者SVN道具很重要,这样我们就不必检入用户文件或者重新设置。

还要确保我们包括构建所需的所有内容,例如构建脚本,第三方程序集,外部工具(例如nunit,nant等)

当我们使用它时,我强烈建议我们查看CC.net,并安装持续集成服务器以使构建自动化。

拥有源代码控制是一回事,正确地使用它是另一回事。请记住要经常和早检查。

简单的答案是Subversion和Tortoise SVN。

我在Visual Studio中使用了Subversion,并在现有项目中实现了它。有一个免费的Visual Studio插件Ankh,我成功使用了该插件。但是,我遇到了一些问题,其中Ankh拒绝与.svn元数据中所反映的文件的真实状态保持同步(它做了类似的事情,即当乌龟告诉我它是最新的时,必须更新文件) )。在这些情况下,重新启动视觉工作室可以解决问题,但这对我来说既痛苦又乏味。

目前,我停止使用Ankh,只是在VS中正常工作我的项目,然后使用Tortoise和Windows资源管理器将它们签入/签出。这可以完美地工作。无需刷新或者重新启动VS。

1)创建一个新的存储库,我们可以在测试服务器上创建它,然后将它转移到专用服务器/ NAS(如果它使我们变得很简单)。
2)将所有现有的源代码导入到存储库中。
3)我们可以使用" svn"命令行工具(及其相关工具,如svnadmin)创建一个批处理文件,该文件将自动执行上载和部署过程(当然,后者与编译器结合使用)。

我们可以在这里找到更多信息:
SVN书只是开始阅读,我们不需要阅读所有内容就可以开始和运行svn。
MSBuild由Microsoft建立的构建自动化平台,尽管它可能会过大,但要取决于项目的大小。

如果我们将Visual Studio与批处理文件放在同一台计算机上,则可以使用它来编译解决方案,尽管我怀疑将来会遇到扩展问题。

版本控制和部署是两个独立的问题(尽管良好的版本控制系统可以使部署成为更一致,可重现的过程)。设置好版本控制服务器后,我们可以使用一组简单的脚本/批处理文件来自动检出代码并将其部署到服务器。

我看不到有人在解决问题/帖子的这一部分:

Is there a tool that will automate the
  upload to the test, then the
  deployment to the live servers?

一个难题是Subversion在工作副本中创建了隐藏的.svn文件夹。解决方案之一是使用svn export命令。这将在没有.svn文件夹的另一个目录中复制存储库。

据我所知,还没有自动化的工具。我们可以创建一个批处理文件,该文件将发出svn export命令,如下所示:

svn export C:\MyReporitosy\Path C:\DestinationPath

只需将其作为部署过程的一部分即可。确保从此导出目录而不是工作副本中部署代码。那你应该没事的。

无需SVN服务器。
使用乌龟水银http://sourceforge.net/project/showfiles.php?group_id=199155

设置本地仓库
1)下载并安装
2)打开资源管理器窗口,找到我们项目的基本目录
3)右键单击-> TortoiseHG->在此处创建存储库->确定
4)右键单击-> HG提交...
5)键入提交注释,选择要跟踪的文件,然后单击提交

设置文件共享的远程回购(其他可用的传输方法)
1)打开资源管理器窗口到远程文件夹
2a)右键单击-> TortoiseHG->克隆存储库
2b)或者,只需复制本地仓库

提交本地后更新远程仓库
1)打开资源管理器窗口到远程文件夹
2)右键单击-> TortoiseHG->同步
3)在下拉菜单中选择"更新到新提示"
4)在"远程路径:"输入框中输入本地仓库的路径。
5)点击拉

为了补充前面的答案,我还建议我们使用显而易见的建议(但应将其明确表示):

  • 选择项目的稳定状态以导入到存储库中(无论选择哪种工具)
  • 导入完成并"检查"后,立即创建标签(或者SVN中的标签)(如"是否编译?","是否已获得所有需要的设置文件?",...)
  • 考虑一下在此项目的生命周期中需要进行的不同"开发工作",这将使我们对分支机构的外观有所了解。 (在开发下一个版本时,已经在生产中的旧版本的维护分支,用于隔离复杂合并的合并分支,补丁分支,...)

现在,请当心:

Is there a tool that will automate the upload to the test, then the deployment to the live servers?

问题的那部分涉及"发布管理"过程,与"版本管理"完全不同。
我不确定我们选择的版本工具是否可以提供帮助。尤其是当我们考虑在生产服务器上不应该使用版本控制工具时(为了将生产服务器对任何工具的依赖性降到最低,除了这里的编程过程之外,仅应允许监视和报告工具。网络服务器,例如-)

我想知道我们为什么选择Subversion?如果项目未使用任何vc,则可能应考虑使用Mercurial或者Git。

他们的强项是不需要中央存储库,这意味着程序员可以签出项目,回家,工作(而不必与服务器建立连接),然后第二天回到办公室并同步其存储库。

如果不是SVN的市长要求,我建议同时考虑这两种dvc系统。

除了关于将项目置于源代码控制之下的实用性的所有其他评论之外,我鼓励我们看一下"流线:并行软件开发的分支模式",作为代码行和分支策略的指南,这可能会为我们节省一些时间。以后再工作

同样,Eric Sink也发表了大量文章,介绍了各种源代码控制概念Source Control HOWTO

最近,我已经开始喜欢Bazaar的简单性,以解决已经入侵了一段时间的应用程序后启动版本控制的问题。

使用集市,实际上仅是几个简单的命令:
1)bzr初始化
2)bzr add [我们感兴趣的文件]
3)bzr提交

请注意,这不会设置任何中央存储库。但是我们也可以这样做。

关于将其用作部署工具,我敢肯定,不久前我已经阅读了有关它的内容。无论如何,文档确实很棒。

我在台式机上使用了Mercurial,并且我喜欢它。创建存储库非常容易...

hg init /path/to/repository

添加文件...

hg add /folder/pattern  

OR

hg add FILE

然后,我们只需提交...

hg commit

这样我们就可以运行了。

另一个很棒的事情是,当我想同步到笔记本电脑时,它只是...

hg pull //desktop_name/path/to/repo/  
hg update

我喜欢Subversion的事情是Visual Studio的插件,当状态图标无时无刻不在盯着我时,我会更多地关注更新。如果我们要大量处理一个项目,则插件肯定可以弥补设置svn存储库的麻烦。