git 读取对象 XXX 失败: 错误的消息

今天早早来到办公室,准备大干一场,谁知道git出现问题。 准备更新代码 准备切换到公共分支更新代码 ❯ git checkout dev M dev.properties 切换到分支 'dev' fatal: 读取对象 c72f18fb5b1c2780f18afd7b2a0ce15d15984a47 失败: 错误的消息 ❯ git status 位于分支 dev fatal: 读取对象 c72f18fb5b1c2780f18afd7b2a0ce15d15984a47 失败: 错误的消息 切换成功,但是 git 提示 fatal: 读取对象 c72f18fb5b1c2780f18afd7b2a0ce15d15984a47 失败: 错误的消息,用了好多年 git 第一次碰到这个错误。用 git log看历史记录,只能看到最近的7, 8个提交,然后也是上面这个错误。 定位问题 网上找了一通,似乎没有人碰到过这个问题 ❯ git fsck --full error: 不能 mmap .git/objects/82/27d7402106a51b5fedad7bcb2fba73ba6d7e3f: 错误的消息 error: 8227d7402106a51b5fedad7bcb2fba73ba6d7e3f:对象损坏或丢失:.git/objects/82/27d7402106a51b5fedad7bcb2fba73ba6d7e3f error: 不能 mmap .git/objects/84/97288737064b6239b8c3029db78fa60e228286: 错误的消息 error: 8497288737064b6239b8c3029db78fa60e228286:对象损坏或丢失:.git/objects/84/97288737064b6239b8c3029db78fa60e228286 error: 不能 mmap .git/objects/98/26f8edc0708b4da83e0ef11c7d2067c0de43b3: 错误的消息 error: 9826f8edc0708b4da83e0ef11c7d2067c0de43b3:对象损坏或丢失:.git/objects/98/26f8edc0708b4da83e0ef11c7d2067c0de43b3 error: 不能 mmap .git/objects/c7/2f18fb5b1c2780f18afd7b2a0ce15d15984a47: 错误的消息 error: c72f18fb5b1c2780f18afd7b2a0ce15d15984a47:对象损坏或丢失:....

November 5, 2020 · 2 分钟 · ming

不蒜子计数器研究和jsonp的妙用

最近研究使用 halo 部署个人博客,很常见的一个需求就是网站访问量统计,毕竟每个新站长都想知道自己的网站有多少人访问了。 halo 内置了不蒜子极简网站计数器,简单的添加一个 js 和页面标签,就能获得你网站的访问人数等数据,简单,够用。 那么它是怎么实现的呢,下面我们就来研究一下。 获得源码 不蒜子只需要一个 js 文件,把它拷贝下来,比较简单不到 100 行,直接贴在下面: // http://s.xinac.net/static/busuanzi/v2.3.0/bsz.pure.mini.js var bszCaller, bszTag; !function() { var c, d, e, a = !1, b = []; ready = function(c) { return a || "interactive" === document.readyState || "complete" === document.readyState ? c.call(document) : b.push(function() { return c.call(this) }), this }, d = function() { for (var a = 0, c = b.length; c > a; a++) b[a]....

May 22, 2020 · 5 分钟 · ming

分布式集群Session共享

解决方法 Session Sticky 让负载均衡器能够根据每次的请求的会话标识来进行请求的转发,这样就能保证每次都能落到同一台服务器上面。 Session Replication 即 session 复制,一般应用容器都支持 Session Replication 的方式。这种方式开销大,只适合几台机器的场景。 Session数据集中存储 是对方案 2 的优化,Session数据不保存到本机而且存放到一个集中存储的地方,如 redis。 Cookie Based 所有 session 数据放在 cookie 中。 每种方式的具体原理及优缺点,可以查看附录1. 可以发现, 大多数情况下,方法 3 最优。 session基于redis共享有两种基本的方案 基于容器自身的扩展,比如tomcat的session-manage,以及 https://github.com/jcoleman/tomcat-redis-session-manager.  基于spring-session的方案. spring-session的好处不仅仅是session共享,它还可以与容器解耦,应用于多终端session共享,websocket,restful api等场景。 环境 jdk 8 意味着老的 jar 包不能用 tomcat 8.5 spring 5 spring boot 2 maven 依赖管理。建立公司内部的私服。 技术选型要有一定的前瞻性,带来的好处大于学习成本。 参考资料 分布式集群Session共享 http://blog.csdn.net/jerome_s/article/details/52658946 单点登录实现(spring session+redis完成session共享) https://www.cnblogs.com/hujunzheng/p/6395966.html 使用nexus3搭建私有仓库 https://www.jianshu.com/p/dbeae430f29d

March 3, 2018 · 1 分钟 · ming

部署个别变动文件到服务器2

在上一篇文章中, 我写了基于 svn 的将变动按 war 包目录提取的文章 https://www.jianshu.com/p/a2ec55f0da0a , 这篇文章我做了一些优化, 使得脚本能处理 C R U D 等大部分情况, 不能处理的部分也会有合理的输出. 下面假设你的项目是标准的 eclipse java web 项目. 下面两个脚本配合, 可以将变动很方便的同步到测试环境部署,值得一提的是 rsync 非常非常快. get_changes.sh #!/bin/bash # 这个脚本分析 svn diff -r commit1:commit2 --summarize 的输出, 找到两个 commit 间变动的文件, # 按文件原有的目录结构 和 war 包的目录结构, 放到放在一个目录中. # 然后, 可以直接将该目录中的内容拖到 war 包中以实现快速准备 war 包; 或上传到测试服务器以实现部署 # 支持 新增, 修改; 删除不支持, 需手动删除. if [[ $# != 2 ]]; then echo "get changes from between < oldCommit > and < newCommit> , for example:" echo "....

January 28, 2018 · 3 分钟 · ming