English | 日本語 | Русский | 中文 | 한국어 | Español | Français
📖 Это перевод, который может отставать от английского README — основного источника информации.
Команда gup обновляет бинарные файлы, установленные через "go install", до последней версии. gup обновляет все бинарные файлы параллельно, поэтому работает очень быстро. Она также предоставляет подкоманды для управления бинарными файлами в $GOPATH/bin ($GOBIN). Это кроссплатформенное программное обеспечение, которое работает на Windows, Mac и Linux.
Если вы используете oh-my-zsh, то для gup установлен алиас. Этот алиас - gup - git pull --rebase. Поэтому убедитесь, что алиас oh-my-zsh отключен (например, $ \gup update).
- Linux
- Mac
- Windows
gup уже доступен через winget, mise и nix помимо go install и Homebrew.
Если на вашей системе не установлена среда разработки golang, пожалуйста, установите golang с официального сайта golang.
go install github.com/nao1215/gup@latest
brew install nao1215/tap/gupwinget install --id nao1215.gupmise use -g gup@latestnix profile install nixpkgs#gogupСтраница релизов содержит пакеты в форматах .deb, .rpm и .apk. Команда gup использует команду go внутренне, поэтому требуется установка golang.
Каждый релиз поставляется с метаданными цепочки поставок, чтобы вы могли проверить то, что скачиваете:
- Подписанные контрольные суммы —
checksums.txtподписан с помощью cosign (без ключей), создаваяchecksums.txt.sigstore.json. - SBOM — к каждому архиву релиза прикреплена SPDX Software Bill of Materials.
- Происхождение сборки — происхождение сборки SLSA удостоверяется через GitHub OIDC.
Проверьте подписанные контрольные суммы (затем сверьте свой архив с checksums.txt):
cosign verify-blob \
--bundle checksums.txt.sigstore.json \
--certificate-identity-regexp 'https://github.com/nao1215/gup/\.github/workflows/release\.yml@refs/tags/.*' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
checksums.txt
sha256sum --check --ignore-missing checksums.txtПроверьте происхождение сборки скачанного артефакта с помощью GitHub CLI:
gh attestation verify gup_<version>_<os>_<arch>.tar.gz --repo nao1215/gupЕсли вы хотите обновить все бинарные файлы, просто выполните $ gup update.
$ gup update
update binary under $GOPATH/bin or $GOBIN
[ 1/30] github.com/cheat/cheat/cmd/cheat (Already up-to-date: v0.0.0-20211009161301-12ffa4cb5c87 / go1.22.4)
[ 2/30] fyne.io/fyne/v2/cmd/fyne_demo (Already up-to-date: v2.1.3 / go1.22.4)
[ 3/30] github.com/nao1215/gal/cmd/gal (v1.0.0 to v1.2.0 / go1.22.4)
[ 4/30] github.com/matsuyoshi30/germanium/cmd/germanium (Already up-to-date: v1.2.2 / go1.22.4)
[ 5/30] github.com/onsi/ginkgo/ginkgo (Already up-to-date: v1.16.5 / go1.22.4)
[ 6/30] github.com/git-chglog/git-chglog/cmd/git-chglog (Already up-to-date: v0.15.1 / go1.22.4)
:
:Если вы хотите обновить только указанные бинарные файлы, укажите несколько имён команд, разделённых пробелом.
$ gup update subaru gup ubume
update binary under $GOPATH/bin or $GOBIN
[1/3] github.com/nao1215/gup (v0.7.0 to v0.7.1, go1.20.1 to go1.22.4)
[2/3] github.com/nao1215/subaru (Already up-to-date: v1.0.2 / go1.22.4)
[3/3] github.com/nao1215/ubume/cmd/ubume (Already up-to-date: v1.4.1 / go1.22.4)Если вы не хотите обновлять некоторые бинарные файлы, просто укажите бинарные файлы, которые не должны быть обновлены, разделённые ',' без пробелов в качестве разделителя. Также работает в сочетании с --dry-run
$ gup update --exclude=gopls,golangci-lint //--exclude или -e, этот пример исключит 'gopls' и 'golangci-lint'Если вы хотите управлять источником обновления для каждого бинарного файла, используйте следующие опции:
--main(-m): обновление через@main(при ошибке откат на@master)--master: обновление через@master--latest: обновление через@latest
Выбранный канал сохраняется в gup.json и переиспользуется в следующих запусках gup update.
$ gup update --main=gup,lazygit --master=sqly --latest=airПодкоманда list выводит информацию о командах в $GOPATH/bin или $GOBIN. Выводимая информация - это имя команды, путь пакета и версия команды.

