Git 取消 git 文件跟踪/监听的几种方式及注意事项

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

原因很简单,比如平时自己写一个对项目打补丁、更改的脚本等,

然后我并不希望将这些脚本推到仓库去,最常见的手段是修改项目的 .gitignore (没有就新建一个) ,然后写上你要忽略的文件规则,如下

node_modules/

config/index.js

不过这里有个问题, .gitignore 的修改会被 git 监听到,本文就是来解决此问题的。

第一种:assume-unchanged 和 skip-worktree

方法1:使用assume-unchanged

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

方法2:使用skip-worktree

git update-index --skip-worktree 指定你的文件

// 例如

git update-index --skip-worktree ./config/index.js

以上选任意一种即可,现在再去修改 ./config/index.js 将不会被 git 追踪到,如果想恢复可以输入对应的命令:

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 文件配置

exclude 规则同 .gitignore,比如

node_modules/

dist/

test/

config/index.js

注意:exclude 无法取消跟踪现有的文件,只能用第一种方式解决。

第三种:全局配置 .gitignore_global

cd ~

touch .gitignore_global

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

用户目录

新建 .gitignore_global 文件

全局配置

.gitignore_global 通常放在 C:\Users\用户名 下面

.gitignore_global 编辑规则和上面一样

node_modules/

dist/

test/

config/index.js

这样每个项目都会生效这套规则。

注意事项

选择以上任意一种方式都会有特殊情况:比如对当前项目 index.js 取消跟踪,当切换分支时,如果切换分支的(index.js)与本项目的index.js有冲突,那么是无法切换过去的,会提示如下:

图中表示 “config/index.js 会被即将到来的分支所覆盖,请在切换分支前进行提交”,这个问题花了我很多时间去寻找答案,目前能找到的唯一手段是

  • 恢复监听、
  • 使用 stash 保留数据 然后切换分支
  • stash pop 恢复数据
  • 重新取消监听

命令如下

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 不知道切换下一个分支时,到底是选择忽略还是监听。

GitBlit 中触发 Jenkins 构建可以通过以下几种方式实现,通常依赖于 GitBlit 的 Web 钩子(Webhook)功能与 Jenkins 的 Git 插件配合完成。以下是具体步骤和说明: ### 方法一:使用 GitBlit 的 POST-RECEIVE HOOK 触发 Jenkins 1. **配置 Jenkins 项目** 在 Jenkins 中创建一个自由风格的项目或 Pipeline 项目,并在 **源码管理** 部分配置 Git 仓库地址,确保 Jenkins 能访问 GitBlit 仓库。 2. **在 GitBlit 中设置 Webhook** - 登录 GitBlit 的管理界面,选择目标仓库。 - 进入 **Edit Repository** 或 **Hooks** 页面,找到 **POST-RECEIVE HOOKS** 或 **Web Hooks** 配置项。 - 添加 Jenkins 的构建触发 URL,格式通常为: ``` http://<JENKINS_URL>/git/notifyCommit?url=<REPO_URL> ``` 或(如果使用令牌认证): ``` http://<JENKINS_URL>/job/<JOB_NAME>/build?token=<TOKEN> ``` - 保存配置。 3. **测试触发** 当有新的推送(push)到 GitBlit 仓库的指定分支时,GitBlit 会向 Jenkins 发送 POST 请求,Jenkins 检测到变更后会自动触发构建。 --- ### 方法二:使用 Jenkins 的 Git 插件轮询(不推荐,效率低) 如果无法配置 Webhook,可以启用 Jenkins 的 **Poll SCM** 选项,定期检查 GitBlit 仓库是否有更新。 - 在 Jenkins 项目配置中,勾选 **Poll SCM**,并设置轮询间隔(如 `H/5 * * * *` 表示每 5 分钟检查一次)。 - 此方法会持续消耗资源,不如 Webhook 实时。 --- ### 方法三:通过 Jenkins Pipeline 监听分支(高级用法) 如果使用 Jenkinsfile 定义 Pipeline,可以通过 `git` 步骤和 `changeset` 条件判断分支变更,但通常仍需依赖 Webhook 触发 Pipeline 运行。 --- ### 关键注意事项 1. **网络连通性** GitBlit 服务器必须能访问 Jenkins 的 URL,反之亦然(如果 Jenkins 需要主动拉取)。 2. **认证安全** 如果 Jenkins 开启了安全认证,需在 Webhook URL 中附加令牌(token)或使用用户名/密码。 3. **分支过滤** 在 Jenkins 项目配置中,可以通过 **Branches to build** 指定分支名称(如 `*/main`),确保仅监听特定分支。 ```python # 示例:Jenkinsfile 中监听分支的伪代码(需配合 Webhook) pipeline { agent any triggers { pollSCM('H/5 * * * *') // 备用轮询(不推荐) } stages { stage('Checkout') { steps { git branch: 'main', url: 'http://gitblit/repo.git' } } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值