Перейти к главному содержимому

Разные полезности при работе с git

Разные полезности при работе с git

Шаблон файла для настройки .gitconfig

Работает и под windows.

Файл находится в "домашнем" каталоге пользователя. Под windows он (каталог) определяется переменной среды HOME или (если переменная не задана), то в зависимости от версии ОС C:\Users\username\ или C:\Documents and settings\username.

Под linux обычно это /home/username.

В домашнем каталоге следует создать подкаталог certs и положить туда файл с сертификатами ca-bundle.crt.

Файл настроек:

[core]
    editor = notepad.exe
    autocrlf = true
    whitespace = trailing-space,space-before-tab,indent-with-non-tab,cr-at-eol
    quotePath = false
    compression = 9
    commitGraph = true
[http]
    sslCAInfo = ~/certs/ca-bundle.crt
    sslCAPath = ~/certs
[alias]
    co = checkout
    ci = commit
    st = status
    br = branch
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
    sub = submodule update --init --recursive
    rd = branch -rd
    rr = branch -rd
    chmod = update-index --chmod=+x
[push]
    default = matching
[fetch]
    recurseSubmodules = true
    prune = true
[submodule]
    recurse = true
[sendpack]
    sideband = false
[user]
    name = unknown
    email = unknown@example.com

Переместить ветку git на другой коммит без вытаскивания

git branch -f master origin/master

git push во все remote

Файл gitpusha.bat для windows:

@rem # Если поместить этот файл в одну из директорий, прописанных в системной
@rem # переменной окружения PATH, то можно прямо из любого репозитория
@rem # вызывать gitpusha [parameters] что будет аналогично
@rem # запуску git push <remote-name> [parameters] последовательно для всех
@rem # заданных remote в текущем репозитории

git remote | xargs -l -t git push %*

Скрипт gitpusha для linux:

#!/bin/sh

git remote | xargs -l -t git push "$@"

Количество коммитов в git-репозитории

Статистика по пользователям
git shortlog --all -s -n
Просто общее количество
git rev-list --count --all
За период
git rev-list --count --since="Jan 1 2020"  --before="Dec 31 2020" --all

Инициализация сабмодулей по файлу .gitmodules

#!/bin/sh

set -e

git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
    while read path_key path
    do
        url_key=$(echo $path_key | sed 's/\.path/.url/')
        url=$(git config -f .gitmodules --get "$url_key")
        git submodule add $url $path
    done

Удаление недостижимых объектов из локального репозитория git

git reflog expire --expire-unreachable=now --all
git gc --prune=now
git fsck --unreachable --no-reflogs

Замена url для git

Если надо массово заменить URL для всех обращений к репозиториям (например, при работе через какой-либо прокси), то достаточно в глобальный .gitconfig или в config репозитория добавить что-то типа такого:

[url "ssh://git@127.0.0.1:2222/"]
    insteadOf = git@github.com:

Или, например, чтобы заменить все обращения по https на ssh:

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

Само собой, это можно сделать и командой:

git config --global url."git@github.com:".insteadOf https://github.com/

Установка имени пользователя и email для репозитория

#!/bin/sh

git config user.name myusername
git config user.email myemail@users.noreply.github.com