我是GIT的新手,不知道它能满足我的需求,但看起来令人印象深刻。
我有一个用于不同客户的网络应用程序(django + javascript)
我计划使用GIT将这些不同的客户版本作为分支处理。每个客户都可以拥有自定义文件,文件夹和设置,改进版本......但应该共享相同的“核心”。我们是一个小团队并且使用了github帐户。
分支是处理这种情况的好方法吗?
关于设置文件,您将如何进行?您是否.gitignore客户特定的设置文件并添加settings.xml.sample文件,例如repo?
另外,有什么方法可以阻止某些文件合并到主文件中? (但已提交给客户部门)。例如,id喜欢将一些客户数据保存到客户分支,但阻止将其提交给主服务器。
.gitignore文件是否特定于分支?的是
修改 在阅读完所有答案后(谢谢!)我决定首先重构我的django项目结构,以便在apps子文件夹中隔离核心和我的不同应用程序。这样做是一个更清洁的项目,调整.gitignore文件可以很容易地使用git分支来管理不同的客户和设置!
菊
答案 0 :(得分:6)
我不会使用分支来完成你想要做的事情。
在源代码管理中,分支旨在用于要合并回主干的内容。例如,Alex Gaynor将他的summer of code花费在allows for support for multiple databases的Django分支上,目标是最终将其合并回Django主干。
结帐(或Git案例中的clones)可能更适合您的尝试。您将创建一个包含所有项目基本文件(和.sample文件,如果愿意)的repo,并将repo克隆到您希望部署代码的所有不同位置。然后在每次部署时手动创建配置和自定义文件(注意不要add他们到repo)。每当您更新仓库中的代码时,请在每个部署上运行pull以更新代码。中提琴!
答案 1 :(得分:6)
除了cpharmston的答案之外,听起来你需要做一些重构来分离出每个客户真正定制的内容和不适合的内容。然后,您可以考虑添加其他存储库来跟踪每个客户端的自定义(全新的存储库,而不是分支)。然后,您的部署可以从您的主仓库中提取您的“核心”,以及来自该仓库的客户特定内容。
答案 2 :(得分:1)
Matthew Talbert是正确的,你真的需要将自定义内容与非自定义内容分开。如果您可以重构要包含在一个目录中的所有核心代码,则客户端可以将其用作只读git子模块。额外的好处是您可以将它们锁定到核心代码的显式版本中。这意味着他们必须有意识地更新到更新版本,这是您想要的生产代码。
答案 3 :(得分:1)
其他答案是正确的,您将处于最佳维护状态,以便将核心代码与自定义每客户端代码分开。但是,我会突然离开人群并说如果你不能这样做(因为你需要为某个客户端的核心代码添加额外的功能),DVCS分支机构可以正常工作你想做什么。虽然为了这个目的,我可能会推荐每个目录的分支而不是in-repo分支(git也可以执行每个目录的分支,但它只不过是一个克隆的repo,它会分散)。
我使用的是hg,而不是git,但我的所有Django项目都是从具有实用程序脚本的基本“项目模板”仓库克隆的,这是一个基本的常见INSTALLED_APPS集等。这意味着当我对该项目进行更改时模板,我可以轻松地将这些常见更新合并到现有项目中。这与您的计划不完全相同,但类似。如果您修改了已为特定客户端定制的核心中的相同代码区域,则偶尔必须处理合并冲突。
答案 4 :(得分:0)
在阅读完所有答案后(谢谢!)我决定首先重构我的django项目结构,以隔离应用程序子文件夹中的核心和我的不同应用程序。这样做是一个更清洁的项目,并且在不同的分支文件中调整.gitignore可以很容易地使用git分支来管理不同的客户和设置!