我可以忽略本地文件而不污染其他人的全局git配置吗?我的git状态中有未跟踪的文件是垃圾邮件,但我不想为我在本地分支中的每一个未跟踪的小文件提交git配置更改。
当前回答
将以下行添加到.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更新索引文档中的注释。由于任何原因不断频繁更改(和/或从一个克隆更改为另一个克隆)的文件,且不应提交其更改,则不应首先跟踪这些文件。
但是,有两种适当的方法可以在本地忽略文件(这两种方法都可以处理未跟踪的文件)。要么将文件名放在.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
我认为您正在寻找:
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
如果您的repo还没有.gitignore文件,那么一个简单的解决方案是创建.gitignorefile,并在其中将.gitignor添加到要忽略的文件列表中。
从相关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>
只需将路径添加到ypu希望从当前回购的任何分支上的提交中删除的文件:
取消隐藏Windows目录设置中的隐藏文件打开路径REPO_MAIN_Path/.git/info/exclude添加例如**/toExcludeFile.bat
就这样!对我来说,上面的答案太长了。KISS-保持简单的愚蠢
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别