我的存储库中已有一个Visual Studio项目。我最近在我的项目下添加了一个.gitignore文件,我认为这告诉Git忽略该文件中列出的文件。
我的问题是所有这些文件已经被跟踪,据我所知,Git不会忽略在将规则添加到该文件之前已经被跟踪的文件而忽略它。
建议使用:git rm --cached
并手动取消跟踪它们,但这将使我永远无法一一遍解它们。
我考虑过删除存储库并再次重新创建它,但是这次存在.gitignore文件,但是必须有更好的方法来执行此操作。
我的存储库中已有一个Visual Studio项目。我最近在我的项目下添加了一个.gitignore文件,我认为这告诉Git忽略该文件中列出的文件。
我的问题是所有这些文件已经被跟踪,据我所知,Git不会忽略在将规则添加到该文件之前已经被跟踪的文件而忽略它。
建议使用:git rm --cached
并手动取消跟踪它们,但这将使我永远无法一一遍解它们。
我考虑过删除存储库并再次重新创建它,但是这次存在.gitignore文件,但是必须有更好的方法来执行此操作。
Answers:
这个答案解决了我的问题:
首先,提交所有未决的更改。
然后运行以下命令:
git rm -r --cached .
这将从索引中删除所有内容,然后运行:
git add .
提交:
git commit -m ".gitignore is now working"
git push origin
以反映远程存储库中的更改。
.gitignore is now working
消息。:)
创建一个.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
~$*
一旦有了这个,就需要像其他任何文件一样将其添加到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步不起作用,则应编写要添加的文件的孔路线。
如此处指定,您可以更新索引:
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"
这是一种“取消跟踪”在当前排除模式集下否则将被忽略的任何文件的方法:
(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-路径来恢复删除的索引条目)。然后进行新的提交,以排除“粗体”。
“粗体”仍将保留在任何旧提交中。如果您确实需要干净的历史记录,则可以使用git filter-branch生成旧提交的干净版本(使用git filter-branch的nb将“重写历史记录”,因此,如果您有任何合作者已经拉过,则不要轻易进行此操作。首次引入“粗体”后的任何历史承诺)。
从临时区域中删除文件
git reset HEAD .
添加所有更改
git add .
提交:
git commit -m ".gitignore is now working"
我认为这是将.gitignore文件添加到现有存储库的简便方法。
先决条件:
您需要浏览器才能访问您的github帐户。
脚步
玩得开心!
git rm --cached
整个目录-r
(如果有帮助的话)