Tip
English version: README.md
Note
gitow - git open web. Rust CLI для открытия веб-страниц репозитория из текущего рабочего дерева. В её арсенале:
- Навигация по репозиторию - Открытие корня репозитория, веток, коммитов, issue, pull request или merge request, истории коммитов, релизов, отслеживаемых файлов и произвольных URL-суффиксов.
- Навигация по crates.io - Открытие одного или нескольких указанных пакетов из любого каталога или чтение имени текущего пакета через Cargo с помощью
-xили--crates-io. - Разбор remote - Поддержка имён remote, прямых remote URL,
insteadOf-переписываний и алиасов из SSH config. - Ссылки с учётом ветки - Выбор upstream-ветки, текущей ветки, точного тега или SHA текущего коммита в зависимости от состояния репозитория.
- Работа с несколькими remote - Открытие указанных remote в порядке аргументов или всех настроенных remote через
--all-remotes. - Вывод для скриптов - Печать URL через
--printилиBROWSER=echoбез запуска браузера. - Короткая поверхность команд - Один компактный бинарник
gitowпокрывает все цели навигации.
Important
- Git
- Rust 1.88 или новее
- Системная команда запуска браузера или переменная
BROWSER
cargo install gitowТак вы установите последнюю опубликованную версию из crates.io в каталог бинарников Cargo.
nix run github:WhoSowSee/gitow
nix profile install github:WhoSowSee/gitownix run запускает без установки, nix profile install устанавливает бинарник в Nix-профиль.
Скачайте .snap-пакет для своей архитектуры из GitHub Releases: amd64 для x86-64 или arm64 для ARM64.
С установленным snapd замените ./gitow.snap ниже на путь к скачанному файлу:
sudo snap install --dangerous --classic ./gitow.snap
snap run gitowФлаг --dangerous разрешает установку локального пакета без подписи Snap Store; --classic нужен для доступа к репозиториям и системному браузеру.
Запускайте snap run gitow из каталога Git-репозитория.
git clone https://github.com/WhoSowSee/gitow.git
cd gitow
cargo install --path .Команда соберёт gitow, затем поместит бинарник в каталог Cargo, обычно ~/.cargo/bin.
cargo build --release
./target/release/gitow --printЗапуск через Cargo:
cargo run --bin gitow -- --printgitow [OPTIONS] [REMOTE_OR_URL]...
Примеры:
gitow
gitow upstream
gitow origin gitlab
gitow git@github.com:owner/repo.git
gitow https://gitlab.example.com/group/project.git --branch main
gitow --repo mdv
gitow -R codeberg/whosowsee/mdv
gitow --print-c, --commit- открыть текущий коммит в интерфейсе forge.-x, --crates-io [PACKAGE]...- открыть указанные пакеты на crates.io, а без имён – текущий Cargo-пакет.-R, --repo <REPOSITORY>...- открыть удалённые репозитории без локального checkout.-i, --issue- открыть issue, извлечённую из имени текущей ветки.-m, --pull-requests- открыть страницу pull request или merge request.-C, --commits- открыть страницу коммитов выбранной ветки или ref.-r, --releases- открыть страницу релизов, если forge её поддерживает.-a, --all-remotes- открыть все настроенные remote.-b, --branch <BRANCH>- открыть выбранную ветку вместо текущей ветки или detached ref.-f, --file <PATH>- открыть отслеживаемый файл по пути относительно репозитория.-s, --suffix <SUFFIX>- добавить произвольный суффикс к сгенерированному URL.-p, --print- напечатать URL вместо запуска браузера.-h, --help- показать справку.-v, --version- показать версию программы.
gitow --commit
gitow -x
gitow -x serde clap
gitow --issue
gitow --pull-requests
gitow --commits
gitow --releases
gitow --all-remotes
gitow --file src/main.rs
gitow --suffix actions
gitow --print-R и --repo открывают один или несколько удалённых репозиториев независимо от текущего checkout:
gitow -R mdv
gitow -R gitlab/mdv
gitow -R rust-lang/rust
gitow -R codeberg/whosowsee/mdv
gitow --repo gitlab/group/project codeberg/owner/repositoryRepository spec разрешается по следующим правилам:
FORGE/OWNER/REPOSITORYиспользует короткий алиас публичного forge. Поддерживаютсяgithub,gitlab,codeberg,bitbucket,giteaиazure.OWNER/REPOSITORYпо умолчанию означает GitHub.- Полный домен, URL или SSH remote используется напрямую.
- Голый
REPOSITORYилиFORGE/REPOSITORYнаследует owner в следующем порядке: глобальный Gitopen.default.owner, локальныйopen.default.ownerтекущего репозитория, затем owner и forge текущегоorigin.
Настройте owner командой git config --global open.default.owner OWNER; без --global значение будет локальным. Если owner взят из config, голое имя по умолчанию открывается на GitHub, а алиас вроде gitlab/mdv меняет forge. При fallback на origin наследуется и forge этого remote.
Режим --repo поддерживает --pull-requests, --releases, --suffix и --print. Цели, зависящие от локального состояния – --commit, --issue, --commits, --branch и --file – отклоняются вместе с --repo.
Явно указанные remote открываются в порядке аргументов. Каждый отсутствующий remote выводится в стандартный поток ошибок и пропускается, если удалось разрешить хотя бы один другой remote. Если не существует ни одного из запрошенных remote, команда сообщает обо всех и завершается ошибкой.
Без явных remote gitow открывает:
open.default.remote, если он настроен.origin, если он настроен.- Tracked remote текущей ветки, если он настроен.
Ветка выбирается через -b или --branch. Для ref используется upstream-ветка выбранной ветки, если она есть, иначе выбранная или текущая ветка. В detached HEAD утилита сначала пробует точный tag, затем SHA текущего коммита.
gitow определяет URL-схемы для:
- GitHub
- GitHub Gist
- GitLab.com и self-hosted GitLab
- Gitea, Forgejo, Gogs и Codeberg
- Bitbucket Cloud
- Bitbucket Server / Atlassian Stash
- Azure DevOps / Visual Studio Team Services / Team Foundation Server
- AWS CodeCommit
- generic Git hosting URL
Некоторые страницы зависят от forge. Релизы поддерживаются для GitHub, GitLab и Gitea-совместимых forge. AWS CodeCommit не поддерживает shortcut для issue.
gitow использует обычную конфигурацию Git. Добавьте --global, чтобы применить параметр ко всем репозиториям.
Задайте remote, который должен открываться без явного аргумента:
git config open.default.remote upstreamЕсли хост Git remote отличается от хоста web UI, настройте URL-matched overrides:
git config "open.https://git.example.com.domain" "repo.intranet/subpath"
git config "open.https://git.example.com.protocol" "http"Например, remote:
ssh://git@git.example.com:7000/team/repo.git
может открываться как:
http://repo.intranet/subpath/team/repo
Gitea-совместимые forge используют другой формат URL для веток. Codeberg и домены, содержащие gitea, forgejo или gogs, определяются автоматически. Для пользовательских доменов задайте тип forge явно:
git config "open.https://git.internal.example.forge" "gitea"Значения gitea, forgejo и gogs нормализуются в gitea.
SCP-style remote могут разрешаться через алиасы SSH config:
Host work
HostName git.internal.example
git remote set-url origin work:team/repo.git
gitow --print
# печатает https://git.internal.example/team/repoУтилита сначала читает путь из переменной окружения GITOW_SSH_CONFIG, затем использует $HOME/.ssh/config, если файл существует.
По умолчанию gitow использует системный launcher:
- Windows:
cmd /C start - macOS:
open - Linux:
xdg-open - WSL: Windows PowerShell
Start
Задайте BROWSER, чтобы использовать конкретную команду:
BROWSER=firefox gitowИспользуйте --print или BROWSER=echo, чтобы проверить сгенерированные URL без открытия браузера:
gitow --print
BROWSER=echo gitowcargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test
© 2026-present WhoSowSee
