12个版本 (6个破坏性更新)
0.7.1 | 2023年10月22日 |
---|---|
0.7.0 | 2023年9月22日 |
0.6.0 | 2022年10月10日 |
0.5.0 | 2022年1月15日 |
0.1.1 | 2021年5月30日 |
#60 在 开发工具
每月113次下载
125KB
3K SLoC
git-nomad
轻量级同步工作区中的git分支。动机
- 你经常在多台机器上使用相同的仓库,例如笔记本电脑和台式机。
- 你经常重写历史并使用只有你自己能看懂的短分支名,这使得将常规分支推送到git远程仓库变得繁琐。
- 你想要拥有git克隆的所有效率和同步优势,这意味着外部同步工具如Dropbox或网络挂载都不再适用。
- 你希望这种同步能够与流行的第三方远程主机(如GitHub)无缝工作。
用法
安装 git-nomad
以使其在您的 $PATH
中可用。假设您正在使用常规的git工作流程进行开发
rraval@desktop:~/git-nomad$ git checkout -b feature
rraval@desktop:~/git-nomad$ touch new_file
rraval@desktop:~/git-nomad$ git add .
rraval@desktop:~/git-nomad$ git commit -m "new file"
您可以在任何时候使用以下命令推送您本地分支的状态:
# Synchronizes with a remote called `origin` by default.
# See `--help` for overriding this explicitly.
rraval@desktop:~/git-nomad$ git nomad sync
Pushing local branches to origin... 3s
Fetching branches from origin... 0s
Listing branches at origin... 3s
desktop
refs/nomad/desktop/feature -> c340cd55853339e4d039746495cdb80cd9e46123
refs/nomad/desktop/master -> 267719fb8448cc1cbef2c35a638610573779f2ac
在某个未来的某个时刻,您希望在另一台机器上继续开发
rraval@laptop:~/git-nomad$ git nomad sync
Pushing local branches to origin... 2s
Fetching branches from origin... 1s
Listing branches at origin... 2s
desktop
refs/nomad/desktop/feature -> 1a101799507ba67d822b97105aafa0ac91ce5183
refs/nomad/desktop/master -> 267719fb8448cc1cbef2c35a638610573779f2ac
laptop
refs/nomad/laptop/master -> 267719fb8448cc1cbef2c35a638610573779f2ac
这会打印出要使用的引用,以便从上次停止的地方继续
rraval@laptop:~/git-nomad$ git checkout -b feature refs/nomad/desktop/feature
# Hack away where you left off on desktop
假设当前开发是在笔记本电脑上进行的,所以您回到台式机丢弃现在过时的分支
rraval@desktop:~/git-nomad$ git checkout master
rraval@desktop:~/git-nomad$ git branch -D feature
Deleted branch feature (was 1a10179).
rraval@desktop:~/git-nomad$ git nomad sync
Pushing local branches to origin... 2s
Fetching branches from origin... 1s
Listing branches at origin... 0s
Pruning branches at origin... 0s
Delete refs/nomad/desktop/feature (was 1a101799507ba67d822b97105aafa0ac91ce5183)... 0s
desktop
refs/nomad/desktop/master -> 267719fb8448cc1cbef2c35a638610573779f2ac
laptop
refs/nomad/laptop/feature -> dedf3f9d3ad279a401877b351c3ec13aa47cbbd4
refs/nomad/laptop/master -> 267719fb8448cc1cbef2c35a638610573779f2ac
如果您想停止使用 git-nomad
并清理它创建的所有引用
# See also the `purge --host` option.
rraval@desktop:~/git-nomad$ git nomad purge --all
Fetching branches from origin... 1s
Listing branches at origin... 0s
Pruning branches at origin... 2s
Delete refs/nomad/desktop/master (was 267719fb8448cc1cbef2c35a638610573779f2ac)... 0s
Delete refs/nomad/laptop/feature (was dedf3f9d3ad279a401877b351c3ec13aa47cbbd4)... 0s
Delete refs/nomad/laptop/master (was 267719fb8448cc1cbef2c35a638610573779f2ac)... 0s
工作原理
Git是一个毫无顾忌的内容寻址文件系统,它操作 blob
、tree
和 commit
对象。在这个之上是一个相当不错的版本控制系统,尽管这个说法最多是具有争议性的。
Git分支是在一个更通用的方案 refs
之上实现的,其中本地分支 master
只是 refs/heads/master
指向的提交。Git为自身保留了几个层次结构以供使用
refs/heads/*
表示本地分支。refs/tags/*
表示标签。refs/remotes/*
表示远程分支。
git-nomad
直接与refs交互以实现其轻量级同步方案。
- 将本地的
refs/heads/*
推送到远程的refs/nomad/{user}/{host}/*
。这允许多个主机上的多个用户同时使用同一远程的git-nomad
,而不会覆盖数据。 - 从远程
refs/nomad/{user}/*
拉取到本地的refs/nomad/*
。这使得特定用户的所有主机引用都在本地克隆中可用。 - 修剪本地
refs/nomad/*
引用,其中对应的分支已被删除。
使用refs的好处
- 你只需为分支独有的内容支付存储成本。大部分仓库历史都是共享的!
- 随着refs的清理,
git
的自动垃圾收集应该会回收空间。 - 由于这些refs位于单独的
refs/nomad
层级中,它们不受通常只有快速前进规则的约束。
安装
在 Linux 或 Mac OS X 上
GitHub 上的发布版有预构建的二进制资产:https://github.com/rraval/git-nomad/releases
- 下载适用于您的 OS 的最新版本。
- 使用
gunzip
解压下载的文件。 - 将二进制文件放在您的
$PATH
中的某个位置。 - 使用
git nomad --version
检查一切是否正常。
在 NixOS / 通过 Nix
通过 nixpkgs 安装
$ nix-env --install git-nomad
从源代码
如果您有 cargo
可用
$ cargo install git-nomad
尖端版本
通过 nix run
Nix 可以通过以下方式直接从 GitHub 构建和运行二进制文件:
$ nix run github:rraval/git-nomad
贡献
有几个方法可以使这个项目变得更好
- 试用并 提交问题 当事情出错时。使用
-vv
标志来捕获运行的所有命令的所有信息。 - 为各种操作系统构建软件包。
依赖关系
~4–13MB
~165K SLoC