我可以忽略本地文件而不污染其他人的全局git配置吗?我的git状态中有未跟踪的文件是垃圾邮件,但我不想为我在本地分支中的每一个未跟踪的小文件提交git配置更改。
当前回答
从相关Git文档中:
特定于特定存储库但不需要与其他相关存储库共享的模式(例如,位于存储库内部但特定于一个用户工作流的辅助文件)应进入$GIT_DIR/info/exclude文件。
.git/info/exclude文件的格式与任何.gitignore文件的格式相同。另一个选项是将core.excludesFile设置为包含全局模式的文件的名称。
注意,如果您已经有未标记的更改,则必须在编辑忽略模式后运行以下命令:
git update-index --assume-unchanged <file-list>
关于$GIT_DIR的说明:这是整个GIT手册中使用的一种符号,只是为了指示GIT存储库的路径。如果设置了环境变量,那么它将覆盖您所在的任何存储库的位置,这可能不是您想要的。
编辑:另一种方法是使用:
git update-index --skip-worktree <file-list>
反转方式:
git update-index --no-skip-worktree <file-list>
其他回答
在项目存储库中,接受的答案对我来说很有用。git在排除文件中添加了以下内容:
wp内容/插件
wp内容/上传
这是一个简单的单行解决方案,用于排除本地文件。
echo YOUR_FILE_OR_DIRECTORY >> .git/info/exclude
将以下行添加到.gitconfig文件的[alias]部分
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.
您可以安装一些git别名以简化此过程。这将编辑.gitconfig文件的[别名]节点。
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忽略config.xmlgit将假装它没有看到config.xml上的任何更改,防止您意外提交这些更改。git unignore config.xmlgit将继续确认您对config.xml的更改,允许您再次提交这些更改。忽略gitgit将以上述方式列出您“忽略”的所有文件。
我参考了phatmann的答案构建了这些模型,它给出了一个假设不变的版本。
我介绍的版本使用跳过工作树来忽略本地更改。有关差异的完整解释,请参见Boreaid的答案,但本质上,跳过工作树的目的是让开发人员更改文件,而无需提交更改的风险。
这里提供的git-ignored命令使用git-ls-files-v,并过滤列表以仅显示以S标记开头的条目。S标记表示状态为“跳过工作树”的文件。有关gitls文件显示的文件状态的完整列表:请参阅gitls文件上-t选项的文档。
您有几个选项:
在工作目录中保留一个脏的(或未提交的).gitignore文件(或使用topgit或其他类似的修补工具自动应用它)。将排除项放入$GIT_DIR/info/exclude文件(如果这是特定于一棵树的)。运行git-config--global-core.excludsfile~/.gitignore,并将模式添加到~/.gigignore中。如果要忽略所有树中的某些模式,则应用此选项。例如,我将此用于.pyc和.poo文件。
此外,如果适用,请确保您使用的是模式,而不是显式枚举文件。
推荐文章
- 如何设置一个git项目使用外部回购子模块?
- Git同时在两个分支上工作
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?