我想找到管理和版本化共享文件的最佳方法。现在我们使用mercurial和TortoiseHG,这对于一个项目中的所有文件版本都很好,但是我们想要从主存储库中单独处理一些文件。
我们使用codeigniter,我们有一些模型,库和视图文件,我们想要在我们的项目之间共享,并将这些文件与其他存储库中的当前项目分开版本(或者其他方式,例如包管理器 - 我不要没有什么可能是最好的。
换句话说,我们有项目A和项目B(我们有比2项更多的项目,这只是例如)。当我们从项目B的所有者获得功能请求(一般功能(更好的登录系统))时,我们准备必要的更改,并且我们希望将此修改上载到所有其他项目。现在我们在当前项目中创建这些修改,我们正在努力。如果我们使用它自己的存储库创建另一个第三个项目来创建这些共享文件可能很难开发,因为这些文件不能单独工作,所以他们需要其他视图和控制器文件来加载和测试它们。
结构:
root/
application/
model/
auth.php
other1.php
other2.php
library/
mail.php
other1.php
所以我们要分别使用auth.php和mail.php版本,而不是其他的.php-s并从我们的任何项目上传到其他地方,并检查这些分离的共享文件存储库中是否有任何更新,如果是在那里,而不是在自己的项目中更新这些文件。
到目前为止我尝试过:我在mercurial中创建了一个子存储库,但是正如我所看到的,只有我们将共享文件保存在单独的文件夹中才能工作,这不是我们想要的。
使用子存储库我们得到了这些结构:
root/
.hg/
...
application/
model/
auth.php
other1.php
other2.php
library/
mail.php
other1.php
subrepo-files/
application/
model/
auth.php
library/
mail.php
我希望你理解我在说什么,因为治疗越来越难。现在我们做的是,当其中一个更新时,我们手动将这些共享文件复制到所有其他项目。是的,这太可怕了!有时候有人忘记将共享文件的更新版本复制到其他项目,当我们在共享文件上的其他项目中创建其他更改,而不是将它们复制回其他项目时,我们会丢失以前的更新(使用自己的项目进行版本控制) ,但我们只注意到太晚了,我们必须手动调试它们。
我花了几天的时间来找到最好的方法,但我没找到我们想要的东西。
答案 0 :(得分:0)
我想我明白了。我过去为此类事情所做的就是使用Composer和private Composer repositories。使用Composer,您可以将共享代码打包为"模块" (或者你喜欢称之为的任何东西)。
例如,我们有一个内部数据库模块和配置模块,我们全面使用。对于那些我可以独立管理和更新数据库或配置模块,然后将它们包含在任何需要它们的项目中。
真正酷的部分是你可以version你的Composer模块。这意味着每个加载模块的应用程序只会提取它的特定版本。如果您更新模块,其他应用程序仍在使用以前的版本,并且不会中断。
我知道这并没有解决你如何开发和测试模块的问题,但有一些选择。
Composer会将模块加载到当前应用程序内的created
check: RMovements {
name = john;
_quantity = 2000.0;
quantity = 2.0;
}
before update: RMovements {
name = john;
_quantity = 2000.0;
quantity = 2.0;
}
after update: RMovements {
name = john;
_quantity = 9000.0;
quantity = 9.0;
}
check: RMovements {
name = john;
_quantity = 9000.0;
quantity = 9.0;
}
目录中。加载到应用程序后,您可以使用符号链接将装有Composer的模块代码替换为模块的独立项目文件,也可以在vendor/
目录中修改它们,然后将更改推送到Mercurial 。
您还可以创建一个简化的MVC应用测试/模拟版本,并在那里自动化测试。