All Projects β†’ Matt-Gleich β†’ Fgh

Matt-Gleich / Fgh

Licence: mit
πŸ“ Automate the lifecycle and organization of your cloned GitHub repositories

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Fgh

Microplane
A CLI tool to make git changes across many repos, especially useful with Microservices.
Stars: ✭ 154 (+43.93%)
Mutual labels:  cli, repository-management
Cli.fan
Blog about notable commandline tools
Stars: ✭ 106 (-0.93%)
Mutual labels:  cli
Cli
Calibre's Node.js API and Command Line Client (CLI)
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Igniteui Cli
Ignite UI Command-Line Interface by Infragistics
Stars: ✭ 105 (-1.87%)
Mutual labels:  cli
Nord Termite
An arctic, north-bluish clean and elegant Termite color theme.
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Think Builder
A command line toolit to build applications' CRUD/mvc scaffold for thinkphp v6. η”¨δΊŽη”Ÿζˆ thinkphp v6 咞ζŸ₯ζ”Ήεˆ θ„šζ‰‹ζžΆδ»£η ηš„ε‘½δ»€θ‘Œε·₯具。
Stars: ✭ 105 (-1.87%)
Mutual labels:  cli
Multivisor
Centralized supervisor WebUI and CLI
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Force Dev Tool
[DEPRECATED] Command line tool supporting the Force.com development lifecycle
Stars: ✭ 106 (-0.93%)
Mutual labels:  cli
Dotfiles
My personal collection of configuration files.
Stars: ✭ 105 (-1.87%)
Mutual labels:  cli
Devstats
πŸ“Š A CLI application that fetches stats from developer sites
Stars: ✭ 105 (-1.87%)
Mutual labels:  cli
Emplace
πŸ‘©β€β€οΈβ€πŸ’‹β€πŸ‘© Synchronize installed packages on multiple machines
Stars: ✭ 105 (-1.87%)
Mutual labels:  cli
Mal
MAL: A MyAnimeList Command Line Interface [BROKEN: BLAME MyAnimeList]
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Schema Registry
A CLI and Go client for Kafka Schema Registry
Stars: ✭ 105 (-1.87%)
Mutual labels:  cli
Cli
Upload your templates to codesandbox with a single command πŸ–οΈ. This repo has been moved here: https://github.com/codesandbox-app/codesandbox-importers/tree/master/packages/cli
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Unix Permissions
Swiss Army knife for Unix permissions
Stars: ✭ 106 (-0.93%)
Mutual labels:  cli
Awesome Cli
A curated list of awesome resources for building immersive CLI experiences.
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Hcledit
A command line editor for HCL
Stars: ✭ 104 (-2.8%)
Mutual labels:  cli
Reg
Docker registry v2 command line client and repo listing generator with security checks.
Stars: ✭ 1,485 (+1287.85%)
Mutual labels:  cli
Glsnip
copy and paste across machines
Stars: ✭ 107 (+0%)
Mutual labels:  cli
Clikt
Multiplatform command line interface parsing for Kotlin
Stars: ✭ 1,658 (+1449.53%)
Mutual labels:  cli
logo

fgh

GitHub release (latest by date) GitHub go.mod Go version Golang report card
build test lint release

πŸ“ Automate the lifecycle and organization of your cloned GitHub repositories

πŸ“œ Table of Contents

πŸ‘‹ Getting started

As you begin contributing to an increasing amount of GitHub repositories, you'll soon realize the effort it takes to organize and maintain them on your machine. fgh aims to solve this issue through the use of a CLI (command line application) to automate the entire lifecycle of your cloned repos, saving you time and helping you scale! Below is a list of the most useful automation commands:

πŸš€ Install

🍎 macOS

brew install Matt-Gleich/homebrew-taps/fgh

🐧 Linux and πŸ–₯ Windows

You can grab the binary from the latest release.

πŸ‘€ Try out fgh's automation

