【问题标题】:.gitignore doesn't ignore my files after I changed them.gitignore 在我更改文件后不会忽略我的文件
【发布时间】:2019-09-16 15:55:00
【问题描述】:

我有一堆不应该受版本控制的文件。但是,如果我不将它们置于版本控制之下,那么我的构建就会失败。由于这些文件包含键/值内容,我添加了这些文件,但用假值替换了实际值。因此,我能够通过我的构建,而且我没有 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

【问题讨论】:

  • .ignorefile 你的意思是.gitignore
  • changes not staged for commit 表示您的文件已被跟踪。跟踪的文件永远不会被忽略!只能忽略未跟踪的文件。
  • @Blackbelt,啊,是的。对不起,我错了。我更新了我的问题。
  • @torek,啊,我不知道。请把它写成答案,然后我很乐意接受。另外,如果您能告诉我在这种情况下我该怎么办,那就太好了?如果正在提交这些文件,我可以有一个提交失败的脚本吗?

标签: android git android-studio gitignore


【解决方案1】:

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

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

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

这个问题的唯一完整的解决方案是永远不要首先提交文件。这要求您及时返回并阻止自己提交文件。此解决方案的近似值是重写提交历史记录,以便没有剩余的提交具有文件:消除所有 确实 具有文件的提交,也许插入新的和改进的替换提交 没有文件。查看How to make Git "forget" about a file that was tracked but is now in .gitignore?的众多答案中的一些

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

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

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

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

【讨论】:

    【解决方案2】:

    您确定将 .gitignore 文件放在正确的目录中吗?您应该将 .gitignore 放在工作目录中,而不是放在 .git (repository) 目录中

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 2021-09-29
      • 2018-01-06
      • 2021-09-24
      • 1970-01-01
      • 2014-07-06
      • 2022-11-16
      • 1970-01-01
      相关资源
      最近更新 更多