如何在第一次提交后保护git存储库中的文件不被提交?

时间:2013-06-06 01:47:14

标签: git

我的Java app classpath下有一个tracking.properties文件,它可以像“seq = 10”那样改变每个时刻到“seq = 17”。

现在将属性文件放入github存储库。我希望该文件存在于存储库中,以便其他开发人员可以克隆它,并且文件不会被它们推送,因为“seq”可以从用户更改为用户。

我试过

git rm --cached -f <file>

然后将tracking.properties添加到.gitignore,但这会导致删除git存储库中的属性文件。它应该保留在那里,只允许ONCE-FOR-ALL提交。有可能吗?

2 个答案:

答案 0 :(得分:4)

如果每个开发人员在克隆repo后运行此命令

git update-index --skip-worktree tracking.properties

然后git会在将文件视为本地未更改之后永远存在,即使它已经存在。

如果您确实需要对其进行本地更改,则可以将其恢复为正常状态

git update-index --no-skip-worktree tracking.properties

另一种选择是

git update-index --assume-unchanged tracking.properties

Here is a good explanation of the subtle differences between skip-worktree and assume-unchanged。我认为skip-worktree对你来说更好,因为它会忽略reset --hard并在上游版本发生变化时保留标志。

答案 1 :(得分:3)

考虑使用“模板”模式。

将文件检入tracking.properties.template,然后将tracking.properties添加到.gitignore。然后,在签出存储库之后,开发人员应该将模板文件复制到tracking.properties,然后根据需要进行编辑。此文件将被忽略,因此该文件不会显示为脏,开发人员不太可能对其进行更改。

这不会阻止模板文件的更改,但这可能是一件好事 - 您可能需要在将来对其进行更改。重要的是,tracking.properties的仅限本地更改可能没有太多混淆。