我有一个仓库,供从事我的项目的开发人员使用。在此存储库中,有一个文件“ .your_local_variable.php”,在该文件中,开发人员必须在开始进行项目之前填充相对于其计算机的路径。我希望开发人员在首次在其计算机上克隆存储库时仅拉出此文件的“模板”一次,但是我想防止他们在合并请求中发送此文件。
我试图将其放在.gitignore中,并远程推送.gitignore,以便他们可以检索它,但是文件“ .your_local_variable.php”仍显示在命令“ git status”上,因为“未暂存更改承诺”。
有什么方法可以防止推送此文件并将其从git状态隐藏,同时在远程存储库中保留此文件的“模板版本”?
答案 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)
一次提交:
将文件的无效版本添加到存储库中。例如:
.your_local_variable.phpREMOVEME
然后每个开发人员都有一个模板文件,除非他们与之交互,否则不会引起任何问题。