Эта директория содержит конфигурацию Git для репозитория dotfiles.
Конфигурация Git с интегрированным управлением секретами через KeePassXC и улучшенными инструментами diff/merge.
config.tmpl- Основная конфигурация Git (шаблон chezmoi)ignore- Глобальные паттерны gitignore
Секреты управляются безопасно через KeePassXC и внедряются через шаблоны chezmoi:
# .chezmoi.toml.tmpl
[keepassxc]
database = "~/Library/Mobile Documents/com~apple~CloudDocs/Secrets/vaults/secrets.kdbx"Файл config.tmpl использует интеграцию chezmoi с KeePassXC для получения секретов:
[user]
name = {{ (keepassxcAttribute "Git" "username").Text }}
email = {{ (keepassxcAttribute "Git" "email").Text }}
Хранимые секреты:
- Имя пользователя и email для Git
- Имя пользователя и токен GitHub
- Имя пользователя и токен GitLab
- Ключ подписи GPG
Использует diff-so-fancy для красивых, читаемых diff:
[core]
pager = diff-so-fancy | less --tabs=4 -RFX
Возможности:
- Подсветка синтаксиса
- Улучшенное форматирование
- Повышенная читаемость
- Заголовки файлов с четким разделением
Настроен для использования Neovim с трехсторонним diff:
[merge]
tool = nvim
[mergetool "nvim"]
cmd = nvim +"DiffviewOpen $branches" +tabonly
Преимущества:
- Визуальное трехстороннее слияние
- Знакомые vim-привязки клавиш
- Эффективное разрешение конфликтов
- Показывает базовую, локальную и удаленную версии
Файл ignore содержит паттерны для файлов, специфичных для проекта, которые должны быть исключены глобально:
.mise.toml # Версии инструментов mise для конкретного проекта
**/.claude/settings.local.json # Локальные настройки Claude CodeЭти паттерны исключают:
.mise.toml- Переопределения версий инструментов для проекта (личная настройка разработки).claude/settings.local.json- Локальная конфигурация Claude Code (специфична для машины)
Настроено в git:
[core]
excludesfile = ~/.config/git/ignore
[user]
name = Your Name (из KeePassXC)
email = your.email@example.com (из KeePassXC)
signingkey = GPG_KEY_ID (из KeePassXC)
[commit]
gpgsign = true # Подписывать все коммиты с помощью GPG
[core]
editor = nvim
autocrlf = input # Нормализация окончаний строк
whitespace = trailing-space,space-before-tab
pager = diff-so-fancy | less --tabs=4 -RFX
Общие алиасы Git для продуктивности:
[alias]
st = status -sb
co = checkout
br = branch
ci = commit
unstage = reset HEAD --
last = log -1 HEAD
visual = log --graph --oneline --all
[push]
default = current # Push текущей ветки с тем же именем
followTags = true # Push тегов вместе с коммитами
[pull]
rebase = true # Rebase вместо merge при pull
ff = only # Только fast-forward
[rebase]
autoStash = true # Автоматически stash изменений
autoSquash = true # Авто-squash fixup коммитов
[diff]
tool = nvimdiff
algorithm = patience # Лучший алгоритм diff
colorMoved = zebra # Подсветка перемещенных строк
[diff "bin"]
textconv = hexdump -v -C # Показать бинарные diff в hex
# Показать всю конфигурацию git
git config --list
# Показать конфигурацию из конкретного файла
git config --file ~/.config/git/config --list
# Показать конкретное значение
git config user.name# Просмотр diff с diff-so-fancy
git diff
# Сравнение веток
git diff main..feature
# Показать изменения коммита
git show HEAD# При возникновении конфликтов
git merge feature-branch
# Открыть инструмент слияния
git mergetool
# В Neovim:
# - Левое окно: LOCAL (ваши изменения)
# - Центральное окно: BASE (общий предок)
# - Правое окно: REMOTE (входящие изменения)
# - Нижнее окно: MERGED (результат)Команды слияния в Neovim:
:diffget LOCAL- Получить изменения из локальной версии:diffget REMOTE- Получить изменения из удаленной версии:diffget BASE- Получить изменения из базовой версии:wqa- Сохранить и выйти из всех окон
Секреты автоматически загружаются из KeePassXC при выполнении:
chezmoi applyДля обновления секретов:
- Обновите запись в KeePassXC
- Выполните
chezmoi applyдля регенерации~/.config/git/config - Проверьте с помощью
git config user.email
Отредактируйте ~/.config/git/ignore:
chezmoi edit ~/.config/git/ignoreИли напрямую:
echo "*.log" >> ~/.config/git/ignoreFish shell включает аббревиатуры и функции Git:
gb- Список ветокgco- Checkoutgp- Pushgl- Pull- Полный список см. в
dot_config/fish/config.fish.tmpl
LazyGit учитывает конфигурацию git:
- Использует diff-so-fancy для diff
- Учитывает настройки подписи GPG
- Использует настроенный редактор
Конфигурация Git управляется chezmoi:
- Шаблон обрабатывается при
chezmoi apply - Секреты внедряются из KeePassXC
- Изменения отслеживаются в репозитории dotfiles
- Убедитесь, что база данных KeePassXC разблокирована
- Проверьте путь к базе данных в
.chezmoi.toml.tmpl - Проверьте, что имена записей совпадают в KeePassXC
- Запустите
chezmoi apply -vдля подробного вывода
- Проверьте установку:
which diff-so-fancy - Проверьте установку mise:
mise ls | grep diff-so-fancy - Переустановите:
mise install ubi:so-fancy/diff-so-fancy
- Проверьте, что Neovim установлен:
which nvim - Проверьте конфигурацию git:
git config merge.tool - Попробуйте ручное слияние:
git mergetool --tool=nvim
- Проверьте ключ GPG:
gpg --list-secret-keys - Проверьте ключ подписи:
git config user.signingkey - Проверьте подпись:
echo "test" | gpg --sign
- Никогда не коммитьте сгенерированный файл
~/.config/git/config(содержит секреты) - Коммитьте только файл шаблона
config.tmpl - Храните базу данных KeePassXC в безопасности и делайте резервные копии
- Периодически обновляйте токены в KeePassXC
- При необходимости используйте разные токены для разных машин
Конфигурация Git имеет три уровня:
- Системный:
/etc/gitconfig - Глобальный:
~/.config/git/config(эта конфигурация) - Локальный:
.git/config(для конкретного репозитория)
Локальная конфигурация переопределяет глобальную:
cd /path/to/repo
git config user.email "work@example.com" # Только для этого репозиторияДобавьте в config.tmpl для разделения рабочих/личных настроек:
[includeIf "gitdir:~/work/"]
path = ~/.config/git/config-work
[includeIf "gitdir:~/personal/"]
path = ~/.config/git/config-personal
Для конкретных типов файлов:
[diff "json"]
textconv = jq .
[diff "image"]
textconv = exiftool