#file #repo #remote #update #borrowed #build #git

app gimic

远程仓库中维护借用的目录/文件的解决方案

7 个版本

0.1.33 2023 年 8 月 18 日
0.1.32 2023 年 8 月 13 日
0.1.1 2023 年 7 月 30 日

#192 in 文件系统

MIT 许可证

22KB
306

gimic

增加功能的 Git 模拟器

嵌套仓库代码更新

repo 1 <Main_repo>
|
|- /some/cool/file/from/repo2

轻松管理来自其他仓库的特定文件/目录 "远程"。

安装

请确保您已安装 git,并且您正在 git 仓库中工作


  1. 从源代码构建

    i. 下载源代码后,运行 cargo build --release

    ii. [可选] 将发行版文件位置添加到系统 PATH

工作原理

模拟器 被设计为 模拟 Git,尽管 submodulessubtree 是将另一个仓库包含到您的项目中的优秀选项,但您可能希望对哪些文件实际被拉入并位于您的本地目录/工作区有更多细粒度的控制。使用 gimic 只会影响您的仓库,其中文件将出现未跟踪(就像任何新文件一样),因此更新您的 .gitignore 文件或 .git/exclude 可能是个好主意。

配置

在您的项目根目录中创建一个 gloc.yaml 文件

repo 1
|
|-gloc.yaml

如果已应用安装步骤 2.ii,则可以在嵌套 .git 目录中的任何位置运行,否则目标构建目录需要存在于所需的 "根" 仓库内。

用法

$gimic checkout

  • 这只是一个围绕 git pullcp <source> <to> 的包装。仅指定操作,即 checkout,并且没有其他参数,意味着在执行路径(即你调用 gimic 的地方)中存在一个 yaml 文件配置。当 alternate_repo 被拉下来时,文件将从 alternate_source 复制到 alternate_target。注意,至少需要一个位置存在,如果只有一个选项存在,则该选项将成为另一个选项的默认值。这意味着(超级简单的伪代码 Rust)!alternate_source { alternate_target = alternate_source } (反之亦然)注意:目前尚未强制执行,但在以后的版本中将会执行。

  • 文件复制类似于 Linux,目标 "类型" 基于 "源" 类型。这意味着如果 "源"(即 alternate_source)是文件,则 "目标" 将是文件(无论它是否包含指定的扩展名)。但如果 "源" 是目录,则目标将是目录(即使它具有文件指定)。另一件需要注意的事情是,checkout 命令具有标准递归文件创建。类似于 Linux 中的 mkdir -R

  • 当 gimic 的 checkout 流程完成后,临时存储库(即 alternate_repo)将被删除,除非在 gloc.yaml 配置中指定了其他操作。

$gimic --[no-]skip-worktree target_dir

  • 因为 git update-index --skip-worktree <some_file> 不处理目录,而不是需要创建一些非常复杂的单行代码片段,你可以开启/关闭 git 的跟踪(临时像原始命令一样)。

潜在的变化

  1. 允许 gloc.yaml 文件的存在是可选的
  2. 允许为流行的系统提供可下载的预构建二进制文件
  3. 提供合并/变基当前文件/文件选项
  4. 允许多个目标
  5. 整合提交和推送
    • 提交需要目录持久性...
  6. 允许跳过工作树以指定替代位置

贡献

请随意在存储库中发表评论,并告诉我你是否有任何其他建议或想要做出贡献!

依赖关系

~5–14MB
~165K SLoC