Browse, search and open Git repositories from within Alfred.
Get the workflow from GitHub or Packal.
This workflow requires some configuration before use. See Configuration for details.
repos [<query>]
— Show a list of your Git repos filtered by<query>
↩
— Open selected repo inapp_1
(see configuration)⌘+↩
— Open selected repo inapp_2
(see configuration)⌥+↩
— Open selected repo inapp_3
(requires configuration)^+↩
— Open selected repo inapp_4
(requires configuration)⇧+↩
— Open selected repo inapp_5
(requires configuration)fn+↩
— Open selected repo inapp_6
(requires configuration)
reposettings
— Opensettings.json
in default JSON editorreposupdate
— Force workflow to update its cached list of repositories. (By default, the list will only be updated—in the background—every 3 hours.)reposhelp
— Open this file in your browser
Before you can use this workflow, you have to configure one or more folders in which the workflow should search for Git repos. The workflow uses find
to search for .git
directories, so you shouldn't add huge directory trees to it, and use the depth
option to restrict the search depth. Typically, a depth
of 2
will be what you want (i.e. search within subdirectories of specified directory, but no lower). Add directories to search to the search_dir
array in settings.json
(see below).
The default settings.json
file looks like this:
{
"app_1": "Finder", // ↩ to open in this/these app(s)
"app_2": "Terminal", // ⌘+↩ to open in this/these app(s)
"app_3": null, // ⌥+↩ to open in this/these app(s)
"app_4": null, // ^+↩ to open in this/these app(s)
"app_5": null, // ⇧+↩ to open in this/these app(s)
"app_6": null, // fn+↩ to open in this/these app(s)
"global_exclude_patterns": [], // Exclude from all searches
"search_dirs": [
{
"path": "~/delete/this/example", // Path to search. ~/ is expanded
"depth": 2, // Search subdirs of `path`
"name_for_parent": 1, // Name Alfred entry after parent of `.git`. 2 = grandparent of `.git` etc.
"excludes": [ // Excludes specific to this path
"tmp", // Directories named `tmp`
"bad/smell/*" // Subdirs of `bad/smell` directory
]
}
]
}
This is my settings.json
:
{
"app_1": "Finder",
"app_2": ["Finder", "Sublime Text", "SourceTree", "iTerm"],
"app_3": "Sublime Text",
"app_4": "SourceTree",
"app_5": "iTerm",
"app_6": "GitHub",
"global_exclude_patterns": [],
"search_dirs": [
{
"path": "~/Code"
},
{
"path": "~/Sites"
}
]
}
Each entry in the search_dirs
list must be a mapping.
Only path
is required. depth
will default to 2
if not specified. excludes
are globbing patterns, like in .gitignore
.
name_for_parent
defaults to 1
, which means the entry in Alfred's results should be named after the directory containing the .git
directory. If you want Alfred to show the name of the grandparent, set name_for_parent
to 2
etc.
This is useful if your projects are structured, for example, like this and src
is the actual repo:
Code
Project_1
src
other_stuff
Project_2
src
other_stuff
…
…
Set name_for_parent
to 2
, and Project_1
, Project_2
etc. will be shown in Alfred, not src
, src
, src
…
The applications specified by the app_N
options are all called using open -a AppName path/to/directory
. You can configure any application that can open a directory in this manner. Some recommendations are Sublime Text, SourceTree, GitHub or iTerm.
Note: As you can see from my settings.json
, you can also set an app_N
value to a list of applications to open the selected repo in more than one app at once:
…
"app_2": ["Finder", "Sublime Text", "SourceTree", "iTerm"],
…
You can also use →
on a result to access Alfred's default File Actions menu.
This workflow is released under the MIT Licence.
It uses the Alfred-Workflow and docopt libraries (both MIT Licence).
The icon is by Jason Long, from git-scm.com, released under the Creative Commons Attribution 3.0 Unported Licence.