这个问题似乎是半常出现的,但遗憾的是我还没有找到答案,我可以完全适用于我的情况,所以我想我会问自己的问题。这是关于SO的第一个问题,所以要好。 :P
"问题" 我们公司开发了多个PHP应用程序,但其中一个应用程序是" master"各种各样的。我们所有的其他应用程序都安装在这个"主应用程序"中,并且需要主应用程序才能工作。
当然,我们使用版本控制来管理这些应用程序。
虽然我们的插件应用程序中的许多文件都在子目录中,但并非所有文件都在子目录中。这意味着我们不能使用子目录导入(svn externals,git子模块等)。例如,在根文件夹中有几个文件夹(admin,public,kernel等),addon应用程序在一个或多个这些文件夹中有文件 - 它们不是独立自包含在主应用程序的目录结构中
我们目前使用SVN,最近发现自己正在考虑git,因为我们认为可用的一些功能对我们有用。然而,我不清楚使用git的一件事是,是否真的有办法合并" (不是在版本控制意义上)当开发人员处理代码时,这些存储库在本地的单个目录中。我还没有办法用SVN做到这一点。
在理想的世界中,我们会为我们的" master"具有如此结构的应用程序:
我们的插件应用程序将具有类似的结构(请记住,我们有多个插件应用程序):
我们已经尝试了以下方法,每种方法都有自己的注意事项:
有没有办法使用git或SVN(或任何其他版本控制系统)在单个目录中允许多个存储库而不使用子目录? SVN外部几乎是完美的,但要求外部存储库中的所有文件都在一个单独的子文件夹中,如上所述,这对我们不起作用。我收集git具有相同的功能,但同样不能在一个文件夹中允许多个存储库,这给我们留下了同样的问题。
相关问题: Multiple repositories in one directory (same level) - is it possible? - 这与我想的非常接近,但我认为没有任何解决方案可以应用于我们的情况。
答案 0 :(得分:3)
我从未尝试在生产环境中做过类似的事情,但你当然可以这样做:
$ git init $ mv .git .git1 $ git init $ mv .git .git2 $ export GIT_DIR=.git1 # do work in first repo $ export GIT_DIR=.git2 # do work in second repo
答案 1 :(得分:3)
git允许您在顶级git命令中指定work-directory和git-directory:
git status
可以修改以使用带有
的其他.git文件夹git --git-dir=some/other/path/to/a/different/.git/folder status
同样,您可以指定其他工作文件夹:
git --work-tree=some/other/path status
您也可以合并2。
如果您必须始终拥有此工作流,则可以覆盖并包装git命令以始终指向特定的.git目录或工作目录。一个例子是“git achievement”拦截git命令,并通过git为你提供更好的奖励,然后调用实际的git命令:https://github.com/icefox/git-achievements
看起来很有趣,需要解决。
我还会考虑为每个应用程序分配一个分支,并在核心应用程序完成的任何工作之上不断地重新设置这些分支。这实际上是我的第一选择。
答案 2 :(得分:2)
Subversion 1.6和1.7允许单个文件的外部。
请参阅http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html
“Subversion 1.6还引入了对外部定义的支持 文件。文件外部配置就像外部一样 目录并在工作副本中显示为版本化文件。
例如,假设你有文件/trunk/bikeshed/blue.html 你的存储库,你想要这个文件,因为它出现在修订版中 40,出现在/ trunk / www / as green.html的工作副本中。“