任何人? 这个问题在 SO 上可能也更好。因此,任何有能力的人,请随意提出来。
我即将安装一台新笔记本电脑,并在此过程中过渡到新的版本控制系统,作为一般清理工作的一部分。目前我使用集中版本控制系统(是的,它是VSS,是的,我知道这个系统的所有优点和缺点,但作为单用户系统,它对我来说很好用)。我对新系统的要求很少,我可以自由选择任何当前的主流播放器,但成本限制将迫使我选择 oss。我的一些要求是:
- 在 Windows 下的单台机器(即有问题的笔记本电脑)上运行
- 我不会与其他开发人员或工作人员分享东西——这更多是为了我自己的历史利益。
- 我想要版本化源代码、文档和二进制文件
- 我有大量不相关的项目层级结构(见下文)
- 我在层次结构中有一些不需要控制的文件(但可以控制)
- 一些项目使用 Visual Studio,因此一些集成可能会很好。
- 工作之间可能会有一些文件共享。
- 我通常只需要在代码文件中进行少量的分支
我目前的目录层次结构有点像:
Root
|
|--Customer #1
| |
| |--Job #1
| | |
| | |--Data files received from Customer for Job (not controlled)
| | |--Documentation files (controlled)
| | |--Project information files (not controlled - but could be)
| | |--Software Project Files (controlled)
| | |--Scratch dir for job (not controlled)
| |
| |--Job #2
| | (same structure as above)
|
|--Customer #2
| |..
|
|--Cusmtomer #n
|..
目前我有大约 22 个客户,他们手下有不同数量的项目。
目前,我有一个基于目录结构根目录的 VSS 存储库。如果我继续使用集中式系统(即 SVN),我相信我应该保持相同的方法并继续使用基于根目录的单个存储库。这是一种有效的方法吗?
但是,如果我转向分布式工具,那么我不确定该如何处理这种情况。我最初的猜测是,我不应该有一个基于整个目录结构的根目录的存储库 - 但这只是猜测,所以我真的不知道它有多有效。
我是否应该在根目录、客户目录、作业目录或子作业目录级别采用分布式方法?
另外,我不清楚分布式工具(也许还有 SVN)是否可以分支存储库的某些部分。例如,我认为分支软件项目中的源代码很有用,但分支我的文档则没用。那么,如果我在作业级别发布存储库,我可以只分支软件项目文件吗?还是该作业中的所有文件都会被分支?
每次我查看分布式工具时,我都会有一种挥之不去的感觉,觉得它们不适合我的设置风格。我不喜欢在目录层次结构中手动设置 50 到 80 个单独的存储库(如果我在工作级别进行推广,或者在客户级别进行推广,则需要 20 多个)。这种感觉也延伸到将所有这些存储库分散在各处 - 然而我做有一个我信任的备份策略,所以后一种感觉完全是没有根据的。
那么你们能给我什么建议呢?提前谢谢了!
答案1
我在用着TortoiseSVN我自己就成功了。使用空白的新目录和“在此创建存储库”选项设置(基于文件的)存储库非常简单。TortoiseSVN 似乎可以处理使用存储库所需的所有工作,因此无需额外安装。
答案2
我主要使用 Subversion,目前对分布式系统只了解一点点,所以我将从 SVN 的角度来谈。
如果您只是在一台机器上使用源代码控制,那么分布式源代码控制的优势就会降低。
如果手动设置 Subversion,会有些麻烦。不过,有一个名为 VisualSVN 的(免费)软件包可以帮您完成这项工作,因此您只需使用 SVN,而不必担心设置或配置。
如果您对 SVN 的 Visual Studio 集成感兴趣,我知道有几个插件:AnkhSVN(免费)和 VisualSVN(付费)。后者来自生产上述免费 VisualSVN 安装包的同一家公司。
就处理多个客户(每个客户都有项目)而言,您可以使用一个包含所有内容的全局存储库。另一个想法可能是为每个客户创建一个单独的存储库,每个存储库都包含该客户的项目。这样,您可以更好地控制每个存储库,但您的开销会更大一些。
您提到了分支项目。SVN 在存储库级别进行分支,您不能只分支特定的子集。这将有利于上面提到的每个客户存储库的想法。但是,在 SVN 中,分支和标签很便宜,因为它们存储变更集(增量),而不是完整副本。Git 和 Mercurial 等分布式工具针对分支和合并进行了优化,因此使用这些工具的体验可能会更好 - 我对它们了解不够,所以不能肯定地说。
希望有所帮助。