Skip to content

Latest commit

 

History

History
323 lines (239 loc) · 16.8 KB

File metadata and controls

323 lines (239 loc) · 16.8 KB

Иконка gitow

CONTRIBUTORS FORKS STARS

CRATES.IO DOWNLOADS

Открывайте страницы Git-репозиториев из командной строки

preview

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

Установка

Установка с crates.io

cargo install gitow

Так вы установите последнюю опубликованную версию из crates.io в каталог бинарников Cargo.

Установка через Nix (Flake)

nix run github:WhoSowSee/gitow
nix profile install github:WhoSowSee/gitow

nix run запускает без установки, nix profile install устанавливает бинарник в Nix-профиль.

Установка через Snap (Linux)

Скачайте .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 -- --print

Использование

gitow [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/repository

Repository spec разрешается по следующим правилам:

  • FORGE/OWNER/REPOSITORY использует короткий алиас публичного forge. Поддерживаются github, gitlab, codeberg, bitbucket, gitea и azure.
  • OWNER/REPOSITORY по умолчанию означает GitHub.
  • Полный домен, URL или SSH remote используется напрямую.
  • Голый REPOSITORY или FORGE/REPOSITORY наследует owner в следующем порядке: глобальный Git open.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, команда сообщает обо всех и завершается ошибкой.

Без явных remote gitow открывает:

  1. open.default.remote, если он настроен.
  2. origin, если он настроен.
  3. Tracked remote текущей ветки, если он настроен.

Ветка выбирается через -b или --branch. Для ref используется upstream-ветка выбранной ветки, если она есть, иначе выбранная или текущая ветка. В detached HEAD утилита сначала пробует точный tag, затем SHA текущего коммита.

Поддерживаемые remote-репозитории

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 по умолчанию

Задайте remote, который должен открываться без явного аргумента:

git config open.default.remote upstream

Пользовательский web-домен и протокол

Если хост 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, Forgejo и Gogs

Gitea-совместимые forge используют другой формат URL для веток. Codeberg и домены, содержащие gitea, forgejo или gogs, определяются автоматически. Для пользовательских доменов задайте тип forge явно:

git config "open.https://git.internal.example.forge" "gitea"

Значения gitea, forgejo и gogs нормализуются в gitea.

Алиасы SSH config

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 gitow

Разработка

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test

Star History

Stargazers over time

catppuccin

© 2026-present WhoSowSee

LICENSE