[英]How can I have different versions of a file in the local working directory, remote working directory and git ftp target?
我正在使用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做的,但是我找到了一种更好的方法来设置CodeIgniter环境变量 。
首先,忽略机制对存储库中已被跟踪的文件没有任何影响。 因此,如果您希望.gitignore
正常工作,则必须从存储库中删除文件(就像使用git rm --cached
),但是正如您观察到的那样,当更新远程存储库时,它将被删除。 。
总而言之,在这种情况下,我认为您不应该.gitignore
文件。 关于git中被忽略文件的语义的微妙之处使我无数次-被忽略的文件被认为是一次性的 ,因为该机制是为构建产品而设计的。 您所拥有的是一个您要忽略的文件,但是它很宝贵,而git当前没有指定该文件的方法。
例如,在您的情况下,如果您手动重新创建index.php
,则看起来一切正常,但是如果您使用git checkout old-commit
移回到跟踪index.php
的旧版本,然后转到回到以前的位置,通过git checkout -
,您的index.php
将被删除!
我建议您更改index.php
以从其他一些文件中为环境变量获取正确的设置:
理想情况下,然后为该其他文件不存在时添加一个默认值。
这是一个古老的问题,但我也这样做,并且过去一直在努力。
发生的事情是,由于index.php最初不在您的.gitignore中,因此所有存储库都将跟踪index.php。
当您在开发站点上更新.gitignore并将其从存储库中删除时,其作用是将“已删除的index.php”传递给生产站点。 如果您的生产站点仍在ITS .gitignore上缺少index.php,它将按需“删除” index.php。
然后,您要做的是确保将index.php添加到每个存储库每个分支上的每个.gitignore中。 然后,您可以使用rm --cached,一切都会按预期进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.