如何防止开发人员推送特定文件?

时间:2019-05-14 12:45:24

标签: git gitignore

我有一个仓库,供从事我的项目的开发人员使用。在此存储库中,有一个文件“ .your_local_variable.php”,在该文件中,开发人员必须在开始进行项目之前填充相对于其计算机的路径。我希望开发人员在首次在其计算机上克隆存储库时仅拉出此文件的“模板”一次,但是我想防止他们在合并请求中发送此文件。

我试图将其放在.gitignore中,并远程推送.gitignore,以便他们可以检索它,但是文件“ .your_local_variable.php”仍显示在命令“ git status”上,因为“未暂存更改承诺”。

有什么方法可以防止推送此文件并将其从git状态隐藏,同时在远程存储库中保留此文件的“模板版本”?

5 个答案:

答案 0 :(得分:3)

如果文件已被检入git,仅将其添加到.gitignore并不能解决问题。

您将需要使用git rm从git中删除文件+将文件添加到.gitignore,然后推送此提交-其中包含delete +忽略。每个人都需要拉出此更改,以便它不再以您的git状态显示。

您还可以将模板版本保留在git上,并告诉所有人将文件复制并重命名为被忽略的文件。这就是它在git上的样子:

  • template-for-everyone.file(已登录git,以便人们可以检索,除非您要更改模板,否则任何人都不能更改此文件)
  • my-local-template.file(将此文件添加到.gitignore中,每个人都应复制模板并使用该名称进行编辑)
  • .gitignore(其中包含my-local-template.file

答案 1 :(得分:2)

我认为最常见的解决方案是创建一个模板文件,提交并忽略实际文件。

假设您的文件名为({a: b = def}) => {},可以使用模板提交名为foo.bar的文件,然后在foo.bar.example文件中添加.gitignore

要从存储库中删除文件,只需运行foo.bar并提交即可。

然后,您的协作者会将其本地环境中的git rm --cached foo.bar文件复制到新的foo.bar.example文件中。

答案 2 :(得分:2)

另一种解决方案是文件从环境变量中选择值,有时使用默认值:

<?php
// This variable represents the path for blablabla
$somePath = getenv("PROJECT_SOME_PATH");
// This variable represents the time to wait before contacting the customer (in hours)
$timeToAnswer = getenv("PROJECT_TIME_TO_ANSWER", 42);
// .....

通过这种方式,开发人员可以在环境,容器或其他环境中定义自己的值,而无需触摸文件(此处将作为参考)。

第一步是首先使用环境变量更新文件,将其推送并与其他开发人员进行沟通,以建立环境。

答案 3 :(得分:1)

通常将其移交给版本控制之外。您将在自述文件中描述所需的文件(例如,提供扩展名为.txt的模板),然后让开发人员手动添加它。但是,它应该在.gitignore中。

答案 4 :(得分:1)

一次提交:

  • 删除文件。
  • 将其添加到.gitignore。
  • 将文件的无效版本添加到存储库中。例如:

    .your_local_variable.phpREMOVEME

然后每个开发人员都有一个模板文件,除非他们与之交互,否则不会引起任何问题。