如何避免在git中覆盖文件

如何避免在git中覆盖文件,git,Git,我与同事分享了一些关于git的REPO,其中我需要一个仅用于本地开发的配置文件。我将默认配置文件推送到主机,然后将其添加到gitignore。之后,我将repo克隆到本地pc并修改配置文件以适应我的环境,但当我尝试提交更改时,git也会尝试提交配置上的更改,即使我已经将其添加到gitignore中。您可以使用跳过工作树标记按项完成此操作。下面是一个命令,它告诉Git不要识别对特定文件的更改: git update-index --skip-worktree <file> git更新

我与同事分享了一些关于git的REPO,其中我需要一个仅用于本地开发的配置文件。我将默认配置文件推送到主机,然后将其添加到gitignore。之后,我将repo克隆到本地pc并修改配置文件以适应我的环境,但当我尝试提交更改时,git也会尝试提交配置上的更改,即使我已经将其添加到gitignore中。

您可以使用
跳过工作树
标记按项完成此操作。下面是一个命令,它告诉Git不要识别对特定文件的更改:

git update-index --skip-worktree <file>
git更新索引--跳过工作树
(更新:我刚刚查看了@mkreiger1在评论中发布的链接。这向我指出,我最初的答案可能不太正确。它提到了使用
--assessment unchanged
标志。我意识到我的团队实际上查看了这两个选项,并拒绝使用这两个选项。该链接值得检查。)我的回答的目的是提供我的团队对此问题的看法,这可能会为您节省一些时间和精力。)

如果文件的基础远程版本经常更改,则此解决方案是一个难题。当文件在远程上更改时,您必须移动本地副本,然后更新本地repo,然后将您自己的文件版本合并回新的远程版本,然后(我相信)重新应用上述标志。原因是,上述标志不会更改从远程repo更新时的行为。如果对跟踪文件进行了未提交的更改,则无论是否设置了此标志,Git都会出错

在切换分支时,如果每个分支中的文件内容都不同,那么这个解决方案也会有问题,我认为这种情况几乎总是如此

我知道所有这些,因为我的团队最近遇到了这个问题。我们认为不值得尝试使用单个配置文件位置来执行此操作。相反,我们修改了代码以在多个位置查找配置文件。“开发人员位置”其中的个文件在逐文件的基础上胜出Git跟踪位置。我们最终定义了一个存在于开发人员主目录顶层的配置目录。首先查询此位置。如果要搜索的文件存在于此目录中,则使用该版本的文件,而不使用Git跟踪位置我一点也不喜欢那个文件


如果配置文件的远程版本很少更改,那么这可能是一个可行的解决方案。您可能希望开发人员知道何时会发生这种情况,并强制他们采取措施,以非常有意识的方式重新应用本地更改。在这种情况下,来自Git的错误消息是有建设性的。但是如果经常进行小的更改,则eveloper不一定需要知道,那么这个解决方案将带来更多的痛苦。

您可以使用
跳过工作树
标记来完成这项工作,每个项目都是如此。下面的命令告诉Git不要识别对特定文件的更改:

git update-index --skip-worktree <file>
git更新索引--跳过工作树
(更新:我刚刚查看了@mkreiger1在评论中发布的链接。这向我指出,我最初的答案可能不太正确。它提到了使用
--assessment unchanged
标志。我意识到我的团队实际上查看了这两个选项,并拒绝使用这两个选项。该链接值得检查。)我的回答的目的是提供我的团队对此问题的看法,这可能会为您节省一些时间和精力。)

如果文件的基础远程版本经常更改,则此解决方案是一个难题。当文件在远程上更改时,您必须移动本地副本,然后更新本地repo,然后将您自己的文件版本合并回新的远程版本,然后(我相信)重新应用上述标志。原因是,上述标志不会更改从远程repo更新时的行为。如果对跟踪文件进行了未提交的更改,则无论是否设置了此标志,Git都会出错

在切换分支时,如果每个分支中的文件内容都不同,那么这个解决方案也会有问题,我认为这种情况几乎总是如此

我知道所有这些,因为我的团队最近遇到了这个问题。我们认为不值得尝试使用单个配置文件位置来执行此操作。相反,我们修改了代码以在多个位置查找配置文件。“开发人员位置”其中的个文件在逐文件的基础上胜出Git跟踪位置。我们最终定义了一个存在于开发人员主目录顶层的配置目录。首先查询此位置。如果要搜索的文件存在于此目录中,则使用该版本的文件,而不使用Git跟踪位置我一点也不喜欢那个文件


如果配置文件的远程版本很少更改,那么这可能是一个可行的解决方案。您可能希望开发人员知道何时会发生这种情况,并强制他们采取措施,以非常有意识的方式重新应用本地更改。在这种情况下,来自Git的错误消息是有建设性的。但是如果经常进行小的更改,则eveloper不一定需要知道,那么此解决方案将带来更多的痛苦。

即使将文件添加到git ignore中,也会跟踪更改为跟踪文件的情况。您需要找到另一种方法来保留对配置文件的本地更改。另请参阅更改为跟踪文件的情况,即使文件将e添加到git ignore。您需要找到一种不同的方法来保留对配置文件的本地更改。另请参见另一个选项,即使用配置文件作为