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

eme*_*his 3 git version-control gitignore

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

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

mou*_*nds 9

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

Git支持这个--assume-unchanged选项git update-index.这将允许您提交database.php的生产版本,并让开发人员更新此文件的本地版本以指向其本地资源.

git add database.php
git commit
git push
git update-index --assume-unchanged database.php
Run Code Online (Sandbox Code Playgroud)

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

git update-index --no-assume-unchanged database.php
git commit -a
git update-index --assume-unchanged database.php
Run Code Online (Sandbox Code Playgroud)

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

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

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


Tux*_*ude 5

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

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

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

相反,我建议你添加一个名为的模板文件database-template.php,让每个用户创建一个副本,database.php然后输入他/她的更改.你也可以写一个简单的脚本来做到这一点.

除此之外,添加database.php到您的.gitignore,你很高兴,以便用户的本地副本不会进入版本控制.

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

# Ask git to stop tracking any changes to database.php
git update-index --assume-unchanged database.php

# If you want to start tracking changes again to database.php
git update-index --no-assume-unchanged database.php
Run Code Online (Sandbox Code Playgroud)