Git:如何添加文件但不跟踪它

时间:2013-04-26 00:06:06

标签: git version-control gitignore

在我们的.gitignore文件中,我们有database.php,因为它是一个db配置文件,需要特定于每个开发人员的本地安装。但是,每次我签出分支时,我都必须重新创建该文件。很糟糕。

如何添加文件以使其不会每次都消失,但也不会被跟踪?

2 个答案:

答案 0 :(得分:9)

<强> [编辑] 标识的副本包含对此问题更强大的解决方案(git submodules)。这个答案是有效的,但经过进一步考虑之后,如果您希望团队在每个克隆中获得相同的行为,那么这是不合适的。 [结束编辑]

Git通过--assume-unchanged的{​​{1}}选项支持此功能。这将允许您提交database.php的生产版本,并让开发人员更新此文件的本地版本以指向其本地资源。

git update-index

当/如果您需要更改database.php的生产版本时:

git add database.php
git commit
git push
git update-index --assume-unchanged database.php

此外,每个开发人员都需要运行git update-index --no-assume-unchanged database.php git commit -a git update-index --assume-unchanged database.php ,因为此命令只影响本地存储库。

您需要通过其他一些机制确保git update-index --assume-unchanged database.php失败,开发人员在非生产机器上失败 - 不希望开发人员明显指向生产:)

请注意,您需要先从忽略列表中删除database.php文件,然后才能添加它。

答案 1 :(得分:5)

在版本控制下将文件添加到存储库然后要求git不跟踪对文件的任何更改是一个非常糟糕的主意。在版本控制下添加的文件应进行版本控制和跟踪,如果您不想跟踪文件的任何更改,则拇指规则不要首先添加它

同意人们有自己的偏好,git也在某种程度上支持这些工作流程,但你很少会看到人们使用它,而是倾向于使用更清洁,更直接的解决方案。事实上,OP正在请求的用例(在版本控制下添加文件并使git停止跟踪文件的任何更改,并使所有未来的克隆/提取/拉动成为可能),在{{ 1}}。

git用于排除意外进入版本控制的文件,也用于在.gitignore等命令中未列出对其进行任何更改的git。但是如果一个文件已经存在于版本控制之下,那么git并不关心该文件是否属于git status并且开始跟踪对它的更改。

相反,我建议您添加一个名为.gitignore的模板文件,并让每个用户创建一份database-template.php的副本,并将其更改输入其中。你也可以写一个简单的脚本来做到这一点。

除此之外,将database.php添加到database.php,您就可以开始使用,这样用户的本地副本就无法进入版本控制。

替代解决方案: 还有另外一种方法可以做到这一点,但每个开发人员都应该使用本地回购,这对IMO来说真的是一个糟糕的方法:

.gitignore
相关问题