我可以忽略本地文件而不污染其他人的全局git配置吗?我的git状态中有未跟踪的文件是垃圾邮件,但我不想为我在本地分支中的每一个未跟踪的小文件提交git配置更改。


当前回答

对于希望忽略子模块中本地文件的任何人:

使用与.gitignore文件相同的格式编辑父repo/.git/modules/my子模块/info/exclude。

其他回答

我认为您正在寻找:

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

为了忽略未跟踪的文件,特别是如果它们位于未跟踪的(少数)文件夹中,一个简单的解决方案是向每个未跟踪的文件夹添加.gitignore文件,并在一行中输入包含*的内容,后跟一行。如果未跟踪的文件位于几个文件夹中,这是一个非常简单和直接的解决方案。对我来说,所有的文件都来自一个未经跟踪的文件夹供应商,上面的方法刚刚奏效。

对于希望忽略子模块中本地文件的任何人:

使用与.gitignore文件相同的格式编辑父repo/.git/modules/my子模块/info/exclude。

如果您的repo还没有.gitignore文件,那么一个简单的解决方案是创建.gitignorefile,并在其中将.gitignor添加到要忽略的文件列表中。

假设不变和跳过工作树都不是忽略本地文件的正确方法。。。请检查此答案和git更新索引文档中的注释。由于任何原因不断频繁更改(和/或从一个克隆更改为另一个克隆)的文件,且不应提交其更改,则不应首先跟踪这些文件。

但是,有两种适当的方法可以在本地忽略文件(这两种方法都可以处理未跟踪的文件)。要么将文件名放在.git/info/exclude文件中,该文件是.gitignore的本地替代文件,但特定于当前克隆。或者使用global.gitignore(它应该只正确用于常见的辅助文件,例如pyz、pycache等),该文件将在机器中的任何git repo中被忽略。

为了实现上述自动化(添加到exclude或global.gitignore),可以使用以下命令(添加到bash配置文件):

每个克隆本地排除(请注意,您应该位于由于使用相对路径而调用命令时的存储库),将##FILE-NAME##更改为.git/info/excludeGlobal.gitignore,首先在这里设置Global.gitignor将##FILE-NAME##更改为~/.gitignore

Linux系统

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
}

MacOS(您需要.bak进行sed就地修改(即,您被迫向就地sed添加文件扩展名。即,在替换某些内容之前进行备份),因此要删除我添加的.bak文件rm filename.bak)

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
}

然后您可以执行以下操作:

git忽略example_file.txtgit unignore示例文件.txt