Applying .gitignore to committed files
我已经提交了很多我现在想忽略的文件。我如何才能告诉Git现在忽略将来提交的这些文件?
编辑:我也要从存储库中删除它们。它们是在构建之后创建的文件,或者是为特定于用户的工具支持而创建的文件。
- 不忽略的.gitignore文件可能重复
- @Wooble的答案可能是相似的,但这个问题准确地描述了我所面临和需要解决的问题。
- 这是直接解决标题问题的答案,对您的git repo进行了最小的更改:stackoverflow.com/a/26245961/3543437
编辑.gitignore以匹配忽略的文件后,可以执行git ls-files -ci --exclude-standard以查看排除列表中包含的文件;然后可以执行git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached以将它们从存储库中删除(而不从磁盘中删除)。
编辑:您也可以将此作为别名添加到.gitconfig文件中,以便您可以随时运行它。只需在[别名]部分下添加以下行:
1
| apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached |
(xargs中的-r标志防止git rm在空结果上运行并打印出其使用消息,但只能由gnu findutils支持。其他版本的xargs可能有,也可能没有类似的选择。)
现在你只需在回购中键入git apply-gitignore,它就可以为你完成工作了!
- 通常情况下,你不需要重新选择一个"被接受"的答案。不幸的是,我在这里见过很多。最好的办法是滚动到底部,阅读所有答案,然后只使用其中的一个(上票并不总是得到最好的答案,顺便说一句,我也找到了负票的gems,但是在这种情况下,显然不是这样),但无论如何,优秀的答案,这是,我会接受这是真正的答案。
- 对我有用的是更改~/.gitconfig apply-gitignore= !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached ,这是基于@felipe sabino响应,但没有引用,使用!git提示。我使用的是Git版本1.8.5.2(Apple Git-48)
- "简单"?真的?吉特的世界是个奇怪的地方…
- @这是当你必须深入到管道系统而不是仅仅使用瓷质命令时会发生的事情。
- 对于Mac用户,-r是默认的,不被BSD版本接受。所以取下-r。
- 注意:这会将"删除那些文件"添加到您的Git中。由于"--cached"参数,您将保留本地文件,但是如果必须在删除之前返回到历史记录中,Git将查找"删除那些文件"并将其从本地文件夹中删除。所以你应该小心。
- 我已经完成了这两个步骤,但从提交中删除了要忽略的文件,所有这些文件都以sourcetree中的"分段文件"区域结束。
- 嗨,git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached命令导致xargs: cannot fork在我(在Windows上)上。我能用这个做什么?
- 是否可以从以前的所有提交中删除这些文件?
- 我觉得Mac的xargs没有-r…或者我的车是旧的,我不知道…为什么在Git之前是!?好。。。我的一个叫alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"。TKS!
- 在Windows for /F"tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached"%a"上
- 另一颗宝石
- 这只是删除了我的.gitignore文件,而不是我要忽略的.gitignore文件中列出的文件-这是重点吗?
- @hippyjim如果文件已经提交(即使它们列在.gitignore中),并且.gitignore还没有提交,那么这将是预期的结果,否则,我不确定在您的情况下会发生什么。
- 但这不是一个坏主意吗,因为Git-RM会在拉取时从其他地方删除文件,即使您使用缓存来避免在本地删除这些文件?
- 工作完美。非常感谢!
- 我用git 1.9.2得到了一个错误xargs: git : Bad file number。使用sourcetree的嵌入式git很好,不知道为什么。
- 这就是答案。我还添加了一个"git-add.gitignore"来保存该文件,这样其他人就不会添加任何内容。好一个!
- @Felipesabino FWIW,在约塞米蒂对我来说很好。
- 谢谢!这太好了。
编辑.gitignore以匹配要忽略的文件
git rm --cached /path/to/file
参见:
- 如何在不从磁盘删除文件的情况下对其进行Git-rm?
- 从Git存储库中删除文件,而不从本地文件系统中删除该文件
- 添加后忽略git repo中的目录
- 但是有很多文件。我不想为每个人都这么做
- 文件是否在任何公用目录中?如果不是的话,问题就变成了一个shell使用问题,而不是一个git问题。
- 需要有一个"我忘记添加我的.gitignore直到我的初始提交"模式。
- "我忘记添加我的.gitignore,直到我的初始提交之后",答案是这个帖子下面的帖子。它起作用了!
- 答案在这个下面。
- 它要求我添加flag-r来实现这一点。
- 另一种解决方法是:stackoverflow.com/questions/45608337/…
将文件保留在repo中,但忽略将来对其所做的更改:
1
| git update-index --assume-unchanged <file> |
要撤消此操作:
1
| git update-index --no-assume-unchanged <file> |
要找出已按此方式设置的文件:
1
| git ls-files -v|grep '^h' |
原始答案的学分http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/
- chronial为目录递归执行此操作提供了一个很好的答案:stackoverflow.com/a/16346756/1101076
- 我想提交一个IDE配置,但不跟踪不必要的更改。这是可行的,但我不确定它是否适用于签出存储库的其他人。如果有帮助的话,它可以与git ls-files -ci --exclude-standard -z | xargs -0 git update-index --assume-unchanged结合。
- 这是唯一一个完全符合标题问题要求的答案。很完美!这些答案中的大多数都是不必要地乱翻文件。
确保您的实际回购是最新版本
根据需要编辑EDOCX1[0]
git rm -r --cached .
git add .
然后像往常一样承诺
- 这应该是公认的答案,因为这个问题特别指出有很多文件需要删除。
- 请注意,如果您有一个大的存储库,第2步可能需要一段时间。
- 这个应该有一个默认的git命令
- 这只会导致从索引中删除所有文件!这救了我:git reset HEAD(记住藏起任何变化)
- 步骤2删除了所有内容,是的,但是步骤3应该将它们全部读取,除了那些由于.gitignore而失败的内容。
老问题,但我们中的一些人在EDOCX1(PowerShell)中。这就是解决方案:
1
| git ls-files -ci --exclude-standard | foreach { git rm --cached $_ } |
遵循以下步骤:
添加到gitignore文件的路径
运行此命令
1
| git rm -r --cached foldername |
像往常一样提交更改。