我开始使用带有xcode项目的git,并且最近发现我可以使用.gitignore和.gitattributes文件来忽略编译器和系统的噪音。 现在我已经有了.gitignore和.gitattributes文件了,我如何“应用”新的忽略规则并摆脱版本控制中的错误?
我的.gitignore文件是:
# xcode noise
*.modelv3
*.pbxuser
*.perspective
*.perspectivev3
*.pyc
*~.nib/
build/*
# Textmate - if you build your xcode projects with it
*.tm_build_errors
# old skool
.svn
# osx noise
.DS_Store
profile
我的.gitattributes文件是:
*.pbxproj -crlf -diff -merge
谢谢!
答案 0 :(得分:63)
这是一种“解锁”任何在当前排除模式下将被忽略的文件的方法:
(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”仍将在任何旧提交中。如果你确实需要一个干净的历史记录(nb使用 git filter-branch 将“重写历史记录”,你可以使用git filter-branch生成旧提交的干净版本,所以不应该轻易进行如果你有任何合作者在“crud”首次介绍之后撤消了你的任何历史提交。
答案 1 :(得分:37)
使用git rm --cached
表示文件,git rm -r --cached
表示build/
目录
答案 2 :(得分:10)
如果您已经在跟踪要忽略的文件,则必须使用
删除它们git rm --cached <file>
Git不会忽略已经跟踪过的文件(即你用git add添加它们)。
答案 3 :(得分:1)
mv the_file_i_want_to_ignore the_file_i_want_to_ignore.back
git rm the_file_i_want_to_ignore
mv the_file_i_want_to_ignore.back the_file_i_want_to_ignore
git status
git commit -m 'ignore a bunch of stuff i should have ignored before'
这是一个手动工作流程,但它是我过去如何做到的。
答案 4 :(得分:1)
如果您想完全删除文件,那么这里是handy reference from Github。
警告:
答案 5 :(得分:-1)
您不必“应用”更改。只需将.gitignore文件放在您的主目录中(如果您希望它是全局的)或在您的项目根目录中(如果您希望它仅对该项目唯一)。
编辑:我发现您可能遇到此问题,因为您已添加了您不想跟踪的文件。以下是gitignore手册页有关的内容:
请注意,所有gitignore文件实际上只涉及git尚未跟踪的文件;为了忽略已经跟踪的文件中未提交的更改,请参阅git update-index --assume-unchanged文档。