am-git is a native git client for AmigaOS, written in AmLang.
It speaks the git smart protocol directly over TCP/TLS - there
is no shelling out to a real git binary at runtime.
Commands: init, clone, fetch, pull, push, commit, add, unstage,
rm, mv, status, log, diff, show, branch, tag, checkout, merge,
rebase, cherry-pick, revert, reset, merge-base, config and more.
Clone/fetch/push/pull work over https://, http:// and ssh
remotes (validated byte-for-byte against reference git output
on GitHub and a local git http-backend).
https:// remotes need AmiSSL 4+. Per-host credentials can be
kept in ENV:AM_GIT_NETRC (netrc format), with
AM_GIT_USERNAME/AM_GIT_PASSWORD as a simple single-login
fallback - use a personal access token for GitHub.
ssh remotes use an external ssh client - BebboSSH from Aminet:
1. setenv AM_GIT_SSH bebbossh
2. bebbosshkeygen -f ENVARC:.ssh/id_ed25519
3. register ENVARC:.ssh/id_ed25519.pub with the server
(GitHub: Settings -> SSH and GPG keys)
On first connect am-git forwards bebbossh's trust-this-host
question to your shell; answer yes once per host.
Set stack to at least 100000 before running.
Changes in 0.12.1 (performance and fixes):
- Packed repositories are much faster. am-git now writes
a small index (.amidx) next to each packfile, so
commands read only the objects they need instead of
parsing the whole pack on every run.
- status/diff no longer re-hash unchanged files: they use
the index's stored size and timestamp (the same trick
real git uses), so status is quick even on large trees.
- Reading large files is dramatically faster (bulk reads
instead of one byte at a time).
- Fixed: files that are tracked but sit under a
.gitignore'd directory were wrongly reported as
deleted; they are now handled like real git.
- commit reads user.name / user.email from .git/config
and ~/.gitconfig, not just environment variables, so it
works on an already-configured repo.
- New command: unstage <path> - the inverse of add
(like git restore --staged / git reset HEAD <path>).
- show <commit>:<path> now prints a file's contents at
that commit, and log accepts a start ref
(log <branch|tag|commit>).
See am-git.txt in the archive for full usage, the complete
command set and credential setup.
|