Git

  • Published on
    之前有一用一个 Chrome 插件优化 Github UI 体验的,叫 [refined-github](https://github.com/refined-github/refined-github) 当然现在我已经没有使用了,主要是由于 Github UI 更新太快,有时候它追不太上。容易导致一些奇怪的 UI问题。 它有一个神奇的功能是, 你访问他人的 github profile, 或者, 鼠标悬浮在某人头像上时,它会显示出这个用户是在哪个时区,此时此刻他是几点。 后面我发现,它其实是通过 github restful api 去获取仓库的 commit log 信息, 然后找到最近的一条是作者本人提交的 commit, 通过 git 本身记录的原 commit log ...
  • Published on
    最近换了系统, git commit 在gpg签名的时候出错了: > gpg: signing failed: Inappropriate ioctl for device 原因是 gpg 在当前终端无法弹出密码输入页面。 解决办法: ```shell export GPG_TTY=$(tty) ``` 重新执行,发现会弹出一个密码输入界面。 参考: https://www.jianshu.com/p/2ed292ae2365 但是老灯觉得这不是解决办法,因为在此之前,我从来没遇到过这个问题。产生这个问题是有原因的。 于是再去看了一下Arch的文档,果然,有说明“Invalid IPC response and Inappropriate ioctl for device” 这个问题。虽然报错语句不一样,但是其实是一个问题。 ...
  • Published on
    最近编译了最新版的Git, 发现init repo的时候会提示配置全局默认branch (这事儿都是由black lives matter运动搞起的)。好吧,既然能少打一个字符,就改成 `main` 吧。 ## 切换 Git 分支为 main ```shell git checkout master git branch -m main # 删除本地分支 git branch -d master # 删除远程分支 git push origin --delete master # (并不是真正想push, 只是隐式地将远程分支设置为了跟踪main) git push origin -u main ``` ## Github 配置 ...
  • Published on
    ## 起因 为什么用的是Ubuntu? 老灯你不是喜欢ArchLinux的么? 没错,这个Ubuntu只是老灯在工作环境使用的, 主要是团队要求。与大家保持一致。 当前我的neovim还是用的[Vim Plug](https://github.com/junegunn/vim-plug)这个插件管理器(已经在着手准备迁移到init.lua + packer.nvim 了)。 在更新neovim 插件时(`:PlugUpdate` ) 遇到了以下错误: ```shell x vim-startify: fatal: unable to access 'https://github.com/mhinz/vim-startify.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated. ...
  • Published on
    适用场景: > 已经提交了N个commit才发现用的配置(`user.name` 和 `user.email`)错了,比如要用个人邮箱的,用成了公司邮箱。 > 基于隐私考虑,我们需要把公司邮箱和昵称替换掉。 主要是用到[git-filter-repo](https://github.com/newren/git-filter-repo)的**CALLBACKS**功能 参考文档 https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#CALLBACKS ...
  • Published on
    ## 使用场景 个人电脑里同时有公司的项目的源码和自己的开源项目的源码,而一般在公司使用的`name`和`email`配置跟家用的都是区分开的。 如何实现,在进入公司项目的目录提交git commit时让Git自动使用公司邮箱和名称,而在进入其它目录时则保持家用的配置呢? 答案就是:Git Conditional Includes ## 使用Conditional Includes 老灯的需求比较简单,只有home和work两种情况。因此,配置如下: `~/repo/go/work` 目录是公司项目的根目录,下面会有多层子目录。 除此之外,其它repo都默认是老灯自己的个人项目。 `~/.gitconfig` 作为配置的入口,根据条件引入其它配置: ...
  • Published on
    en title: Git Splitting a Subfolder Out Into a New Repository ## 需求 某个历史悠久的“大”Git仓库(很大很大。。。)要拆分成很多小仓库。 至于为什么会有这种“大”仓库的存在,表问我。。。 it's about project history ## 为什么要这样做? - 查bug的时候不再需要同时切换新旧两个仓库交叉查看历史commit记录 - 可以保留被拆分目录下文件的完整提交记录,方便他人阅读代码和理解代码 ## 这样做会不会增加迁移的负担? 不会,绝对不会。一条命令即可搞定 (git filter-repo xxxxx)。 ## 准备工作 `git-filter-repo` 现在是Git官方推荐的工具(git自带的`filter-branch`已经不被推荐使用了,速度慢又不好用)。 ...
  • Published on
    ## cgit简介 cgit - A hyperfast web frontend for git repositories written in C. [cgit](https://git.zx2c4.com/cgit/about/)没有多余的功能,它就是一个简洁的Git WEB UI. * basic repository browsing (logs, diffs, trees...) * caching of generated HTML * cloneable URLs (implements dumb HTTP transport) * commit feeds (atom format) * discovery of Git repositories ...
  • Published on
    ## 需求 经常会有这么一种情况,一个文件修改了很多次代码,才发现 -- 咦?忘记commit了。 而且往往这些修改可能它们本来应该属于不同的提交。 怎么办?总不可能将就一下,直接把一些乱七八糟的修改放在一个commit里吧? 这个时候git add的`-p, --patch`参数就派上大用场了。 ## 介绍 > `-p, --patch` Interactively choose hunks of patch between the index and the work tree and add them to the index. > This gives the user a chance to review the difference before adding modified contents to the index. ...
  • Published on
    ## 热身运动 如果你没有设置一些惯用alias, 比如`ci`之类的,自行将`ci`替换成 `commit`。 像命令中用到的`lg1`别名,请直接跳到文章最后取配置。 为了方便理解,老灯会创建一个简单的Git仓库,用如下命令可完成: ```bash # 新建一个演练仓库 mkdir gittest cd gittest # 随便添加一个文件 touch hello.txt git add hello.txt git ci -m 'add hello.txt' # 再随便添加一个文件 touch world.txt git add world.txt git ci -m 'add world.txt' # 现在的提交是这样的 ...