将git .gitignore规则应用于现有存储库

Sma*_*soe 47 git

我开始使用带有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
Run Code Online (Sandbox Code Playgroud)

我的.gitattributes文件是:

*.pbxproj -crlf -diff -merge
Run Code Online (Sandbox Code Playgroud)

谢谢!

Chr*_*sen 64

以下是一种"解锁"当前排除模式集下将被忽略的文件的方法:

(GIT_INDEX_FILE=some-non-existent-file \
 git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Run Code Online (Sandbox Code Playgroud)

这会将文件保留在工作目录中,但会将其从索引中删除.

这里使用的技巧是为git ls-files提供一个不存在的索引文件,以便它认为没有跟踪文件.上面的shell代码询问如果索引为空将被忽略的所有文件,然后使用git rm将它们从实际索引中删除.

文件"未跟踪"后,使用git status验证没有删除任何重要内容(如果是这样,请调整排除模式并使用git reset -- path恢复删除的索引条目).然后做一个新的提交,省去"crud".

"crud"仍然会出现在任何旧的提交中.如果你真的需要一个干净的历史记录,你可以使用git filter-branch来生成旧提交的干净版本(使用git filter-branch的 nb 将"重写历史记录",所以如果你有任何合作者已经拉过它,就不应该轻易做到这一点"crud" 首次推出后的任何历史提交.

  • Win民间怎么样? (2认同)

Nea*_*l L 37

使用git rm --cached文件和文件git rm -r --cachedbuild/目录

  • 虽然这是*准确的*,但我从谷歌来到并发现*无用的*答案,因为这是如何一次一个文件.更有帮助和更有效率的是像Chris Johnsen这样的答案,告诉你如何在一步中杀死所有应该被忽略的文件. (24认同)
  • 这是一个更好的答案:http://stackoverflow.com/a/1139797/743957 (4认同)

Sve*_*cke 10

如果您已经在跟踪要忽略的文件,则必须将其删除

git rm --cached <file>
Run Code Online (Sandbox Code Playgroud)

Git不会忽略已经跟踪过的文件(即你用git add添加它们).