fgh remove, fgh clean, fgh ls, fgh pull, and fgh visualize can be tried out on your current repository structure with the addition of the -p flag. The value for this flag is the relative root path to the folder where all your git repos live. If we had the repo structure shown below and we were running fgh from ~ the root folder would be ./code/. This root folder is then passed into the command: fgh ls -p=./code/.

~
└─ code
   β”œβ”€ fgh
   β”œβ”€ dots
   β”œβ”€ turtle-site
   └─ work
      β”œβ”€ super-secret-code
      └─ website

πŸ“Ÿ Commands

πŸ”’ fgh login

Before using fgh, you'll need to give it access to your GitHub repos. Simply run fgh login to quickly get set up! fgh only uses this access to get metadata about the repo (e.g. main language, if private) and to clone the repo. fgh needs the full repo scope to access private repos.

If you need to use a GitHub custom access token, like a PAT, edit the secret configuration file. In Windows it is located in ~\.fgh\secrets.yml and ~/.config/fgh/secrets.yml in Linux and macOS. You should change/add the pat as seen below:

pat: <your token here>

βš™οΈ fgh configure

To configure other settings, run fgh configure for an interactive configuration experience.

☁️ fgh clone

To begin using fgh, you'll need to clone a repository, which you can do by running the following in a terminal window:

fgh clone <owner/name>

OR

fgh clone <name> # if the repo is under your account

All repositories are cloned into the following structure by default:

~
└─ github
   └─ OWNER
      └─ TYPE
         └─ MAIN_LANGUAGE
            └─ NAME

πŸ”  Keywords

These names correspond to the following keywords:

  • OWNER is the owner of the repository
  • TYPE is the type of the repository; one of the following:
    • public
    • private
    • template
    • archived
    • disabled
    • mirror
    • fork
  • MAIN_LANGUAGE is The main language that the repository contains. If no language is detected, fgh will just set it to Other
  • NAME is the name of the repository

If you would like to use a custom structure see the custom structures documentation. Usage of this command is as follows:

fgh clone <owner/name>

If we were to run fgh clone Matt-Gleich/fgh it would be cloned to ~/github/Matt-Gleich/public/Go/fgh/ by default (~ being your home directory). Once cloned, this path will be copied to your clipboard automatically (this can be turned off with fgh configure or just by editing the config file directly).

NOTE: On Linux machines running the X Window System, this program requires the xclip or xsel packages.

This structure can be somewhat difficult to navigate in the terminal using conventional methods such as the use of the cd command. Because of this, we created the fgh ls command and a way to use it with cd.

🚚 fgh migrate

Would you like to add your existing repositories to the fgh structure? All you have to do run the following command and it will move every single git repo in that directory and all subdirectories into the structure:

fgh migrate <folder>

An example would be:

fgh migrate code

This would migrate all git repos in the ./code folder into fgh's structure.

⬆️ fgh update

If any of a repository's fields are changed, such as its type, main language, owner, or name, the path to your local repository won't match.

Running fgh update will iterate over your local repositories and checks if any of them need updates. If they do, fgh will ask you if you want to move the entire repository to that new path.

For example, If I had this repository cloned and later decided to archive it, its path would change from ~/github/Matt-Gleich/public/Go/fgh/ to ~/github/Matt-Gleich/archived/Go/fgh/.

🧼 fgh clean

When you run this subcommand, fgh will check for the following on each repository:

  1. Has it modified locally in a certain amount of time?

    By default, this "amount of time" is 2 months. However, it can be changed with a flag! See fgh clean --help for more info.

  2. Has the repository been deleted on GitHub?

If either of those conditions are met, fgh will ask you if you would like to remove the aforementioned repository. It'll additionally show you some information about the repository itself.

NOTE: This only removes the repo locally!

πŸ—‘ fgh remove

Remove a selected cloned repository. Usage is as follows:

fgh remove <owner/name>

🧭 fgh ls

Get the path of a cloned repository. Usage is as follows:

fgh ls <owner/name>

