我正在使用Git来管理CodeIgniter项目。我在我的本地机器上工作并推送到远程服务器,在那里我测试所有东西。然后我使用git ftp push
更新另一台主机上的生产站点。
现在,为了完成这项工作,我需要三个不同的index.php文件,每个环境一个,我只需设置一个不同的环境变量。
所以我需要gitignore index.php文件,甚至git-ftp-ignore它。对于ftp它正在工作。对于普通的gitignore,它不是:它不断更新远程服务器上的index.php文件。
我尝试了git rm --cached index.php
,但我得到的是它完全删除了远程服务器上的index.php文件。
我做错了什么?
编辑:看来这不是我可以用git做的事情,而是I've found a better way to set the CodeIgniter environment variable。
答案 0 :(得分:3)
首先,忽略机制对已在存储库中跟踪的文件没有任何影响。因此,如果您希望.gitignore
起作用,则必须从存储库中删除该文件(正如您所做的那样,使用git rm --cached
)但是,正如您所观察到的那样,它会在您更新时被删除远程存储库。
总之,在这种情况下,我认为您不应该.gitignore
该文件。关于git中被忽略文件的语义有一个微妙之处,它已经让我感到很多次 - 被忽略的文件被视为一次性,因为该机制是为构建产品而设计的。你在这里有一个你想要被忽略的文件,但它很珍贵,git目前没有办法指定它。
例如,在您的情况下,如果您手动重新创建index.php
,那么一切正常,但是如果您使用git checkout old-commit
移回index.php
的旧版本}被跟踪,然后返回到之前的位置git checkout -
,index.php
将被删除!
我建议您更改index.php
以从其他文件中获取环境变量的正确设置:
理想情况下,还要为其他文件不存在时添加默认值。
答案 1 :(得分:0)
这是一个古老的问题,但我也是这样做的,过去也一直在努力。
发生的事情是,由于index.php最初并不在您的.gitignore中,因此所有存储库都会跟踪index.php。
当您更新开发站点上的.gitignore并将其从存储库中删除时,它所做的就是将“deleted index.php”传递给您的生产站点。如果您的生产站点仍然缺少ITS .gitignore上的index.php,那么它将“删除”index.php。
您需要做的是确保将index.php添加到每个存储库的每个分支上的每个.gitignore。那么你可以使用rm --cached,一切都会按预期工作。