# ════════════════════════════════════════════════════════════
# Git Configuration
# ════════════════════════════════════════════════════════════

[user]
    # Укажите ваше имя и email
	name = Dmitry
	email = ada.dmitry@gmail.com

[core]
    # Редактор по умолчанию
    editor = micro

    # Игнорировать изменения прав доступа
    filemode = false

    # Автоматическое преобразование CRLF в LF
    autocrlf = input

    # Предупреждать о пробелах в конце строк
    whitespace = trailing-space,space-before-tab

    # Использовать pager для вывода (bat если установлен)
    # -F: выходить если вывод помещается на один экран
    # -R: показывать цвета
    # -X: не очищать экран при выходе
    # -S: не переносить длинные строки
    pager = less -FRXS
	excludesfile = /home/ada/.gitignore_global
	quotepath = false

[init]
    # Имя основной ветки по умолчанию
    defaultBranch = main

[color]
    # Включить цветной вывод
    ui = auto
    branch = auto
    diff = auto
    status = auto

[color "branch"]
    current = yellow bold
    local = green
    remote = cyan

[color "diff"]
    meta = yellow
    frag = magenta bold
    old = red bold
    new = green bold
    whitespace = red reverse

[color "status"]
    added = green bold
    changed = yellow bold
    untracked = red bold

# ═══ Алиасы ═════════════════════════════════════════════════

[alias]
    # Базовые сокращения
    st = status
    co = checkout
    br = branch
    ci = commit
    cm = commit -m
    ca = commit --amend

    # Добавление файлов
    a = add
    aa = add --all
    ap = add --patch

    # Логи
    l = log --oneline --graph --decorate
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
    ll = log --pretty=format:'%C(yellow)%h%Cred%d %Creset%s%Cblue [%cn]' --decorate --numstat
    ls = log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Creset%d %s' --date=short
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

    # История файла
    filelog = log -u
    fl = log -u

    # Diff
    d = diff
    ds = diff --staged
    dc = diff --cached

    # Показать последний коммит
    last = log -1 HEAD --stat

    # Отменить последний коммит (сохранив изменения)
    undo = reset --soft HEAD^

    # Показать изменения в файле
    blame = blame -w -M -C

    # Быстрое переключение веток
    switch = checkout
    sw = checkout

    # Создать и переключиться на новую ветку
    cob = checkout -b

    # Удалить ветку
    brd = branch -d
    brD = branch -D

    # Обновить текущую ветку
    up = pull --rebase --autostash

    # Отправить текущую ветку
    push-current = push -u origin HEAD
    pc = push -u origin HEAD

    # Stash
    sl = stash list
    sa = stash apply
    ss = stash save
    sp = stash pop

    # Показать файлы в коммите
    show-files = show --pretty="" --name-only

    # Статистика коммитов
    contributors = shortlog -sn

    # Удалить удаленные ветки из локального репозитория
    prune-all = fetch --all --prune

    # Показать ветки с последними коммитами
    branches = branch -vv

    # Показать удаленные репозитории
    remotes = remote -v

    # Найти коммит по сообщению
    find = log --all --oneline --grep

    # Игнорировать изменения в файле
    ignore = update-index --assume-unchanged
    unignore = update-index --no-assume-unchanged
    ignored = !git ls-files -v | grep "^[[:lower:]]"

    # Создать архив текущей ветки
    archive-branch = !git archive --format=tar --prefix=$(git symbolic-ref --short HEAD)/ HEAD | gzip > $(git symbolic-ref --short HEAD).tar.gz

    # Показать размер репозитория
    repo-size = count-objects -vH

[push]
    # Отправлять только текущую ветку
    default = current

    # Автоматически создавать удаленную ветку
    autoSetupRemote = true

[pull]
    # Использовать rebase вместо merge при pull
    rebase = true

[fetch]
    # Автоматически удалять несуществующие удаленные ветки
    prune = true

[rebase]
    # Автоматически применять stash перед rebase
    autoStash = true

[merge]
    # Показывать конфликты в стиле diff3
    conflictStyle = diff3

    # Инструмент для разрешения конфликтов
    tool = vimdiff

[diff]
    # Алгоритм diff для лучшего качества
    algorithm = histogram

    # Показывать перемещения файлов
    renames = copies

    # Инструмент для просмотра diff
    tool = vimdiff

[status]
    # Показывать подмодули в статусе
    submoduleSummary = true

    # Показывать непроиндексированные файлы
    showUntrackedFiles = all

[log]
    # Показывать даты в относительном формате
    date = relative

[help]
    # Автоматически исправлять опечатки в командах (после 0.1 сек)
    autocorrect = 10

[credential]
    # Кэшировать пароли на 1 час
	helper = "!f() { /home/ada/.vscode-server/bin/e7fb5e96c0730b9deb70b33781f98e2f35975036/node /tmp/vscode-remote-containers-c2ca9419-d1b5-464d-a579-9a0e513fd732.js git-credential-helper $*; }; f"

# ═══ URL shortcuts ══════════════════════════════════════════

[url "git@github.com:"]
    insteadOf = gh:

[url "https://github.com/"]
    insteadOf = github:

[url "https://gitlab.com/"]
    insteadOf = gitlab:

# ═══ Дополнительные настройки ═══════════════════════════════

[filter "lfs"]
    # Git LFS (Large File Storage)
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true

# ═══ Ваши дополнительные настройки ═════════════════════════
# Добавьте свои настройки ниже
[safe]
	directory = /home/ada/Documents/Projects/DZR/attendance_mephi