You may omit owner if you own the repository, or if there is only one cloned repository with the given name.

⬇️ fgh pull

Pull all repos that don't have any non-pushed changes. Usage is as follows:

fgh pull

πŸ“Š fgh visualize

Visualize all of the cloned repos in a table. Usage is as follows:

fgh visualize

πŸ’‘ Tips

🀝 <owner/name> shorthand

Any command that takes <owner/name> as an argument allows you to leave off the owner if the repo is under your account. For example, I own this repo so I can just do

fgh clone fgh

instead of

fgh clone Matt-Gleich/fgh

🏎 fgh ls for cd

NOTE: This only works in macOS and Linux

If you would like to easily use the output of fgh ls for cd just add the following snippet to your ~/.zshrc or ~/.bashrc:

# cd with fgh (https://github.com/Matt-Gleich/fgh)
fcd() { cd "$(fgh ls "[email protected]" 2>/dev/null)" || ( echo "Failed to find repository" && return 1; ) }

If you're using Fish, add the following to your ~/.config/fish/config.fish:

function fcd --wraps "fgh ls"
  if ! cd (fgh ls $argv) > /dev/null
    echo "Failed to find repository"; return 1
  end
end

Once you add that and reload your terminal you can simply run fcd <owner/name> instead of fgh ls <owner/name>, copying the output to your clipboard, typing cd, and pasting the output. Much easier!

β˜‘οΈ Autocompletion

You can add autocompletion for fgh by running one of the following commands based on your shell:

Shell Command
zsh fgh completion zsh > "${fpath[1]}/_fgh"
fish fgh completion fish > ~/.config/fish/completions/fgh.fish
bash (linux) fgh completion bash > /etc/bash_completion.d/fgh
bash (macOS) fgh completion bash > /usr/local/etc/bash_completion.d/fgh

πŸ›  fgh's vscode extension

Thanks to the great work by @cjdenio fgh has a visual studio code extension! You can clone, open repos, and more right from vscode.

πŸ—‚ Custom Structures

Not a fan of the default structure used by fgh? Don't worry, you can change it without losing any of fgh's automation! Configuring custom structures takes place in the general configuration file. This file is located in ~/.config/fgh/config.yaml on Linux or macOS and ~\.fgh\config.yaml on Windows (~ is your home directory). There are two parts to creating custom structures:

πŸ“ structure_root

This is where the structure starts relative to your home folder. Make sure you use \ instead of / if you are on Windows. By default, the structure_root is github. Below is an example of what you would put in the general config file:

structure_root: "Documents/code/"

If we were to run fgh clone Matt-Gleich/fgh with the config shown above it would be cloned to ~/Documents/code/Matt-Gleich/public/Go/fgh.

By default, the home directory will be appended to the front of the path. If you like to turn this off add / for macOS/Linux or \ for Windows to the beginning of your path. Below is an example:

structure_root: "/code/github"

If we were to run fgh clone Matt-Gleich/fgh with the config shown above it would be cloned to /code/github/Matt-Gleich/public/Go/fgh.

πŸ—‚ structure

This is the structure used inside of the structure_root If you use the keywords shown in the clone structure it will automatically be replaced by the value for the repo and add the name of the repo to the end. Below is an example of what you would put in the general config file:

structure:
  - OWNER
  - repos
  - MAIN_LANGUAGE

If we were to run fgh clone Matt-Gleich/fgh with just the config shown above it would be cloned to ~/github/Matt-Gleich/repos/Go/fgh.

πŸ’‘ Example Config

Say we have the following config:

structure_root: "code"
structure:
  - OWNER

If we were to run fgh clone Matt-Gleich/fgh it would clone the repo to ~/code/Matt-Gleich/fgh.

🚚 Moving Repos to New Structure

Just run:

fgh migrate <old project root>

πŸ™Œ Contributing

Thank you for considering contributing to fgh! Before contributing, make sure to read the CONTRIBUTING.md file.

πŸ‘₯ Contributors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].