#symlink #workspace #clone #git #monolith

app gitspace

基于 Git 的工具,用于在一个工作区中克隆和创建多个仓库的符号链接

1 个不稳定版本

0.0.1 2022年11月21日

#47#symlink

MIT 许可证

29KB
436

gitspace

基于 Git 的工作区

  • 类似于子模块,但无需提交
  • 语言无关
  • SSH 配置透传进行授权

入门指南

  1. cargo安装 gitspace
  2. gitspace init
  3. 更新配置
    • 添加您的 ssh 主机(以下信息)
    • 添加您的仓库
  4. gitspace sync

命令

命令::初始化

名称 描述
init 创建新的 gitspace 配置
sync 克隆仓库,更新符号链接,更新 .gitignore

命令::维护

名称 描述
alias 为 gitspace 仓库生成别名,默认为 alias --zsh
alias --bash 生成 bash / zsh 兼容的别名
alias --nushell 生成 nushell 别名
ignore 根据克隆的仓库更新(或创建)新的 gitignore 文件
clean 没有参数时,默认为 clean --all
clean --all 移除除了 gitignore 和您的 gitspace 配置之外的所有内容
clean --symlinks 移除所有 gitspace 生成的符号链接
clean --repos 移除所有克隆的仓库(即 .repos 目录)
fetch 从本地仓库获取所有对 master 的更新
version 打印 gitspace 版本

Space

  • 一个空间...
    • 是“工作区”的简称
    • 是任何包含 .gitspace 文件的目录
    • 将多个仓库组合到一个地方

Git

  • Git 是如何配置...
    • 哪些仓库应该被存储
      • 它们应该如何嵌套
    • 您的授权策略
    • 您的同步策略
      • 它应该运行多频繁

依赖项

名称 链接 描述
git2 git2 克隆 Git 仓库
serde serde 序列化/反序列化(用于有效载荷和 repogen 配置)
symlink symlink 跨平台符号链接
reqwest-graphql reqwest-graphql 查询 GitHub 的 GraphQL API
clap clap CLI 参数解析器

现有技术

这个项目的起源始于我编写了 repogen。虽然这个工具仍在内部使用,但它已经过时且缺少功能。去年我们最终使用了子模块,并记得与这个方便功能相关的一些痛点。最终我们想要一个能够允许开发团队拥有一致目录结构的工具,而不必依赖于无所不能的单一模块

在单体/包管理空间中存在许多值得注意的选项,从纯工作区到交互式构建系统应有尽有。

一些值得注意的例子:


目标

目标::MVP

  • 核心命令(initsync)工作正常

目标::Post-MVP

  • 更新 README

    • 通过 cargo 安装
    • 添加通过 brew 安装的支持
  • 初始化

    • 生成配置
      • 允许选择配置语言
        • js(默认)
        • json
        • yaml
    • 解析配置,它...
      • 使用 SSH 配置提供程序来处理 SSH 连接
      • 允许为每个子仓库指定包管理器的路径(例如 pnpm、cargo 等)
    • 生成初始 gitignore(或更新现有)以包含所有子仓库路径(以避免同步符号链接或克隆的 .repos 目录)
    • 将仓库克隆到隐藏的 .repo 目录
    • 加载所有子模块的仓库

      更多信息 这里

    • 使 CLI 交互式(在文件生成期间)
  • 维护

    • 一个相当于 brew doctor 的命令,可用于执行所有操作
    • 同步 gitignore 以匹配 .repo 内的目录

      例如,“foo”、“bar” 仓库已克隆。自动添加到 .gitignore 文件

    • 获取所有子仓库的更新

      例如,在所有嵌套仓库上执行 git pull origin master

    • 启用幂等获取(允许重新运行 repogen 而无需删除先前克隆的仓库或生成的符号链接)
    • 启用清理所有本地仓库
    • 启用清理所有本地符号链接
    • 启用为嵌套树结构生成别名文件

      目前打印出来并允许它们导入它

      • 在配置中添加前缀选项
        • ${前缀}/${pwd}
      • 添加 shell 输出选项
        • zsh
        • nushell
  • 管理

    • 自动创建仓库标签 ()

      例如,“foo”、“bar” 仓库已克隆。在 Github 和 Gitea 上生成了 ${opt-label-prefix}-${reponame}-${opt-label-suffix}

    • 显示仓库结构的依赖关系图的可视化

依赖项

~12MB
~288K SLoC