首页 > 解决方案 > .gitignore 在我更改文件后不会忽略我的文件

问题描述

我有一堆不应该受版本控制的文件。但是,如果我不将它们置于版本控制之下,那么我的构建就会失败。由于这些文件包含键/值内容,我添加了这些文件,但用假值替换了实际值。因此,我能够通过我的构建,而且我没有 VC 下的那些实际键/值。我将此更改提交给 VC。我还将这些文件的列表放在 .gitignore 文件下,如下所示:

/app/src/main/assets/*.json
/app/src/main/assets/*.kt

现在的问题是,为了测试我的更改,我需要将那些假文件/值替换为实际文件/值。但是,通过这样做,我在运行git status.

我清楚地添加了它们,.gitignore为什么我又在这里看到它们?这就是我所看到的:

hesam(dev)$ git status
On branch dev
Your branch is up to date with 'origin/dev'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   app/src/main/assets/EmergencyContacts.json
    modified:   app/src/main/assets/LocationOfSites.json
    modified:   app/src/main/assets/LocationOfHospitals.json
    modified:   app/src/main/assets/LocationOfOffices.json

标签: androidgitandroid-studiogitignore

解决方案


问题的根源在于当前跟踪的文件不能被忽略。

不幸的是,修复这个问题需要从索引/暂存区域中删除文件(以便它们变得未被跟踪),这反过来意味着 Git 将从工作树中删除文件。您可以使用 禁止立即删除此类文件git rm --cached,但将来,任何返回到包含文件的任何现有提交的人都会将文件放入他们的索引/暂存区域和他们的工作树中,然后从提交回当前提交(没有文件)意味着 Git 将删除文件。

也就是说,每当您git checkout提交包含文件时,它们都会进入您的索引/暂存区域(这是一件事的两个名称)和您的工作树(这是您可以查看和处理文件的地方) . 每当您从签出此类包含文件的提交转移到任何没有文件的提交时 Git 都会从索引和工作树中删除文件。因此,这些文件在任何历史提交中的存在都会有效地“毒害”存储库。

这个问题的唯一完整解决方案是永远不要首先提交文件。这要求您及时返回并阻止自己提交文件。该解决方案的近似值是重写提交历史记录,以便没有剩余的提交具有文件:消除所有确实具有文件的提交,也许插入没有文件的新的和改进的替换提交查看如何让 Git “忘记”一个被跟踪但现在位于 .gitignore 中的文件的众多答案中的一些?

此解决方案的缺点是您的提交中不能包含示例原型文件。这个缺点的解决方案是将示例原型文件放在您的提交中,但使用其他一些文件名

我有一堆不应该受版本控制的文件。但是,如果我不将它们置于版本控制之下,那么我的构建就会失败。由于这些文件包含键/值内容,我添加了这些文件,但用假值替换了实际值。

让您的构建过程使用备用(示例文件)文件而不是真实文件来进行测试构建。

该软件的用户将使用不受版本控制的真实文件。测试版本的用户将使用受版本控制的测试文件。


推荐阅读