将文件保存在Git仓库中,但不跟踪更改

时间:2012-03-20 21:04:46

标签: git

我在CodeIgniter网站上有几个文件,我希望在回购邮件中有这些文件但不跟踪任何更改。

例如,我将此框架的新安装部署到新客户端,我希望下载以下文件(它们具有默认值CHANGEME),我只需要对此客户端进行特定更改(数据库凭据,电子邮件)地址信息,自定义CSS)。

// the production config files i want the files but they need to be updated to specific client needs
application/config/production/config.php
application/config/production/database.php
application/config/production/tank_auth.php
// index page, defines the environment (production|development)
/index.php
// all of the css/js cache (keep the folder but not the contents)
/assets/cache/*
// production user based styling (color, fonts etc) needs to be updated specific to client needs
/assets/frontend/css/user/frontend-user.css

目前如果我跑

git clone git@github.com:user123/myRepo.git httpdocs

然后编辑上面的文件,一切都很棒。在我发布修补程序或修补程序并运行git pull之前。然后我的所有更改都会被覆盖。

6 个答案:

答案 0 :(得分:527)

git有一个不同的解决方案来做到这一点。首先更改您不想跟踪的文件,然后使用以下命令:

git update-index --assume-unchanged FILE_NAME

如果您想再次跟踪更改,请使用以下命令:

git update-index --no-assume-unchanged FILE_NAME

git-update-index documentation

答案 1 :(得分:54)

对于我的Code Igniter项目,我在回购邮件中保留 database.php.example config.php.example

然后我将 config.php applications / config / database.php 添加到 .gitignore 文件中。

所以,最后,当我部署时,我可以复制.example文件(到config.php和database.php),自定义它们,它们不会被GIT跟踪。

答案 2 :(得分:42)

从另一个答案的评论中提取答案:

$ git update-index --skip-worktree FILENAME

似乎是比--assume-unchanged

更好的选择

有关详细信息,请参阅此处:Git - Difference Between 'assume-unchanged' and 'skip-worktree'

答案 3 :(得分:2)

我会将它们放在您的.gitignore文件中,并根据需要手动复制它们。

因此骨架文件名将在git中,忽略文件名不在git中(但在.gitignore中)。这样,当手动步骤将它们从'模板'(比名称更好的名称)复制到'实际'时,它们会立即被忽略。

答案 4 :(得分:2)

从git版本2.25.1开始,推荐的方法是跟踪存储库中文件的模板,将它们复制到新文件中并在本地进行修改(忽略.gitignore中的新文件名)({{ 3}}):

用户经常尝试使用假设不变和跳过工作树位来 告诉Git忽略对跟踪文件的更改。这不 由于Git仍可以根据其检查工作树文件,因此可以按预期工作 执行某些操作时的索引。通常,Git不会 提供一种忽略跟踪文件更改的方法,因此可以选择 建议解决方案。

例如,如果您要更改的文件是某种配置 文件,存储库可以包含一个示例配置文件,然后可以 复制到忽略的名称并进行修改。仓库甚至可以 包括将示例文件视为模板的脚本,然后进行修改和 自动复制。

答案 5 :(得分:0)

给出的答案仅部分解决了问题,但引入了更多问题。

我需要保留“ Web.Local.config”文件。 对我有用的唯一解决方案是:

1。从项目中排除文件

2。创建文件的单独副本为Web.LocalTemplate.config

现在,Git会跟踪“ Web.LocalTemplate.config”,所有开发人员都可以将其用作起点。但是,“ Web.Local.config”(不是项目的一部分)将被自动忽略。