Apply .gitignore on an existing repository already tracking large number of files
我的存储库中有一个现有的Visual Studio项目。 我最近在我的项目下添加了一个.gitignore文件,我假设它告诉Git忽略文件中列出的文件。
我的问题是所有这些文件都已被跟踪,据我所知,Git不会忽略在将规则添加到此文件之前已被跟踪的文件以忽略它。
建议使用:
我想删除存储库并重新创建它,但这次使用.gitignore文件,但必须有更好的方法来执行此操作。
这个答案解决了我的问题:
首先,提交所有挂起的更改。
然后运行以下命令:
1 | git rm -r --cached . |
这将删除索引中的所有内容,然后运行:
1 | git add . |
承诺:
1 | git commit -m".gitignore is now working" |
创建.gitignore文件,这样做,您只需创建任何空白的.txt文件。
然后你必须在cmd上写下以下行来改变它的名字(其中
然后,您可以打开文件并编写要忽略的所有未跟踪文件。例如,我的样子如下:
```
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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 ~$* |
GitHub有一整套有用的.gitignore文件
一旦你有了这个,你需要像任何其他文件一样将它添加到你的git存储库,只需它必须在存储库的根目录中。
然后在您的终端中,您必须写下以下行:
git config --global core.excludesfile~ / .gitignore_global
来自官方文件:
You can also create a global .gitignore file, which is a list of rules
for ignoring files in every Git repository on your computer. For
example, you might create the file at ~/.gitignore_global and add some
rules to it.Open Terminal. Run the following command in your terminal: git config
--global core.excludesfile ~/.gitignore_global
如果存储库已经存在,那么您必须运行以下命令:
1 2 3 | git rm -r --cached . git add . git commit -m".gitignore is now working" |
如果步骤2不起作用,那么您应该编写要添加的文件的孔路径。
如此处指定您可以更新索引:
1 | git update-index --assume-unchanged /path/to/file |
通过执行此操作,文件将不会显示在
要再次开始跟踪文件,您可以运行:
1 | git update-index --no-assume-unchanged /path/to/file |
如果您添加
首先,要检查您实际跟踪的文件,可以运行:
假设您在
所以代替:
定位不需要的文件或目录更安全:
然后继续添加所有更改,
并承诺......
<5233>
参考:https://amyetheredge.com/code/13.html
以下是一种"解锁"当前排除模式集下将被忽略的文件的方法:
1 2 3 | (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帐户。
脚步
玩得开心!
使用
获得有关此运行的帮助
1 | git clean -h |
如果你想先看看会发生什么,请确保将-n开关传递给干运行:
1 | git clean -xn |
删除gitingnored垃圾
1 | git clean -xdf |
小心:您可能会忽略像database.yml这样的本地配置文件,这些文件也会被删除。使用风险由您自己承担。
然后
1 2 3 | git add . git commit -m".gitignore is now working" git push |