我正在开发一个Drupal项目,该项目要求在名为settings.php
的文件中设置数据库配置。因为这个文件在本地变化,所以它通常不存储在git中。不幸的是,一位同事将其添加到存储库中。该文件已从repo中删除,文件已添加到gitignore。这些变化已经发生并已经被推向原点。此后还进行了许多其他提交,换句话说,从repo中删除文件的提交不是最近的提交。
我正在尝试将最新的repo更改部署到Web服务器。当我尝试将最新提交提取到服务器时,我收到权限错误,因为服务器上的settings.php
不可写。我想正在发生的事情是git试图回放提交的提交并且可能正在尝试删除settings.php
文件,这是不可能的,因为该文件是只读的。至少这是我的假设。
我是否可以在没有git尝试删除现有settings.php
文件的情况下提取最新提交内容?
我已阅读有关git rm --cached <file>
和git update-index --assume-unchanged <file>
命令的信息。但是,如果删除settings.php
文件的提交不是最近的提交,我们不清楚它们是否会起作用。
答案 0 :(得分:1)
您尝试的--cached
选项仅影响工作树/索引。换句话说,如果您没有提交文件而自己删除文件,它们将无法生效。因此,提交存在的事实意味着这些操作不会做你想要他们做的事。
此时有两种选择:
使用&#39;互动式rebase&#39;返回删除settings.php
文件的提交,还原文件,然后提交修改/重写历史记录。这将是侵入性的,并且可能需要在项目(和服务器)上工作的所有其他人做一个rebase以使他们恢复正常。这将产生最清晰的历史,但要意识到需要付出一些努力才能实现。
从先前的提交中复制最后一个已知好的版本,然后将其重新提交到存储库中。这意味着历史上有一些提交被破坏但需要最少量的工作才能恢复,并且不会对其他开发人员或服务器产生负面影响。
(事实上你可以通过随后做一个互动的rebase从2到1,如果这是你想要的。)
您可以通过以下方式了解提交内容:
git log --summary -- settings.php
这将显示所有提交settings.php
(假设它位于存储库的根目录中)已更改。如果它更低,请使用path/to/settings.php
(其中path
位于git存储库的顶层)。
找到删除后的提交后,即可:
git show HASH~:settings.php
这将获取提交的父级( HASH~ ),然后显示给定路径(settings.php
)中文件的内容。如有必要,您需要使用回购根目录的完整路径(git show HASH~:path/to/settings.php
)。