2

我正在使用 git 来管理扩展的 CodeIgniter 框架。它是当前 CI 版本的克隆,带有额外的帮助程序、库等。

我有很多网站都使用这个框架,如果我在一个网站中添加新的帮助方法或修复错误,我希望能够轻松更新所有其他网站,而不会覆盖它们的任何自定义文件。

我希望实现以下工作流程

  1. 创建一个新的站点目录git init来初始化一个空白的本地 git repo
  2. 将其与远程框架 repo 链接git remote add origin git@github.com:username/framework_repo
  3. 拉取远程框架的新副本git pull origin master
  4. 对站点文件进行更改并将它们提交回远程仓库git push origin master
  5. 将这些更改下拉到其他站点
  6. 重复步骤 4 和 5

没关系,但是:

  • 像 config.php 和 database.php 这样的文件不应该被提交回远程仓库,因为它们对于每个站点都是唯一的。
  • 但是,我希望它们存在于远程存储库中,因此在第一次拉取请求时,默认文件将下载到我的本地目录。
  • 此外,如果我从远程仓库再次拉取以更新框架,我不希望这些文件被覆盖

实现这一目标的最佳方法是什么?一些 .gitignore 巫毒?我已经使用 .gitignore 来忽略文件,但在这种情况下,它略有不同,因为我只想在第一个请求时提取文件。

我希望这是有道理的。

4

3 回答 3

5
  • 像 config.php 和 database.php 这样的文件不应该被提交回远程仓库,因为它们对于每个站点都是唯一的。

将所有不应该在 repo 中的.gitignore文件放到文件中。这几乎不是任何巫术,它只是一个应该被忽略的文件列表。

  • 但是,我希望它们存在于远程存储库中,因此在第一次拉取请求时,默认文件将下载到我的本地目录。

创建虚拟文件config.default.php,并在第一次拉到被忽略的名称后复制它们。

  • 此外,如果我从远程仓库再次拉取以更新框架,我不希望这些文件被覆盖

完成第一步!

于 2010-06-25T12:41:15.297 回答
2
  1. 添加config.php到您的.gitignore.
  2. 创建要使用的默认/分发/基本配置,config.php-dist
  3. 创建一个 Git 挂钩,post-receive如下所示。
  4. 钩子将在每个 之后执行,但只有在不存在git pull时才会执行复制。config.php

post-receive示例(根据您的需要定制):

#!/bin/bash
[ -f 'config.php' ] || cp config.php-dist config.php
于 2010-06-25T12:52:51.293 回答
0

我认为您想要的是每个自定义站点的多个分支和公共文件的额外上游分支。每个分支所在的位置(或者如果你有它的多个副本)并没有太大的区别。

当您对公用文件进行更改时,您可以直接在公用分支上进行更改,也可以在其中一个自定义分支上创建签入,然后将其挑选到公用分支上。您不想将更改推送到公共分支,因为这将需要定制以及修复。从公共分支拉到自定义分支是安全的,因为您所做的任何更改都将被合并。

于 2010-06-25T12:42:27.863 回答