在我们的.gitignore文件中,我们有database.php
,因为它是一个db配置文件,需要特定于每个开发人员的本地安装。但是,每次我签出分支时,我都必须重新创建该文件。很糟糕。
如何添加文件以使其不会每次都消失,但也不会被跟踪?
答案 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