将.gitignore应用于已提交的文件

时间:2011-09-23 11:02:15

标签: git

我已经提交了一些我现在想要忽略的文件。我如何告诉git现在忽略未来提交的这些文件?

编辑:我也想将它们从存储库中删除。它们是在构建之后创建的文件或用于特定于用户的工具支持。

6 个答案:

答案 0 :(得分:570)

在编辑.gitignore以匹配被忽略的文件后,您可以git ls-files -ci --exclude-standard查看排除列表中包含的文件;然后,您可以执行git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached将其从存储库中删除(不将其从磁盘中删除)。

编辑:您也可以在.gitconfig文件中将其添加为别名,以便随时随地运行。只需在[alias]部分下添加以下行:

apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

-r中的xargs标志阻止git rm在空结果上运行并打印出其使用消息,但只能由GNU findutils支持。其他版本的{{ 1}}可能有也可能没有类似选项。)

现在您只需在回购邮件中输入xargs即可,它将为您完成工作!

答案 1 :(得分:401)

答案 2 :(得分:117)

将文件保留在repo中但忽略对它的未来更改:

git update-index --assume-unchanged <file>

并撤消这个:

git update-index --no-assume-unchanged <file>

找出以这种方式设置的文件:

git ls-files -v|grep '^h'

归功于原来的答案 http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

答案 3 :(得分:67)

确保您的实际回购是最新版本

  1. 根据需要修改.gitignore
  2. git rm -r --cached .
  3. git add .
  4. 然后像往常一样提交

答案 4 :(得分:10)

老问题,但是我们中的一些人在git-posh(powershell)。这是解决方案:

git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }

答案 5 :(得分:0)

请按照以下步骤操作:

  1. 添加gitignore文件

  2. 的路径
  3. 运行此命令

    git rm -r --cached foldername
    
  4. 通常提交更改。