我可以忽略本地文件而不污染其他人的全局git配置吗?我的git状态中有未跟踪的文件是垃圾邮件,但我不想为我在本地分支中的每一个未跟踪的小文件提交git配置更改。
当前回答
您可以安装一些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文件,并在一行中输入包含*的内容,后跟一行。如果未跟踪的文件位于几个文件夹中,这是一个非常简单和直接的解决方案。对我来说,所有的文件都来自一个未经跟踪的文件夹供应商,上面的方法刚刚奏效。
我认为您正在寻找:
git update-index --skip-worktree FILENAME
忽略本地所做的更改
这里是http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/关于这些解决方案的更多说明!
要撤消使用:
git update-index --no-skip-worktree FILENAME
从相关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别名以简化此过程。这将编辑.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选项的文档。
如果您的repo还没有.gitignore文件,那么一个简单的解决方案是创建.gitignorefile,并在其中将.gitignor添加到要忽略的文件列表中。
推荐文章
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏
- “node_modules”文件夹应该包含在git存储库中吗
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?