跳到主要内容

我是怎样高效学习并管理沉淀我的demo库的

· 阅读需 4 分钟

遇到优秀的教程时,我会跟着做一遍;有新想法或者知识点时,我会立即动手尝试。但问题在于,我通常会忘记昨天的代码是如何编写的。因此,记录和回顾变得极其重要。

在学习这些知识点时,保持简单和专注至关重要,这样在复习时就能迅速抓住核心内容,避免干扰。

我的demo库需要独立的提交历史,同时我希望能将这些demo以语言分类,放入统一的仓库中,例如我的java仓库。这里面会有hello-world, jooq-setup等项目,我可以在一个远程仓库中查看它们。

我考虑过以下方法:

  • git worktree
  • git submodule
  • 使用脚本同时拉取/推送多个git仓库

传统的分支策略需要频繁切换上下文,编辑器重载会浪费大量时间。那么,是否有一种方式可以同时访问这些子项目的文件系统,并随时修改和提交?Git worktree 提供了这样的解决方案。

Git Worktree 简介

Git worktree 允许你在同一仓库的不同分支上同时工作,无需切换等待。每个worktree都有自己的工作目录,让你可以把分支当作完全独立的项目处理。

工作场景

比如,你有一个Java仓库,它包含了多个子项目。每个子项目在独立的分支上开发,你希望能够无缝切换这些分支,并与一个远程仓库同步。

传统分支 vs. Worktree

没有worktree的情况下,你需要在多个分支间切换,等待编辑器重载和索引。但有了worktree,每个子项目都保留在自己的工作目录,独立且随时可用。

多远程仓库的维护挑战

如果每个子项目对应一个远程仓库,会带来维护的复杂性,比如权限管理、钩子脚本和持续集成配置。

Worktree vs. Submodule

Submodule 允许将一个Git仓库嵌入另一个仓库中。相比之下,worktree提供了更简洁的工作流,无需处理子模块的同步和更新问题。

多敲,多积累,我的学习秘诀

release/lang-bases/java-worktrees为例,你可以为hello-worldjooq-setup等子项目创建独立的worktree,而主仓库main作为主要的开发线。

release/lang-bases/java-worktrees 
❯ tree . -L 2 -a
.
├── hello-world
│ ├── .git
├── jooq-setup
│ ├── .git
└── main
└── .git

每个目录都连接到主仓库,但可以独立提交到远程仓库,这样减少了上下文切换的成本。

结语

如果你在日常工作中遇到类似挑战,尝试将Git worktree集成到你的工作流中,它可能会成为提高效率的秘诀。

这两个命令就够了

# Add a new dir for branch
$ git worktree add [-b <branch>] <path> <remote>/<branch>

# Push changes of all branch to remote
git push --all origin