Git EVAC (/ɡɪt ˈɛvæk/) is my experimental repository management tool. Its purpose is to fix,
pull, push, and manage all local repositories as automated as possible, without having to intervene
actively.
But, as git isn't failsafe, the restrictions fit my workflow. If you have a different workflow, you have to either use my strictly triangular workflow with feature branches or look for a different tool.
- Least common denominator action precedes. [1]
- No rebases that lose reference to
masterbranch. - No shallow clones, use your gogs or gitea instance for that.
- Users or Organizations can be hosted on multiple remotes. [2]
- All remotes must use the same branch names.
originremote must be the source of truth for merge conflicts. [3]- Folder structure is
~/Software/<organization or user>/<repository>/.git.
[1] If one of the selected repositories requires a fix for a detached HEAD because of a merge conflict, you have to do that one first. If you have an uncommited change, you have to commit. Only clean work trees can be pushed and pulled to/from remotes.
[2] Remote name conventions are github, gitlab, gogs, or gitea. API endpoints are currently
unsupported, but will be hopefully supported to get an overview of available repositories; so that
batch cloning them locally can be automated, too.
[3] If there is no origin remote, you have to fix that.
This tool is very opinionated and enforces a triangular workflow, where work on downstream forks has
to be done in either feature-specific branches or on the master branch directly. Git Evac assumes that
local repositories are always in a clean state before push and pull actions, meaning that no
uncommited changes to the work tree are allowed.
All actions are batchable, meaning that they can be applied to multiple selected repositories in a queued manner once confirmed in a preceding overview dialog.
-
The Fix action precedes all others, and is displayed for a
merge conflict,detached HEADor otherwise unmergeable changes where theindexdiffers too much from thework tree. -
The Commit action is displayed when the
indexdiffers fromwork treeand uncommited local changes exist. -
The Pull action pulls changes from all remotes, and assumes that the current branch is in a clean state. After the initial
fetchit will attempt todiffagainstorigin/<branch>to figure out whether agit merge origin/<branch>is possible. -
The Push action pushes changes to all remotes, and assumes that the current branch is in a clean and merged state.
-
The Backup action exports a repository into a backup folder that will store the compressed file as
~/Backup/<organization or user>/<repository>.tar.gzfile. -
The Restore action imports a repository from a backup folder's compressed file into the
~/Software/<organization or user>/<repository>repository. If that repository already exists, it is renamed to<repository>.bakto prevent loss of changes.
Currently, this tool is highly experimental. The Settings View/Controller isn't implemented yet, and there's a separate TODO.md document that structures my cluttered ideas.
As Go doesn't have a reasonable UI framework, I created the Gooey Framework so that I can write all App related code in Go, too.
- The ARCHITECTURE.md documents the structure of the App and its Web APIs.
- The TODO.md documents what is planned as features and not implemented yet.
Build the git-evac command for production usage, it will use the embedded public.FS.
# Install go compiler/language
sudo pacman -S go;
# look ma, no sudo!
bash build.sh;
# starts a local server and opens a webview window
./build/linux/git-evac_linux_amd64;Run the git-evac-debug command for development purposes, it uses the
local filesystem and doesn't use the embedded public.FS. It automatically
rebuilds the wasm_exec.js and main.wasm files in the public folder on the fly
(also known as hot reload).
cd ./source;
# starts a local development server on http://localhost:3000
go run cmds/git-evac-debug/main.go;You can leave the development server running, and just reload/refresh the page to regenerate the new WebASM binary automatically. Build errors will be shown in the console.
- Make sure the Browser Cache is disabled in the
Dev Tools > Networktab. - For detailed errors, try to rebuild the
main.wasmwith the build.sh script.
This project is licensed under the GNU AGPL 3.0 license.
If you like the work that I do and want me to continue working on things like this; it would be awesome if you would sponsor this project:
