Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件保存在Git回购中,但不要';t跟踪变化_Git - Fatal编程技术网

将文件保存在Git回购中,但不要';t跟踪变化

将文件保存在Git回购中,但不要';t跟踪变化,git,Git,我在CodeIgniter站点中有几个文件,我希望在回购协议中有这些文件,但不跟踪任何更改 例如,我将这个框架的新安装部署到一个新的客户端,我希望下载以下文件(它们具有默认值CHANGEME),并且我只需要对此客户端进行特定的更改(数据库凭据、电子邮件地址信息、自定义CSS) 当前如果我运行 git clone git@github.com:user123/myRepo.git httpdocs 然后编辑上面的文件,一切都很好。直到我发布修补程序或补丁并运行git pull。我的所有更改都将被

我在CodeIgniter站点中有几个文件,我希望在回购协议中有这些文件,但不跟踪任何更改

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

当前如果我运行

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

然后编辑上面的文件,一切都很好。直到我发布修补程序或补丁并运行git pull。我的所有更改都将被覆盖

我会把它们放在你的
.gitignore
文件中,然后根据需要手动复制它们


因此,骨架文件名将使用git,忽略文件名将不使用git(而是使用.gitignore)。这样,当手动将它们从“模板”(可能比骨架更好的名称)复制到“实际”的步骤完成时,它们会立即被忽略。

对于我的代码点火器项目,我将database.php.exampleconfig.php.example保留在repo中

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


因此,最后,当我部署时,我可以复制.example文件(到config.php和database.php),对它们进行自定义,这样它们就不会被GIT跟踪。

GIT有一个不同的解决方案来实现这一点。首先更改不希望跟踪的文件,并使用以下命令:

git update-index --assume-unchanged FILE_NAME
git update-index --no-assume-unchanged FILE_NAME
如果要再次跟踪更改,请使用以下命令:

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

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

$git更新索引--跳过工作树文件名

似乎是比
更好的选择--假设未更改


这里可以阅读更多信息:

给出的答案只是部分解决了问题,但带来了更多的问题

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

1。从项目中排除该文件

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


既然Git跟踪了“Web.LocalTemplate.config”,所有开发人员都可以使用它作为起点。但是,不属于项目的“Web.Local.config”将被自动忽略。

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

用户通常尝试使用假定未更改并跳过工作树位以 告诉Git忽略对跟踪文件的更改。这是不可能的 按预期工作,因为Git可能仍然会根据 执行某些操作时的索引。一般来说,Git不会 提供一种忽略对跟踪文件所做更改的方法,以便 建议解决方案

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


没有办法先将它们添加到回购协议中,然后再将它们添加到。gitignore?如果有一个解决方案可以包含这些文件,但在某个提交或其他操作之后不包含任何更改,那就太好了。@mklauber我想无限期地保留它们,直到我运行
git rm
。其用途是IE:config.php文件。我想保留配置文件,但我显然不想在客户端之间跟踪数据库凭据,因为它们是不同的。是的,我的rails database.yml文件有问题。我们保留一个骨架,然后复制并更改它。如果我创建这些“骨架”配置文件,您会将它们添加到初始提交中吗。然后修改.gitignore以忽略该文件?实际上,将文件保留在repo中,但作为一个骨架?您有以下两个选项:通过
git Add file1
添加文件,然后编辑
.gitignore
文件。提交的文件将保留在那里,不会被更新。或者:您可以将文件添加到
.gitignore
,然后使用
git add--force file1
将文件强制添加。您可以在需要覆盖文件时使用第二个选项可能重复的可能重复的可能重复的可能重复的您可以忽略客户端凭据/配置文件,并让程序生成默认文件(如果在安装repo时丢失这些文件)?我照您说的做了,但git status一直告诉该文件是啊,这应该是“公认的答案”。对我来说很有效。正如Junio Hamano(Git的维护者)所说:“假设unchanged不应该被滥用为忽略机制。[…]GIT不是一个承诺,Git总是认为这些路径是未修改的。如果Git可以确定一个被标记为假定不变的路径已经改变而不产生额外的LSTAT(2)成本,它保留报告该路径已被修改的权利(因此,“Git提交-A”可以自由地提交该更改)。假设“未更改”只是针对本地性能问题。如果Git能够确定这些文件以更轻松的方式进行了更改,那么它将进行更改。读取相关信息时,我认为
--跳过工作树
选项比
--假设未更改--
--跳过工作树确实是更好的选项。更多信息:很好的解决方案,但我认为纳西尔汗的答案是最好的。这不是一个好的解决方案。如果你刷新你的git索引,你将在不打算的时候开始跟踪更改。请参阅@nasirkhans answer,了解正确的方法。我不同意前面的两条评论。这样,更新“默认”值就更容易了,而不必签出它们,并将本地配置复制到其他地方,只需将