Jarred-Sumner / git-peek

git repo to local editor instantly
MIT License
722 stars 17 forks source link
bbcode cli clone fetch github github-api github1s githubcli githubclient homebrew nvim sublime-text vim vimrc visual-studio-code

git-peek

git peek is the fastest way to open a remote git repository in your local text editor.

Use it when you want to browse or search other people's code with your own editor.

Installation:

Homebrew:

brew install jarred-sumner/git-peek/git-peek

For Windows and Linux, install from npm directly:

npm install -g @jarred/git-peek

1-click "Peek" button for GitHub:

Usage:

git peek https://github.com/ylukem/pin-go
git peek https://github.com/jarred-sumner/atbuild
git peek https://github.com/facebook/react/pull/20790
git peek hanford/trends
git peek react
git peek https://github.com/jarred-sumner/fastbench.dev/tree/main/
git peek https://github.com/evanw/esbuild/blob/master/lib/common.ts

Pass git peek a git repository or a github link, and it will quickly fetch and open it in your local editor. It stores the repository in a temporary directory and deletes it when you close the editor or git peek.

It's fast.

❯ git peek https://github.com/nodejs/node/blob/master/lib/dgram.js
⏳ Extracting repository to temp folder...
💻 Launched editor in 0.20s

If you paste a link to a pull request on GitHub, it will open it quickly:

❯ git peek https://github.com/facebook/react/pull/20790
💻 Launched editor in 0.13s
⏳ Extracting repository to temp folder...
💿 Finished downloading repository!

Much faster than cloning.

If you don't pass git peek input, it will let you search Github repositories and show trending repositories:

❯ git peek
Search Github repositories:
> Search
❯ iam-abbas/Reddit-Stock-T | Fetch currently trending stocks on Reddit
  codeSTACKr/free-develope | Free Developer Resources
  justjavac/1s             | 天若有情天亦老,我为网站加一秒
  PaddlePaddle/PaddleNLP   | NLP Core Library and Model Zoo based on PaddlePa
  ModernPwner/cicuta_viros |
  jevakallio/vscode-live-f | Run your web app inside VS Code
  getActivity/AndroidCodeS | Android 代码规范文档
  gigantz/react-xpress     | React renderer to build Node.js server

If you type a repository name without the owner (react instead of facebook/react), it will search:

❯ git peek react
Search Github repositories:
> react
❯ facebook/react           | A declarative, efficient, and flexible JavaScrip
  typescript-cheatsheets/r | Cheatsheets for experienced React developers get
  duxianwei520/react       |  React+webpack+redux+ant design+axios+less全家桶后台管
  discountry/react         | React docs in Chinese | React 中文文档翻译
  Cathy0807/react          | 京东首页构建
  react-redux-antd-es6/rea | 基于react的企业后台管理开发框架
  HackYourFuture/React     | This repository contains all the material for th
  geist-org/react          | Modern and minimalist React UI library.

If you paste a link to a file on GitHub, it will quickly open the file in your local editor:

❯ git peek https://github.com/Jarred-Sumner/git-peek/blob/main/src/index.ts
💻 Launched editor in 0.39s
⏳ Extracting repository to temp folder...
💿 Finished downloading repository!
❯ git peek -h
 Quickly preview remote Git repositories in your local editor

  USAGE
    $ git-peek [git link or github link or search query or repository file path]

  EXAMPLES
    git peek https://github.com/evanw/esbuild/blob/master/lib/common.ts
    git peek https://github.com/ylukem/pin-go
    git peek https://github.com/jarred-sumner/atbuild
    git peek hanford/trends
    git peek react

  OPTIONS
    -e, --editor=editor  [default: auto] editor to open with, possible values:
                          auto, code, subl, nvim, vim, vi, code-insiders.
                          By default, it will search $EDITOR. If not found, it
                          will try code, then subl, then vim.

    -r, --register        [default: false] Register the git-peek:// url protocol
                          This allows the "Open" buttons to work on
                          github.com once you\'ve installed the extension. Only
                          supported on macOS and Windows

    -o, --out=           [default: system temp directory] output directory to
                          store repository files in. If youre cloning a large
                          repo and your tempdir is an in-memory storage (/tmp),
                          maybe change this.

    -w, --wait           [default: false] wait to open the editor until the
                          repository finishes downloading. always on for vi.

    --no-keep            [default: false] keep the repository, rather than
                         deleting it.

    -b, --branch         [default: "master"] select a branch/ref to use.
                         if the repository doesn't use master/main,
                         you'll want to set this manually. but it will
                         try to infer from the input by default.

    -d                   [default: false] Ask the GitHub API
                          for the default_branch to clone.

    -h, --help           show CLI help

  ENVIRONMENT VARIABLES:
    $EDITOR: code --wait
    $GITHUB_TOKEN: ********
    .env: ✅ $HOME/.git-peek

  For use with private GitHub repositories, set $GITHUB_TOKEN to a personal
  access token. To persist it, store it in your shell config or the .env shown above.

Private repositories & choosing an editor

To use git-peek with private repositories, set a $GITHUB_TOKEN to a personal access token. If you don't want a global shell $GITHUB_TOKEN, you can set in $HOME/.git-peek.

Its a .env file, so the syntax looks like this:

EDITOR="code"
GITHUB_TOKEN="**********"

You can also save a custom editor this way. So you don't have to add -e vim everytime if $EDITOR is not propagating to the process.

How does this work?

If you pass it a GitHub repository, it fetches a tarball instead of using git and decompresses it while downloading it (streaming). From unscientific benchmarks, this is about 2x faster than cloning. While downloading & decompressing the tarball, it also downloads the specific file linked to (or the README.md) via JSDelivr's CDN. Whichever happens first, it opens in the editor (usually JSDelivr), but it will keep fetching the repo until its complete or the program exits.

If you pass it a git repository rather than a Github url, it does a partial clone instead of doing a full clone.

When your editor closes or you close git peek, it deletes the repository from your computer.

Changelog

1.3.18
1.3.14 - 1.3.17
1.3.14
1.3.8 - 1.3.13
1.3.7
1.3.6
1.3.5
1.3.4
1.3.3

1.3.0 - 1.3.2

Windows
Mac

Misc


1.1.30

git-peek now starts 32% faster (delayed loading ink until its used for search)

You can now store $EDITOR and $GITHUB_TOKEN in $HOME/.git-peek. Its a .env file, so the syntax looks like this:

EDITOR="code"
GITHUB_TOKEN="**********"

Removed using the $GITHUB_TOKEN from ~/.hubs/config.

Known Bugs

Sublime Text

subl --wait does not support folders, so git-peek is unable to detect when Sublime Text closes. On the CLI, this isn't a problem – it just shows a "Delete Repository Y/n" confirm message, same as other editors.

image

On the browser extension, I'm not really sure yet what to do about this.

Visual Studio Code doesn't have this problem because passing a directory to --wait correctly waits until the window is closed.

Originally inspired by github1s.com.