如何configurationgit忽略本地的一些文件?
我可以在本地忽略文件,而不会污染其他人的全局gitconfiguration吗? 我有没有跟踪的文件是我的git状态的垃圾邮件,但我不想提交git config更改每个小的随机untracked文件,我在我的本地分支。
从相关的Git文档 :
特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储在存储库内但是特定于一个用户的工作stream的辅助文件)应该进入
$GIT_DIR/info/exclude
文件。
.git/info/exclude
文件具有与任何.gitignore
文件相同的格式。 另一个选项是将core.excludesFile
设置为包含全局模式的文件的名称。
请注意,如果您已经有非稳定的更改,则必须在编辑忽略模式后运行以下命令:
git update-index --assume-unchanged [<file>...]
关于$GIT_DIR
注意事项 :这是一个在git手册中使用的表示法,只是表示git仓库的path。 如果设置了环境variables,那么它将覆盖你所在的任何回购的位置,这可能不是你想要的。
更新 :考虑使用git update-index --skip-worktree [<file>...]
来代替,谢谢@danShumway! 见Borealid对这两种select的区别的解释 。
老答案:
如果您需要忽略对跟踪文件的本地更改(我们通过本地修改configuration文件),请使用git update-index --assume-unchanged [<file>...]
。
将以下行添加到.gitconfig文件的[别名]部分
ignore = update-index --assume-unchanged unignore = update-index --no-assume-unchanged ignored = !git ls-files -v | grep "^[[:lower:]]"
现在你可以使用git ignore my_file
来忽略对本地文件的更改,并且git unignore my_file
来停止忽略更改。 git ignored
列出了被忽略的文件。
这个答案是从http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html收集的。;
你有几个select:
- 在工作目录中保留一个肮脏的(或未提交的)
.gitignore
文件(或使用topgit或其他类似的补丁工具自动应用它)。 - 把排除在你的
$GIT_DIR/info/exclude
文件中,如果这是特定于一棵树的话。 - 运行
git config --global core.excludesfile ~/.gitignore
并添加模式到你的~/.gitignore
。 如果您想要忽略所有树中的某些模式,则此选项适用。 例如,我使用.pyc
和.pyo
文件。
此外,确保您使用的是模式,并且在适用的情况下不明确列举文件。
我想你正在寻找:
git update-index --skip-worktree FILENAME
忽略当地所做的更改
这里的http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/关于这些解决scheme的更多解释!;
你可以安装一些git别名来简化这个过程。 这会编辑.gitconfig
文件的[alias]
节点。
git config --global alias.ignore 'update-index --skip-worktree' git config --global alias.unignore 'update-index --no-skip-worktree' git config --global alias.ignored '!git ls-files -v | grep "^S"'
为您安装的快捷方式如下所示:
-
git ignore config.xml
- git会假装它没有在
config.xml
看到任何更改 – 防止您意外地提交这些更改。
- git会假装它没有在
-
git unignore config.xml
- git会继续确认您对
config.xml
的更改 – 允许您再次提交这些更改。
- git会继续确认您对
-
git ignored
- git将以上述方式列出您“忽略”的所有文件。
我通过参考phatmann的答案来build立这些答案 – 这个答案提供了一个相同的--assume-unchanged
版本。
我提供的版本使用--skip-worktree
忽略本地更改。 请参阅Borealid的答案以全面解释差异,但本质上--skip-worktree
的目的是让开发人员更改文件,而无需承担更改的风险 。
这里提供的git ignored
命令使用git ls-files -v
,并过滤列表以显示以S
标记开头的条目。 S
标签表示状态为“跳过工作树”的文件。 有关git ls-files
显示的文件状态的完整列表:请参阅git ls-files
上-t
选项git ls-files
。
您只需将.gitignore文件添加到您的主目录; 即$HOME/.gitignore
或~/.gitignore
。 然后告诉git使用该文件的命令:
git config --global core.excludesfile ~/.gitignore
这是一个正常的.gitignore文件,当决定要忽略什么的时候,它会被git引用。 由于它在你的主目录,它只适用于你,不会污染任何项目.gitignore文件。
多年来我一直在使用这种方法,并取得了很好的成果。
如果您的repo还没有.gitignore文件,那么一个简单的解决scheme是创build.gitignore文件,并在其中添加.gitignore
到要忽略的文件列表。