IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git 取消 git 文件跟踪/监听的几种方式及注意事项 -> 正文阅读

[开发工具]Git 取消 git 文件跟踪/监听的几种方式及注意事项

前言:为什么要取消文件监听?

取消文件监听自有它的好处,比如平时开发你可以使用自己的脚本对项目进行更改、打补丁、等等。最常见的手段就是直接修改项目的配置文件 .gitignore (如果没有就创建一个) 然后写上你要忽略的文件,比如

node_modules/
dist/
test/
config/index.js

但问题来了, .gitignore 的修改会被 git 监听到,如果你不介意的话,那么到这里就结束了,但如果你也不想要 .gitignore 也被监听到,那就继续往下看。

第一种:assume-unchanged 和 skip-worktree

  • 使用assume-unchanged
git update-index --assume-unchanged 指定你的文件
// 例如
git update-index --assume-unchanged ./config/index.js

此时放心的去修改 ./config/index.js ,你会看到 git 不再去监听它,达到了不改 .gitignore的的情况下也能取消监听。

  • 使用skip-worktree
git update-index --skip-worktree 指定你的文件
// 例如
git update-index --skip-worktree ./config/index.js

也是一样,放心的去修改 ./config/index.js

如果你想恢复监听可以输入

git update-index --no-assume-unchanged 文件名
git update-index --no-skip-worktree 文件名

如果你想列出哪些文件使用过 assume-unchanged || skip-worktree,可以输入

window环境
git ls-files -v | findstr /B h 			列出assume-unchanged
git ls-files -v | findstr /B S  		列出skip-worktree
linux环境
git ls-files -v|grep "^h"
git ls-files -v|grep "^S"

assume-unchanged 与 skip-worktree 有什么区别

这两种方式效果功能一样,笔者的初略理解是使用 pull 时有细微差别

  • --assume-unchanged pull 时,如果远程文件发生与你的取消监听文件有发生了冲突,git 会以远程文件为最新进行覆盖掉旧的,则原先的取消监听文件会失效。
  • --skip-worktree pull 时,git 会尽力维护你的取消监听文件,确保它们不会被某些情况给覆盖掉,最多就会提示你冲突了,让你手动解决。

结合以上笔者建议使用 skip-worktree 会更稳妥些。

第二种:配置当前项目的 .git\info\exclude 文件

如果项目没看到有 .git 目录说明是被隐藏掉了,可以通过【查看】进行设置显示,
编辑 exclude 文件跟编辑 .gitignore一样

node_modules/
dist/
test/
config/index.js

OK,就是这么简单!

第三种:全局配置 .gitignore_global 文件

cd ~
touch .gitignore_global
git config --global core.excludesfile ~/.gitignore_global

解释

  1. cd ~ 表示切换到用户目录
  2. touch .gitignore_global 表示新建 .gitignore_global 文件
  3. 最后进行 git 配置

.gitignore_global 文件通常放在 C:\Users\用户名 下面
.gitignore_global 文件编辑规则和上面一样

node_modules/
dist/
test/
config/index.js

这样所有项目就都会生效这套规则啦~

注意事项

以上的任意方式当切换分支时会出现一种特殊情况:即你的取消监听文件(比如 index.js)是项目现有的,然后你对它进行了更改而且 git 也忽略了它,但是当你切换分支时,如果切换分支的(index.js)与当前分支的index.js文件有冲突,你是无法切换过去的,它会提示如下:
在这里插入图片描述
图中表示 "config/index.js 会被即将到来的分支所覆盖,请在切换分支前进行提交"
因为这个问题笔者也是花费了很多时间去找答案,最终能找到的解决手段是

  1. 恢复监听、
  2. 使用 stash 保留数据 然后切换分支
  3. stash pop 恢复数据
  4. 重新取消监听

命令如下

git update-index --no-skip-worktree ./config/index.js
git stash
git checkout 分支名
git stash pop
git update-index --skip-worktree ./config/index.js

虽然繁琐了点,但起码这是目前唯一的手段,因此笔者建议要取消监听的文件最好是新建的,而不是现有的,这样切换不同分支时就不会出现这样的问题,当然也有可能切换的分支刚好跟你新建的文件是相同的那么还是会产生上面情况,总之尽量少对现有的文件进行取消跟踪,因为 git 不知道切换下一个分支时,到底是忽略还是监听。

关于使用哪种方式来取消文件监听笔者最喜欢的当然是 第二和第三种,简单省事 ~

好了内容就到这里,有问题欢迎到下方留言。

参考资料

https://stackoverflow.com/questions/4308610/how-to-ignore-certain-files-in-git

https://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip-worktree

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:53:15  更:2021-12-16 17:53:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:41:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码