繁体   English   中英

如何在本地工作目录,远程工作目录和git ftp目标中拥有不同版本的文件?

[英]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以从其他一些文件中为环境变量获取正确的设置:

  1. 仓库外
  2. 或位于存储库中,被忽略,并且位于存储库中从未跟踪过的路径

理想情况下,然后为该其他文件不存在时添加一个默认值。

这是一个古老的问题,但我也这样做,并且过去一直在努力。

发生的事情是,由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM