2个不稳定版本

0.2.0 2019年1月29日
0.1.0 2018年12月18日

#1003 in 开发工具

Apache-2.0

32KB
720

git-project

git-project 允许您快速轻松地管理现代开发者的计算机上可能积累的大量git项目。

安装

$ cargo install git-project

使用

$ git project -h
git-project 0.1.0
Nate Mara <[email protected]>
A manager for all of your git projects

USAGE:
    git-project <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    check              Check all repositories under the base path to ensure the are up to date with remotes
    clone              Clone a new project into a folder based on the remote URL
    gen-completions    Generate CLI completions for your shell of choice
    help               Prints this message or the help of the given subcommand(s)
    list               List all repositories under the base path
    organize           Organize an existing directory of git repositories into a normalized format based on remotes

基本目录

所有 git-project 子命令都接受一个 --base-dir-d 参数,或者一个指向包含所有git仓库的目录的 GIT_PROJECT_BASE_DIR 环境变量。

子命令

git-project 有几个子命令,每个子命令都处理管理git仓库的特定方面。

  • clone
  • check
  • list
  • organize
  • gen-completions

gitproject organize OLD_DIR NEW_DIR

此子命令用于组织包含git仓库的目录。每个仓库将被放置在一个基于其远程路径的文件夹中。默认情况下使用“origin”远程,如果没有origin,则使用配置了URL的第一个远程。以下是如何使用它的一个简单示例

$ cd unorganized/foo
$ git init
$ git remote add origin https://github.com/Kroger-Technology/git-project.git

$ cd ../bar
$ git init
$ git remote add origin [email protected]/you/git-project.git

$ cd ../..
$ git project organize unorganized organized

$ git project list -d organized
YOUR_DIR/organized/github.com/Kroger-Technology/git-project
YOUR_DIR/organized/gitlab.internal.com/you/git-project

--dry-run

不移动任何文件,只打印出此命令将执行的操作。

gitproject clone URL

此子命令用于将仓库克隆到您的计算机上。这与常规的 git clone 有什么区别? git project clone 将自动将项目克隆到与您提供的URL匹配的文件夹中!

  • https://github.com/Kroger-Technology/git-project.git 克隆到 /base-dir/github.com/Kroger-Technology/git-project

  • [email protected]:you/git-project.git 克隆到 /base-dir/gitlab.internal.com/you/git-project

以这种格式存储您的仓库不是 git-project 的其他子命令正常工作的要求。

gitproject check

此子命令允许您检查基本目录下所有git仓库的状态。这可以用来确保您的计算机上的所有更改都已提交到某个远程位置,这样如果您的计算机发生故障,您的工作就不会丢失。

$ git project check --summarize
/Users/nate/projects/not-mine/rust-peg

- branch left-recursion does not exist on remote origin
- branch template-return does not exist on remote origin

/Users/nate/projects/personal/git-project

- local changes not checked in
- local branch master ahead of origin/master by 4 commits

/Users/nate/projects/personal/rbr-finding-exoplanets/cargo_home/registry/index/github.com-1ecc6299db9ec823

- local changes not checked in

/Users/nate/projects/not-mine/DefinitelyTyped

- branch master does not exist on remote fork

---- Summary ---
Warnings: 6
Scanned repositories: 74
Repositories with warnings: 4
Repositories with no warnings: 70

--deep-recurse

--deep-recurse 标志对此命令和 list 子命令的作用完全相同,但与仅列出子模块不同,此命令将检查它们。

--summarize

此标志会打印出所有扫描的仓库的摘要。

报告的警告

  • 工作目录的更改未提交到索引
  • 未配置远程
  • 本地分支有远程没有的提交
  • 本地分支在远程不存在

git项目列表

此子命令会递归遍历您的基础目录下的目录树,并打印出它找到的每个 Git 仓库。

注意:默认情况下,当遇到 .git 文件夹时,此搜索将停止递归以进行优化。要搜索子模块,请使用 --deep-recurse 标志。

以下是一个示例目录树

foo/
foo/.git
foo/bar/src/main.rs
foo/bar/Cargo.toml
foo/bar/.git
bar/.git
baz/.git

以下是一些示例输出

$ git project list
/home/you/projects/foo
/home/you/projects/bar
/home/you/projects/baz

$ git project list --deep-recurse
/home/you/projects/foo
/home/you/projects/foo/bar
/home/you/projects/bar
/home/you/projects/baz

gitproject gen-completions SHELL

此子命令将为您的所选 shell 生成自动完成脚本。脚本将打印到标准输出。当前 shell 选项包括

  • bash
  • zsh
  • fish
  • powershell
  • elvish

依赖关系

~15–24MB
~426K SLoC