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

Git 如何防止开发人员推送特定文件?,git,gitignore,Git,Gitignore,我有一个回购协议,供从事我的项目的开发人员使用。在这个repo中,有一个文件“.your_local_variable.php”,其中有一些路径必须由开发人员在开始处理项目之前填充,这些路径相对于他们的机器。我希望开发人员在他们的机器上第一次克隆repo时只拉一次这个文件的“模板”,但我希望阻止他们在合并请求时发送这个文件 我试图将它放在.gitignore中,并远程推送.gitignore,这样他们就可以检索它,但是“.your_local_variable.php”文件仍在命令“git st

我有一个回购协议,供从事我的项目的开发人员使用。在这个repo中,有一个文件“.your_local_variable.php”,其中有一些路径必须由开发人员在开始处理项目之前填充,这些路径相对于他们的机器。我希望开发人员在他们的机器上第一次克隆repo时只拉一次这个文件的“模板”,但我希望阻止他们在合并请求时发送这个文件

我试图将它放在.gitignore中,并远程推送.gitignore,这样他们就可以检索它,但是“.your_local_variable.php”文件仍在命令“git status”中显示为“更改未提交”


在远程repo上保留此文件的“模板版本”时,是否有任何方法防止推送此文件,并将其隐藏在git状态?

如果该文件已签入git,只需将其添加到.gitignore将无法解决问题

您需要使用
git rm
+将文件添加到
.gitignore
,从git中删除该文件,然后推送此提交-其中包含delete+ignore。每个人都需要拉这个改变,这样它就不会出现在你的git状态中

您还可以将模板版本保留在git上,只需告诉每个人将该文件复制并重命名为被忽略的文件即可。这是git上的外观:

  • 每个人的模板.file
    (签入git以便人们可以检索,任何人都不应更改此文件,除非您想更改模板)
  • 我的本地模板.file
    (将此文件添加到.gitignore中,每个人都应该复制模板并使用此名称编辑它)
  • .gitignore
    (其中包含
    我的本地模板.file

这通常是在版本控制之外进行的。您可以在自述文件中描述所需的文件(例如,提供扩展名为.txt的模板),并让开发人员手动添加。但是,它应该在.gitignore中。

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

假设您的文件名为
foo.bar
,您可以使用模板提交名为
foo.bar.example
的文件,然后在
.gitignore
文件中添加
foo.bar

要从repo中删除文件,只需运行
git rm--cached foo.bar
并提交即可

然后,您的合作者将本地环境中的
foo.bar.example
文件复制到新的
foo.bar
文件。

一次提交:

  • 删除该文件
  • 将其添加到.gitignore
  • 将文件的非工作版本添加到repo。例如:

    .your_local_变量.phpREMOVEME


然后,每个开发人员都有一个模板文件,在他们与模板文件交互之前不会导致任何问题。

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

<?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);
// .....

这样做的问题是,我猜:他们在第一次克隆repo时不会检索文件的初始模板。@JeremLachkar我为模板文件添加了一部分,所以在git中没有“只读”文件,您可以在本地拉取、更新,但无法推送?如果我的开发人员与git不太兼容,并且他们执行的是“git add.”,那么该命令是否会将gitignore中注册的文件添加到提交中?否,如果文件位于.gitignore中,并且已从源代码中删除,则在不先从.gitignore中删除它们的情况下,无法再次添加它们。