当我第一次为不同的项目设置SVN结构时,我决定将每个不同的项目放在一个单独的存储库中.
这已经运作了一段时间,但我盯着认为我想将所有这些存储库合并到一个整体"公司范围"的存储库中,所以当我让员工查看源代码时,他们可以从顶部并拥有来自所有不同项目的所有代码.
我在svn-merge-repos
网上找到了这个命令,但没有很多用户反馈或使用它的有用提示.这是加入存储库的最佳方式,所以我不会丢失我的历史数据,还是有更好的方法?我应该注意哪些陷阱?
谢谢.
Uma*_*aja 23
我最近不得不做类似的事情,我做的是,实质上:
* svnadmin create X:\Repositories\RepositoryC
* svn mkdir http://localhost:8080/svn/RepositoryC/branches --message "Added the branches folder."
* svn mkdir http://localhost:8080/svn/RepositoryC/tags --message "Added the tags folder."
* svn mkdir http://localhost:8080/svn/RepositoryC/trunk --message "Added the trunk folder."
* svn mkdir http://localhost:8080/svn/RepositoryC/trunk/A --message "Added the trunk\A folder."
* svn mkdir http://localhost:8080/svn/RepositoryC/trunk/B --message "Added the trunk\B folder."
* svn checkout http://localhost:8080/svn/RepositoryC RepositoryC
* svnadmin dump X:\Repositories\RepositoryA > RepositoryA.dmp
* svnadmin dump X:\Repositories\RepositoryB > RepositoryB.dmp
* svnadmin load X:\Repositories\RepositoryC --parent-dir trunk\A < RepositoryA.dmp
* svnadmin load X:\Repositories\RepositoryC --parent-dir trunk\B < RepositoryB.dmp
* svn checkout http://localhost:8080/svn/RepositoryC RepositoryC
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码假定在托管Subversion存储库的计算机上,存储库存在于X:\ Repositories上,而Subversion服务器的URL是http:// localhost:8080,并且该存储库位于工作文件夹中.
此时,您将最终得到RepositoryC,其中包含RepositoryA和RepositoryB,分别位于trunk\A和trunk\B下,最重要的是,您的更改历史记录将保留在RepositoryA和RepositoryB中.您的工作文件夹还包含一个名为RepositoryC的文件夹,其中包含一个Checkout out RepositoryC.
您现在可以在RepositoryC中移动内容以统一两个存储库RepositoryA和RepositoryB的项目结构.
请不要强迫您的用户签出整个存储库以获取构建的内容.这是回到旧的sourceafe模型,它并不好.
每个项目有一个存储库很好.如果project1需要来自project2的代码,请将"svn:externals"属性添加到project1的trunk,这会将project2带到project1目录下的合理位置.如果project2需要project3的代码,它也可以有一个外部属性并将代码放在其下面.
实际上,如果外部引用始终指向标记或特定修订版,那么最好,但如果您避免"一个巨大的项目空间"问题,我会让您指向主干.
如果您使用外部设备,任何人都可以签出他们想要的项目并自动获取所有依赖项,然后随意构建 - 就像您想要的那样.他们所有的代码都是自包含在一个工作目录中,只包含他们需要的东西,他们可以将多个项目的多个版本签出到单独的工作目录中,而不会浪费空间,并且仍然可以跟踪到底发生了什么.
如果project1希望在它的项目文件夹之外而不是在内部找到project2,那么它可能需要对你的工作空间进行一些小的重构,但这只是在宏观方案中的一个小调整.
如果你真的把心放在一个存储库上,那也没关系(这就是我们在工作场所使用的,在家里,想到它),但要确保你有一个每个项目都有自己的标签的结构,trunk和branches文件夹,以及检查project1的主干是你需要做的就是获得project1的代码来构建.
最后,如果您真的需要为项目设置一个时髦的布局,您可以添加一个额外的单个存储库,它基本上是一个元存储库.该存储库将包含每个顶级项目的1个目录(带有主干标签和分支),并使用外部,引用所有其他项目,并按照您期望的方式构建时髦的工作空间.
这样,通过添加额外的存储库,您可以获得一步完成检出和构建的所有好处,并且至少有可能管理project1因project2共享的代码而需要进行更改所需的更改,并且您突然需要为项目3获得紧急修复.