sync-kit
Go-версия утилиты sync-kit от ITu-Dev
CLI утилита для переноса изменений кода между компьютерами через текстовые архивы.
Решает проблему синхронизации кода когда нет доступа к git remote — упаковывает изменения в ZIP-архив с текстовыми файлами, который можно перенести любым способом.
Возможности
- Экспорт только изменённых файлов или полного снапшота
- Поддержка добавления, изменения, удаления и переименования файлов
- Автоматический бэкап перед импортом
- Определение и разрешение конфликтов
- Интерактивный выбор файлов
- Красивый терминальный интерфейс
- Один бинарный файл без зависимостей (Go)
Быстрый старт
Сборка
cd /path/to/sync-kit
# Сборка для текущей платформы
make build
# Или с помощью go
go build -o build/sync-kit ./cmd/sync-kit
Установка
# Установка в $GOPATH/bin
make install
# Или скопировать бинарник
cp build/sync-kit /usr/local/bin/
Кросс-платформенная сборка
# Сборка для всех платформ
make build-all
# Отдельно по платформам
make build-linux
make build-darwin
make build-windows
Использование
Экспорт изменений
# Перейди в репозиторий
cd /path/to/my-project
# Интерактивный режим — покажет изменения и спросит что включить
sync-kit export
# Быстрый экспорт без вопросов
sync-kit q
# Полный снапшот всего проекта
sync-kit export --full
# С описанием изменений
sync-kit export -m "Фикс бага авторизации"
# Исключить файлы
sync-kit export --exclude "*.test.go" --exclude "docs/*"
# Указать путь для архива
sync-kit export -o ./my-changes.zip
Результат: создаётся файл sync_YYYYMMDD-HHMMSS.zip
Импорт изменений
# Перейди в репозиторий на другом компьютере
cd /path/to/my-project
# Посмотреть что в архиве (без изменений)
sync-kit preview ./sync_20260115.zip
# Предпросмотр — что будет сделано
sync-kit import --dry-run ./sync_20260115.zip
# Применить изменения
sync-kit import ./sync_20260115.zip
# Без создания бэкапа
sync-kit import --no-backup ./sync_20260115.zip
# Принудительно без подтверждений
sync-kit import --force ./sync_20260115.zip
История
# Показать историю синхронизаций
sync-kit history
# Очистить историю
sync-kit history --clear
Команды
| Команда |
Описание |
sync-kit export |
Экспорт изменений (интерактивно) |
sync-kit q |
Быстрый экспорт без вопросов |
sync-kit export --full |
Экспорт всего проекта |
sync-kit import <file> |
Импорт архива |
sync-kit preview <file> |
Просмотр содержимого архива |
sync-kit history |
История синхронизаций |
Флаги export
| Флаг |
Описание |
-f, --full |
Полный снапшот репозитория |
-q, --quick |
Без интерактивных вопросов |
-o, --output <path> |
Путь для архива |
-m, --message <text> |
Описание изменений |
--exclude <pattern> |
Исключить файлы (можно несколько раз) |
--include <pattern> |
Включить только указанные файлы |
Флаги import
| Флаг |
Описание |
-d, --dry-run |
Показать что будет сделано |
--no-backup |
Не создавать бэкап |
-f, --force |
Без подтверждений |
--overwrite |
Перезаписать конфликтующие файлы |
Структура архива
sync_20260115-143022.zip
├── manifest.json # Метаданные и список операций
├── meta/
│ └── info.txt # Человекочитаемая сводка
└── files/
├── src/
│ ├── main.go.txt
│ └── utils/
│ └── helpers.go.txt
└── ...
Формат manifest.json
{
"version": "1.0",
"created": "2026-01-15T14:30:22.000Z",
"source": {
"repo": "my-project",
"branch": "feature/new-widget",
"commit": "abc123d",
"dirty": true
},
"mode": "changes",
"message": "Описание изменений",
"stats": {
"added": 2,
"modified": 3,
"deleted": 1,
"renamed": 1,
"totalSize": 12345
},
"operations": [
{ "type": "add", "path": "src/new.go", "size": 1234, "hash": "sha256:..." },
{ "type": "modify", "path": "src/main.go", "size": 5678, "hash": "sha256:..." },
{ "type": "delete", "path": "src/old.go" },
{ "type": "rename", "from": "src/foo.go", "path": "src/bar.go", "size": 890 }
]
}
Автоматически исключаемые файлы
node_modules/, vendor/
.git/
dist/, build/, .next/, .nuxt/
coverage/
package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb, go.sum
.env, .env.*
*.zip
.sync-backup/, .sync-history/
Типичные сценарии
Сценарий 1: Перенос текущих изменений
# На исходном компьютере
cd ~/projects/my-app
sync-kit q
# Создан: sync_20260115-143022.zip
# Перенеси архив на другой компьютер
# На целевом компьютере
cd ~/projects/my-app
sync-kit import ./sync_20260115-143022.zip
Сценарий 2: Полная синхронизация проекта
# На исходном компьютере
sync-kit export --full -m "Полный снапшот проекта"
# На целевом компьютере
sync-kit import --force ./snapshot_20260115.zip
Сценарий 3: Выборочный экспорт
# Только файлы из internal/
sync-kit export --include "internal/**"
# Всё кроме тестов
sync-kit export --exclude "**/*_test.go"
Требования
- Go 1.25+ (для сборки)
- Git (в репозитории)
Разработка
# Установка зависимостей
go mod download
# Запуск в режиме разработки
make dev ARGS="export"
# или
go run ./cmd/sync-kit export
# Сборка
make build
# Тесты
make test
# Линтер
make lint
# Форматирование
make fmt
Структура проекта
sync-kit/
├── build/ # Собранные бинарники
├── cmd/
│ └── sync-kit/
│ └── main.go # Entry point
├── internal/
│ ├── commands/ # Реализация команд
│ │ ├── export.go
│ │ ├── import.go
│ │ ├── preview.go
│ │ └── history.go
│ ├── core/ # Бизнес-логика
│ │ ├── git.go
│ │ ├── archive.go
│ │ ├── manifest.go
│ │ ├── diff.go
│ │ ├── backup.go
│ │ └── history.go
│ ├── ui/ # Терминальный интерфейс
│ │ ├── banner.go
│ │ ├── logger.go
│ │ ├── theme.go
│ │ ├── spinner.go
│ │ ├── progress.go
│ │ ├── prompts.go
│ │ ├── tree.go
│ │ └── table.go
│ ├── utils/ # Утилиты
│ │ ├── fs.go
│ │ ├── paths.go
│ │ └── filters.go
│ └── types/
│ └── types.go # Типы данных
├── go.mod
├── go.sum
├── Makefile
└── README.md
Лицензия
MIT