如何配置git以忽略本地的一些文件?
我可以忽略本地文件而不污染其他所有人的全局git配置吗?我有一些未跟踪的文件,它们在我的git状态下是垃圾邮件,但我不想为我在本地分支中的每个随机未跟踪文件提交git配置更改。来自: 特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储库中的辅助文件,但特定于一个用户的工作流)应进入如何配置git以忽略本地的一些文件?,git,ignore,gitignore,Git,Ignore,Gitignore,我可以忽略本地文件而不污染其他所有人的全局git配置吗?我有一些未跟踪的文件,它们在我的git状态下是垃圾邮件,但我不想为我在本地分支中的每个随机未跟踪文件提交git配置更改。来自: 特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储库中的辅助文件,但特定于一个用户的工作流)应进入$GIT_DIR/info/exclude文件 .git/info/exclude文件的格式与任何.gitignore文件的格式相同。另一个选项是将core.excludesFile设置为包含全局模式的文件
$GIT_DIR/info/exclude
文件
.git/info/exclude
文件的格式与任何.gitignore
文件的格式相同。另一个选项是将core.excludesFile
设置为包含全局模式的文件名
注意,如果您已经有未老化的更改,则在编辑忽略模式后必须运行以下操作:
git update-index --assume-unchanged <file-list>
通过以下方式将其逆转:
git update-index --no-skip-worktree <file-list>
git更新索引--不跳过工作树
您有几个选项:
- 在您的工作目录中保留一个脏的(或未提交的)
文件(或使用或其他类似的修补工具自动应用它).gitignore
- 如果特定于一棵树,请将排除项放入
文件中$GIT_DIR/info/exclude
- 运行
并将模式添加到git config--global core.excludesfile~/.gitignore
。如果要忽略所有树中的某些模式,则此选项适用。例如,我将其用于~/.gitignore
和.pyc
文件.pyo
此外,请确保您使用的是模式,而不是显式枚举文件,适用时。
更新:考虑使用<代码> Git更新索引——跳过WorkToe[[…]代码>,谢谢,丹莎威!看
旧答案:
如果您需要忽略对跟踪文件的本地更改(我们对配置文件进行了本地修改),请使用
git update index——假设未更改[…]
将以下行添加到.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
列出被忽略的文件
这个答案来自。我想您正在寻找:
git update-index --skip-worktree FILENAME
忽略本地所做的更改
下面是关于这些解决方案的更多解释
要撤消,请使用:
git update-index --no-skip-worktree FILENAME
如果您的repo还没有.gitignore文件,那么一个简单的解决方案是创建一个.gitignore文件,并在其中将
.gitignore
添加到要忽略的文件列表中。您可以安装一些来简化此过程。这将编辑.gitconfig
文件的[alias]
节点
git config--global alias.ignore'update index--skip worktree'
git config--global alias.unignore'更新索引--不跳过工作树'
git config--全局别名.已忽略'!git ls文件-v | grep“^S”
为您安装的快捷方式如下所示:
git ignore config.xml
- git将假装在
上看不到任何更改,以防止您意外提交这些更改config.xml
- git将假装在
git unignore config.xml
- git将继续确认您对
所做的更改,从而允许您再次提交这些更改config.xml
- git将继续确认您对
git被忽略
- git将以上述方式列出您“忽略”的所有文件
我通过引用-表示一个
-假设相同的版本来构建它们
我提供的版本使用--skip worktree
忽略本地更改。有关差异的完整解释,请参见,但本质上是--跳过工作树
,其目的是让开发人员更改文件而不必承担提交更改的风险
此处显示的git-ignored
命令使用git-ls-files-v
,并过滤列表以仅显示以S
标记开头的条目。S
标记表示状态为“跳过工作树”的文件。有关git ls files
显示的文件状态的完整列表:请参阅上的-t
选项的文档。您只需将.gitignore文件添加到主目录,即$home/.gitignore
或~/.gitignore
。然后告诉git在命令中使用该文件:
git config --global core.excludesfile ~/.gitignore
这是一个正常的.gitignore文件,git在决定忽略什么时会引用它。因为它位于您的主目录中,所以它只适用于您,不会污染任何project.gitignore文件
多年来我一直在使用这种方法,并取得了很好的效果。为了忽略未跟踪的文件,特别是如果它们位于(少数)未跟踪的文件夹中,一个简单的解决方案是在每个未跟踪的文件夹中添加一个.gitignore
文件,并在包含*
的单行中输入,然后输入一个新行。如果未跟踪的文件位于几个文件夹中,那么这是一个非常简单明了的解决方案。对我来说,所有文件都来自一个未跟踪的文件夹供应商
,而上述方法刚刚起作用。假设未更改和跳过工作树都不是本地忽略文件的正确方法。。。请检查git更新索引中的注释。由于任何原因不断频繁更改(和/或从克隆更改为另一个)且其更改不应提交的文件,则首先不应跟踪这些文件
但是,有两种方法可以在本地忽略文件(这两种方法都适用于未跟踪的文件)。将文件名放入.git/info/exclude文件中,该文件是.gitignore的本地替代文件,但特定于当前克隆。或者使用global.gitignore(仅在
git config --global core.excludesfile ~/.gitignore
alias git-ignore='echo $1 >> ##FILE-NAME##'
alias git-show-ignored='cat ##FILE-NAME##'
git-unignore(){
GITFILETOUNIGNORE=${1//\//\\\/}
sed -i "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
unset GITFILETOUNIGNORE
}
alias git-ignore='echo $1 >> ##FILE-NAME##'
alias git-show-ignored='cat ##FILE-NAME##'
git-unignore(){
GITFILETOUNIGNORE=${1//\//\\\/}
sed -i.bak "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
rm ##FILE-NAME##.bak
unset GITFILETOUNIGNORE
}
echo YOURFILE_OR_DIRECTOY >> .git/info/exclude