强制Git忽略一个目录及其内部现有和未来的所有文件

6
所以,我是一个Git的新手,但由于我的rails应用程序通过Heroku部署,所以我在使用它。我的应用程序在每个用户注册时生成一个书签(只是一个js文件)。不幸的是,当我部署时,现场用户的所有书签都被我的开发环境上用户的书签覆盖了。我已经阅读了其他关于这种问题的问题,并且我知道我将不得不把书签文件夹添加到.gitignore文件中,以及一些关于rm --cache的内容(但我不确定我将不得不做什么)。我尝试过做这些事情,但我想知道问题是不是git正在忽略现有文件中的所有文件,但是在整个gitignore过程后不会忽略生成的文件。要么我只是做错了(这非常,非常可能)。
欢迎任何帮助。对不起,这与许多其他类似的问题是相同的。我尽了最大的努力进行研究。
谢谢。

.gitignore适用于不在存储库中的文件。对于已经在存储库中的文件,它不起作用。你的文件在存储库中吗? - Greg Hewgill
是的,它们是。这是一个Rails应用程序,它们位于公共文件夹中。 - Bon Champion
1
好的,我猜我不清楚为什么你在Git存储库中有开发用户数据。你考虑过将用户数据存储在存储库之外吗? - Greg Hewgill
4个回答

9

以下是一些简单的步骤:

  1. Create a file .gitignore in the root of your repository, with the following simple content:

    /path/to_your/folder
    
  2. Add the file to your repository:

    git add .gitignore
    
  3. Remove the folder from your repository (this won’t physically delete the folder):

    git rm --cached /path/to_your/folder
    
  4. Commit

    git commit
    

在此之后,应从您的存储库中删除该文件夹,并且 git 将忽略其中的后续更改。


比我的答案更好,而且更快 :) - Castilho
这个可以忽略文件夹,但现在当我用Heroku把网站发布时,它不是用开发版本覆盖书签文件夹,而是用空白覆盖书签文件夹,从而将其删除。 - Bon Champion
是的,被移除的文件夹现在不会被推送了(因为它在仓库中根本不存在)。你可能需要考虑其他解决方案,比如有一个用户特定的文件夹和一个“默认”文件夹,你可以把开发相关的文件放在其中,并修改你的应用程序只使用那些默认文件,如果另一个文件夹不存在的话。或者更好的办法是:将这些东西存储在源代码之外的地方,比如数据库中。 - poke

1

@poke的回答大部分正确,但路径名中的前导斜杠有问题,所以我发表修订后的说明。

以下步骤假设您的git存储库中的子目录名为foo

确保你在Git工作目录的顶层:
``` cd "$(git rev-parse --show-toplevel)" ```
将 `foo` 添加到你的顶层 `.gitignore` 文件中:
``` echo /foo/ >> .gitignore ```
前导斜杠表示在顶层忽略 `foo`,但不忽略 `*/foo` 或 `*/*/foo` 等。尾随斜杠表示如果 `foo` 是一个文件夹,则忽略它,但如果是文件或符号链接则不忽略。
暂存新修改的 `.gitignore`:
``` git add .gitignore ```
提交:
``` git commit -m "Add foo to .gitignore" ```
停止在Git仓库中跟踪 `foo` 目录的内容:
``` git rm -r --cached foo ```
`--cached` 选项告诉 Git 不要从你的工作目录中删除 `foo` 文件夹。
提交:
``` git commit -m "Remove the foo directory" ```

这个方法可以忽略该文件夹,但是当我使用Heroku将网站推送到线上时,它不会用开发版本覆盖书签文件夹,而是用空文件夹覆盖书签文件夹,从而删除了它们。 - Bon Champion
@BonChampion:请查看我的另一个答案。 - Richard Hansen

1
听起来像是Heroku在部署时清理了所有未提交到Git仓库的文件。修改你的应用程序,将书签保存到Git仓库之外的目录中。

0
请将以下内容添加到您的 .gitignore 文件中:
path/to/ignore/**/*

如果在该路径上已经有被跟踪的文件,它们将不会被忽略。
您需要运行。
git rm -r --cached path/to/ignore/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接