使用Git管理框架,在第一次拉取后忽略对给定文件的更改

时间:2010-06-25 12:34:22

标签: git gitignore

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

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

我希望实现以下工作流程

  1. 创建新的网站目录git init以初始化空白的本地git repo
  2. 将其与远程框架仓库git remote add origin git@github.com:username/framework_repo
  3. 相关联
  4. 提取远程框架git pull origin master
  5. 的新副本
  6. 更改站点文件并将其提交回远程仓库git push origin master
  7. 将这些更改下拉到其他网站
  8. 重复步骤4& 5
  9. 多数好,但是:

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

    最好的方法是什么?一些.gitignore伏都教? 我已经使用.gitignore来忽略文件了,但在这种情况下它略有不同,因为我只想在第一次请求时提取文件。

    我希望这是有道理的。

3 个答案:

答案 0 :(得分:5)

  
      
  • 不应提交config.php和database.php等文件   回到原来的远程仓库   每个网站都独一无二。
  •   

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

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

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

  
      
  • 如果我从远程仓库执行另一次拉取更新,则更多   框架我不希望这些文件   被覆盖
  •   

完成第一步到步骤!

答案 1 :(得分:2)

  1. config.php添加到您的.gitignore
  2. 创建要使用的默认/分发/基本配置,config.php-dist
  3. 创建一个Git钩子post-receive,如下所示。
  4. 钩子将在每个git pull之后执行,但只有在config.php不存在时才会执行此复制。
  5. post-receive示例(根据您的需求定制):

    #!/bin/bash
    [ -f 'config.php' ] || cp config.php-dist config.php

答案 2 :(得分:0)

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

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