Pogo is a centralized version control system designed to be straightforward and efficient. It features an easy-to-use CLI client, a simple web UI, and robust support for both text and binary files. Pogo treats conflicts as first-class citizens, allowing them to be pushed to the remote to be resolved later.
## ⨠Goals
- **đ Centralized Server:** A single source of truth for all your data.
- **đģ Easy CLI Client:** No need for a complex GUI.
- **đ Simple Web UI:** For easy viewing of your repositories.
- **đ Cross-Platform Consistency:** Works the same on all major operating systems.
- **đ Text & Binary File Support:** Handles all file types with ease.
- **đĨ First-Class Conflicts:** Push conflicts to the remote and resolve them later.
- **đŗ No Named Branches:** Create branches by adding multiple children to a change and merge them by creating a new change with multiple parents. Changes are automaticall named.
- **đ Bookmarks:** Tag versions with bookmarks, like `main` for the current version or `v1.0.0` for a specific version. `main` is treated like a default branch in Git.
- **đĻ Go Module Support:** Import a Pogo repository as a Go module, no additional configuration or software required.
- **đ Adaptive Security:** Automatically detects and uses HTTPS/TLS when available, gracefully falls back to HTTP when needed.
## đ Installation
### NPM
```sh
npm install -g @pogo-vcs/pogo
```
### Homebrew
```sh
brew install --cask pogo-vcs/tap/pogo
```
### Scoop
```sh
scoop bucket add pogo-vcs https://github.com/pogo-vcs/scoop-bucket.git
scoop install pogo
```
### Docker (server)
```sh
docker pull ghcr.io/pogo-vcs/pogo:alpine
```
### From Source
To build Pogo from source, run the following commands:
```sh
git clone https://github.com/pogo-vcs/pogo.git
cd pogo
just build
```
This will create a `pogo` binary in the current directory. You can move this binary to a directory in your `PATH` to make it accessible from anywhere.
Required software for building:
- [go](https://go.dev/)
- [just](https://github.com/casey/just)
- [protoc](https://protobuf.dev/) (for gRPC)
- [sqlc](https://sqlc.dev/)
- [pnpm](https://pnpm.io/) (for Tailwind CSS)
- [templ](https://templ.guide/)
## đšī¸ Usage
The intended workflow for Pogo is simple and efficient:
1. **describe your changes:** Before you start working, use the `pogo describe` command to write a detailed description of the changes you are about to make and why. This helps you to think about the changes and to communicate them to others.
2. **Make your changes:** Make the changes to your files as you normally would.
3. **Iterate on the description:** As you work, you can iterate on the description to reflect the changes you are making. Maybe your implementation plan changed and you need your description to reflect that.
4. **Push your changes:** Regularly push your changes to the server using the `pogo push` command. A daemon process that pushes automatically will be added later. You constantly overwrite the current change until you are satisfied with it.
5. **Create a new change:** When you are done with your changes, create a new one using the `pogo new` command. You can optionally add one or more parent changes to the command. By default, your current change is used as the parent.
6. **Maintain a "main" bookmark:** Use bookmarks to tag important changes. You can set a bookmark with `pogo bookmark set main` to set the current change as the main one, or `pogo bookmark set main