Если вы хотите удалить команду в $GOPATH/bin или $GOBIN, используйте подкоманду remove. Подкоманда remove спрашивает, хотите ли вы её удалить, перед удалением.
$ gup remove subaru gal ubume
gup:CHECK: remove /home/nao/.go/bin/subaru? [Y/n] Y
removed /home/nao/.go/bin/subaru
gup:CHECK: remove /home/nao/.go/bin/gal? [Y/n] n
cancel removal /home/nao/.go/bin/gal
gup:CHECK: remove /home/nao/.go/bin/ubume? [Y/n] Y
removed /home/nao/.go/bin/ubumeЕсли вы хотите принудительное удаление, используйте опцию --force.
$ gup remove --force gal
removed /home/nao/.go/bin/galЕсли вы хотите знать, является ли бинарный файл последней версией, используйте подкоманду check. Подкоманда check проверяет, является ли бинарный файл последней версией, и отображает имя бинарного файла, который нуждается в обновлении.
$ gup check
check binary under $GOPATH/bin or $GOBIN
[ 1/33] github.com/cheat/cheat (Already up-to-date: v0.0.0-20211009161301-12ffa4cb5c87 / go1.22.4)
[ 2/33] fyne.io/fyne/v2 (current: v2.1.3, latest: v2.1.4 / current: go1.20.2, installed: go1.22.4)
:
[33/33] github.com/nao1215/ubume (Already up-to-date: v1.5.0 / go1.22.4)
If you want to update binaries, the following command.
$ gup update fyne_demo gup mimixboxКак и другие подкоманды, вы можете проверить только указанные бинарные файлы.
$ gup check lazygit mimixbox
check binary under $GOPATH/bin or $GOBIN
[1/2] github.com/jesseduffield/lazygit (Already up-to-date: v0.32.2 / go1.22.4)
[2/2] github.com/nao1215/mimixbox (current: v0.32.1, latest: v0.33.2 / go1.22.4)
If you want to update binaries, the following command.
$ gup update mimixboxПо умолчанию check и update выводят каждый бинарный файл, что создаёт много шума, когда у вас установлено множество инструментов. Передайте --quiet (-q), чтобы скрыть строки об актуальных версиях и показать только бинарные файлы, которые были обновлены (или для которых доступно обновление), а также сбои, после чего следует однострочная сводка. Ошибки всегда выводятся в STDERR, поэтому они остаются видимыми. Если также указан --json, флаг --quiet игнорируется и выводится полный JSON-массив.
$ gup update --quiet
github.com/nao1215/gup (v0.7.0 to v0.7.1)
gup: 1 updated, 8 up-to-date, 0 failed
$ gup check -q
github.com/nao1215/gup (current: v0.7.0, latest: v0.7.1 / go1.22.4)
If you want to update binaries, run the following command.
$ gup update gup
gup: 1 update available, 8 up-to-date, 0 failedlist, check и update принимают --json, выводя JSON-массив вместо человекочитаемого вывода (который остаётся по умолчанию).
$ gup check --json
[
{
"name": "gup",
"import_path": "github.com/nao1215/gup",
"module_path": "github.com/nao1215/gup",
"channel": "latest",
"current_version": "v1.0.0",
"latest_version": "v1.1.0",
"current_go_version": "go1.22.4",
"installed_go_version": "go1.22.4",
"status": "update-available"
}
]Каждый элемент имеет следующие поля: name, import_path, module_path, channel (latest/main/master), current_version, latest_version (пусто для list), current_go_version, installed_go_version, status и error (опускается, если отсутствует). status принимает значения installed (list), up-to-date, update-available (check), updated (update) или error.
Массив всегда является корректным JSON, включая случаи частичных сбоев (такие пакеты получают "status": "error"; детали ошибки также выводятся в STDERR, поэтому STDOUT остаётся чистым JSON). Коды завершения не изменяются — check, сообщающий update-available, по-прежнему завершается с кодом 0.
Пустое глобальное окружение (ещё ни один бинарный файл не установлен через go install) рассматривается как нормальная ситуация первого запуска, а не как ошибка:
list,checkиupdateзавершаются с кодом0, выводя короткое информационное сообщение (или валидный пустой массив[]с--json).exportзавершается с кодом0и записывает пустойgup.json.
Указание неустановленного бинарного файла или исключение всех бинарных файлов по-прежнему является ошибкой использования и завершается с кодом 1.
Используйте export/import, если хотите установить одинаковые бинарные файлы golang на нескольких системах.
gup.json хранит import path, версию бинарного файла и канал обновления (latest / main / master).
import устанавливает точно ту версию, которая записана в файле.
{
"schema_version": 1,
"packages": [
{
"name": "gal",
"import_path": "github.com/nao1215/gal/cmd/gal",
"version": "v1.1.1",
"channel": "latest"
},
{
"name": "posixer",
"import_path": "github.com/nao1215/posixer",
"version": "v0.1.0",
"channel": "main"
}
]
}По умолчанию:
gup exportзаписывает в$XDG_CONFIG_HOME/gup/gup.jsongup import,gup checkиgup updateавтоматически ищут файл в следующем порядке:$XDG_CONFIG_HOME/gup/gup.json(если существует)./gup.json(если существует)
Если существуют оба файла gup.json (на уровне пользователя и ./gup.json), import, check и update сразу завершаются с ошибкой и просят устранить неоднозначность через --file, вместо того чтобы молча выбрать один. Путь всегда можно переопределить через --file (-f).
gup export всегда определяет сохранённые каналы обновления из канонического gup.json на уровне пользователя; --file/--output меняют только место назначения экспорта, поэтому экспорт в новый файл никогда не сбрасывает канал пакета обратно на latest.
※ Окружение A (например, ubuntu)
$ gup export
Export /home/nao/.config/gup/gup.json
※ Окружение B (например, debian)
$ gup importТакже export может вывести содержимое gup.json в STDOUT через --output. import может читать конкретный файл через --file.
※ Окружение A (например, ubuntu)
$ gup export --output > gup.json
※ Окружение B (например, debian)
$ gup import --file=gup.jsongup migrate BEFORE_PATH AFTER_PATH [BINARY...]gup migrate переустанавливает Go-бинарные файлы из BEFORE_PATH в AFTER_PATH,
используя точный import path@version, записанный в build info каждого бинарного
файла (он никогда не выполняет тихое обновление до @latest). Внутренне он просто
устанавливает GOBIN в AFTER_PATH и запускает обычный путь go install, поэтому
бинарные файлы пересобираются с текущим используемым тулчейном Go.
Когда вы управляете Go с помощью mise, обновление Go
может изменить реальный путь $GOBIN для каждой версии Go. В результате
инструменты, установленные под предыдущим $GOBIN, больше не видны новому Go.
gup migrate позволяет переустановить тот же набор Go-инструментов из старого
$GOBIN в новый:
# Переустановить все go-install инструменты из старого GOBIN в новый GOBIN
$ gup migrate ~/.local/share/mise/installs/go/1.24.0/bin ~/.local/share/mise/installs/go/1.25.0/bin
# Перенести только указанные бинарные файлы
$ gup migrate /old/gobin /new/gobin gopls airmigrate работает только на добавление:
- Он никогда не удаляет и не очищает файлы в
AFTER_PATH. - Бинарные файлы, которые уже существуют в
AFTER_PATH, по умолчанию пропускаются. Используйте--force, чтобы переустановить их поверх. AFTER_PATHсоздаётся автоматически, если он не существует.BEFORE_PATHиAFTER_PATHдолжны быть разными каталогами.
Бинарные файлы, чей import path или версию невозможно определить, а также
сборки для разработки (devel / (devel)), пропускаются, а не обновляются,
поэтому локальные или невоспроизводимые сборки никогда не ломаются.
Поддерживаемые флаги: --dry-run (-n), --notify (-N), --jobs (-j),
--force.
Подкоманда man по умолчанию генерирует man-страницы в /usr/share/man/man1. Если задан MANPATH, gup записывает в каталог man1 под каждой записью, создавая его, если он ещё не существует. Недоступный для записи путь завершается с понятной ошибкой.
$ sudo gup man
Generate /usr/share/man/man1/gup-bug-report.1.gz
Generate /usr/share/man/man1/gup-check.1.gz
Generate /usr/share/man/man1/gup-completion.1.gz
Generate /usr/share/man/man1/gup-export.1.gz
Generate /usr/share/man/man1/gup-import.1.gz
Generate /usr/share/man/man1/gup-list.1.gz
Generate /usr/share/man/man1/gup-man.1.gz
Generate /usr/share/man/man1/gup-migrate.1.gz
Generate /usr/share/man/man1/gup-remove.1.gz
Generate /usr/share/man/man1/gup-update.1.gz
Generate /usr/share/man/man1/gup-version.1.gz
Generate /usr/share/man/man1/gup.1.gzcompletion выводит скрипты автодополнения в STDOUT, когда вы передаёте имя оболочки.
Чтобы установить файлы автодополнения в пользовательское окружение для bash/fish/zsh, используйте --install.
Для PowerShell перенаправьте вывод в файл .ps1 и подключите его из профиля.
$ gup completion bash > gup.bash
$ gup completion zsh > _gup
$ gup completion fish > gup.fish
$ gup completion powershell > gup.ps1
# Автоматически установить файлы в стандартные пользовательские пути
$ gup completion --install--install требует, чтобы была задана HOME; при пустой HOME она сразу завершается с ошибкой (не записывая файлы в текущий каталог) и завершается с ненулевым кодом, если какой-либо файл автодополнения не удаётся записать.
Если вы используете gup с опцией --notify, команда gup уведомляет вас на рабочем столе о том, было ли обновление успешным или неуспешным после завершения обновления.
$ gup update --notifyПо умолчанию gup раскрашивает свой вывод. Чтобы отключить цвета, передайте --no-color или установите переменной окружения NO_COLOR непустое значение (следуя соглашению NO_COLOR). Это полезно при перенаправлении вывода через конвейер, в логах CI или при глобально установленной NO_COLOR.
$ gup update --no-color
$ NO_COLOR=1 gup updategup выполняет обновления параллельно, поэтому завершает работу быстрее, чем инструменты, обновляющие бинарные файлы по одному. Обновление 9 бинарных файлов, для каждого из которых была доступна более новая версия:
| Инструмент | Стратегия | Время |
|---|---|---|
| gup update | параллельно | 0.7s |
| go-global-update | последовательно | 2.9s |
цикл go install |
последовательно | 2.9s |
Измерено на AMD Ryzen AI Max+ 395 (32 ядра) / 64 ГБ ОЗУ / Ubuntu 26.04 / go 1.26.4, медиана из 5 запусков с прогретым кешем модулей Go. Время зависит от времени сборки каждого бинарного файла и вашего CPU.
| Возможность | gup | go-global-update | go install loop |
|---|---|---|---|
| Параллельное обновление | Да | Нет | Вручную |
Каналы обновления для каждого пакета (latest/main/master) |
Да | Нет | Вручную |
| Экспорт/импорт набора инструментов | Да | Нет | Вручную |
Перенос бинарных файлов в новый $GOBIN |
Да | Нет | Вручную |
Машиночитаемый вывод JSON (--json) |
Да | Нет | Нет |
| Генерация/установка автодополнения оболочки | Да | Нет | Нет |
update переустанавливает актуальные бинарные файлы |
Нет | Да | Да |
migrate --force переустанавливает, когда цель уже существует |
Да | Нет | Вручную |
| Диагностика сбоев / подсказки по дальнейшим шагам | Нет | Да | Нет |
Поддержка NO_COLOR |
Да | Да | — |
| Не требуется дополнительный инструмент (только официальный тулчейн) | Нет | Нет | Да |
Прежде всего, спасибо за то, что уделяете время участию! ❤️ Смотрите CONTRIBUTING.md для получения дополнительной информации. Рабочий процесс разработки, чек-лист качества и управление инструментами описаны в CONTRIBUTING.md. Вклады связаны не только с разработкой. Например, GitHub Star мотивирует меня к разработке!
Если вы хотите отправить комментарии, такие как "найден баг" или "запрос дополнительных функций" разработчику, пожалуйста, используйте один из следующих контактов.
Вы можете использовать подкоманду bug-report для отправки отчёта о баге.
$ gup bug-report
※ Откроется страница GitHub issue в вашем браузере по умолчанию
Проект gup лицензирован на условиях Apache License 2.0.
Спасибо этим замечательным людям (ключ emoji):
CHIKAMATSU Naohiro 💻 |
KEINOS 💻 |
mattn 💻 |
Justin Lecher 💻 |
Lincoln Nogueira 💻 |
Masaya Watanabe 💻 |
memreflect 💻 |
Akimo 💻 |
rkscv 💻 |
Ville Skyttä 💻 |
Zephyr Lykos 💻 |
iTrooz 💻 |
Tiago Peczenyj 💻 |
Этот проект следует спецификации all-contributors. Приветствуются вклады любого рода!


