在已跟踪大量文件的现有存储库上应用gitignore
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在已跟踪大量文件的现有存储库上应用gitignore相关的知识,希望对你有一定的参考价值。
我的存储库中有一个现有的Visual Studio项目。我最近在我的项目下添加了一个.gitignore文件,我假设它告诉Git忽略文件中列出的文件。
我的问题是所有这些文件都已被跟踪,据我所知,Git不会忽略在将规则添加到此文件之前已被跟踪的文件以忽略它。
有人建议使用:git rm --cached
并手动取消跟踪它们,但这将永远让我一个接一个地浏览它们。
我想删除存储库并重新创建它,但这次使用.gitignore文件,但必须有更好的方法来执行此操作。
这answer解决了我的问题:
首先,提交所有挂起的更改。
然后运行以下命令:
git rm -r --cached .
这将删除索引中的所有内容,然后运行:
git add .
承诺:
git commit -m ".gitignore is now working"
推它:
git push origin master
- 创建.gitignore文件,这样做,您只需创建任何空白的.txt文件。
- 然后你必须改变它的名字在cmd上写下面一行(其中
git.txt
是你刚刚创建的文件的名称):rename git.txt .gitignore
- 然后,您可以打开文件并编写要忽略的所有未跟踪文件。例如,我的样子如下:
```
OS junk files
[Tt]humbs.db
*.DS_Store
#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad
#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*
#Project files
[Bb]uild/
#Subversion files
.svn
# Office Temp Files
~$*
有一个whole collection of useful .gitignore files by GitHub
- 一旦你有了这个,你需要像任何其他文件一样将它添加到你的git存储库,只需它必须在存储库的根目录中。
- 然后在您的终端中,您必须写下以下行: git config --global core.excludesfile~ / .gitignore_global
来自官方文件:
您还可以创建一个全局.gitignore文件,该文件是用于忽略计算机上每个Git存储库中的文件的规则列表。例如,您可以在〜/ .gitignore_global中创建文件并为其添加一些规则。
开放式终端。在终端中运行以下命令:git config --global core.excludesfile~ / .gitignore_global
如果存储库已存在,则必须运行以下命令:
git rm -r --cached .
git add .
git commit -m ".gitignore is now working"
如果步骤2不起作用,那么您应该编写要添加的文件的孔路径。
如指定here您可以更新索引:
git update-index --assume-unchanged /path/to/file
通过这样做,文件将不会显示在git status
或git diff
中。
要再次开始跟踪文件,您可以运行:
git update-index --no-assume-unchanged /path/to/file
如果你太迟添加你的.gitignore
,git将继续跟踪已经提交的文件,无论如何。要解决此问题,您始终可以删除不需要的文件的所有缓存实例。
首先,要检查您实际跟踪的文件,可以运行:
git ls-tree --name-only --full-tree -r HEAD
假设您在cache/
这样的目录中发现了不需要的文件,因此定位该目录而不是所有文件更安全。
所以代替:
git rm -r --cached .
定位不需要的文件或目录更安全:
git rm -r --cached cache/
然后继续添加所有更改,
git add .
并承诺......
git commit -m ".gitignore is now working"
参考:https://amyetheredge.com/code/13.html
以下是一种“解锁”当前排除模式集下将被忽略的文件的方法:
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
这会将文件保留在工作目录中,但会将其从索引中删除。
这里使用的技巧是为git ls-files提供一个不存在的索引文件,以便它认为没有跟踪文件。上面的shell代码询问如果索引为空将被忽略的所有文件,然后使用git rm将它们从实际索引中删除。
在文件“未跟踪”之后,使用git status验证没有删除任何重要内容(如果是这样,请调整排除模式并使用git reset - path来恢复已删除的索引条目)。然后做一个新的提交,省去“crud”。
“crud”仍然会出现在任何旧的提交中。如果你真的需要一个干净的历史记录,你可以使用git filter-branch来生成旧提交的干净版本(使用git filter-branch的nb将“重写历史记录”,所以如果你有任何合作者已经拉过它,就不应该轻易做到这一点“crud”首次推出后的任何历史提交。
我认为这是将.gitignore文件添加到现有存储库的简单方法。
先决条件:
您需要一个浏览器来访问您的github帐户。
脚步
- 在所需(现有)项目中创建一个新文件,并将其命名为.gitignore。一旦将文件命名为.gitignore,您将获得.gitignore模板的暗示性提示。使用这些模板或使用gitignore.io生成gitignore文件的内容。
- 提交更改。
- 现在克隆这个存储库。
玩得开心!
使用git clean
获得有关此运行的帮助
git clean -h
如果你想先看看会发生什么,请确保将-n开关传递给干运行:
git clean -xn
删除gitignored垃圾
git clean -xdf
小心:您可能会忽略像database.yml这样的本地配置文件,这些文件也会被删除。使用风险由您自己承担。
然后
git add .
git commit -m ".gitignore is now working"
git push
以上是关于在已跟踪大量文件的现有存储库上应用gitignore的主要内容,如果未能解决你的问题,请参考以下文章