git

Git. Несколько полезных мелочей

Я уже продолжительное время использую git как на работе, так и для своих проектов, за это время накопилось некоторое количество полезностей, которыми хочу поделиться.

.gitconfig

Пользовательские настройки находятся в корне домашней директории, в файле .gitconfig, в нем можно указать не только имя и email коммитера (об этом можно почитать практически в любом руководстве для начинающих), но и много других интересных плюшек:

Редактор по умолчанию и глобальный .gitignore

Я привык использовать для мелких правок в файлах vim, причем его консольный вариант, поэтому и для git я использую именно его. Разумеется, указать можно любой, установленный в системе редактор.

[core]
editor = vim

Что бы в каждом проекте не вносить одни и те же правила в .gitignore, я использую глобальный файл

[core]
excludesfile = /home/gwinn/.config/git/gitignore

примерно с таким содержанием:

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
# ############
*.7z
*.dmg
*.iso
*.rar
*.tar

# # Logs and databases #
# ######################
*.log
*.sql

# # OS generated files #
# ######################
.DS_Store
.DS_Store?
._*
.bak
.swp
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db

# IDE #
# #####
.idea
*.kdev4
.settings
.project
.buildpath
nbproject

Этот файл содержит правила исключения для всех проектов пользователя, так что их не приходится каждый раз вносить в .gitignore, находящийся в корне проекта.

Алиасы

В руководствах по git часто можно встретить настройку алиасов, которые позволяют сокращать размер передаваемых git параметров, например:

[alias]
co = checkout
ci = commit
st = status
br = branch

Но таким же образом можно настроить, к примеру, структурированный вывод лога или отчет о коммитах за определенный период:

[alias]
hist = log --graph --date=short
report = "log --author='Alex Lushpai' --since='4 sunday ago' --until='now' --format='%Cgreen%ci%Creset %s%Creset' --no-merges"

Такие алиасы дадут следующий результат, соответственно:

git history

git report

Цвета

Давно замечено, что выделение цветом помогает ориентироваться в тексте, git поддерживает подсветку вывода:

[color]
    diff = true
    status = true
    branch = true
    interactive = true
    ui = true
[color "branch"]
    current = green bold
    local = green
    remote = red bold
[color "diff"]
    meta = yellow bold
    frag = magenta bold
    old = red bold
    new = green bold
[color "status"]
    added = green bold
    changed = yellow bold
    untracked = red

Примерный результат:

Подсветка вывода git

Кстати, на скриншоте выше можно заметить не только подсветку вывода, но и базовую информацию о текущей ветке и ее состоянии в приглашении командной строки, и надо заметить, это очень удобно, если Вы, конечно, предпочитаете работать с git в консоли. Для этого нужно произвести некоторые манипуляции с файлом .bashrc, расположенном в корне домашней директории пользователя, пример такого файла можно посмотреть тут.

В заключении, несколько вещей, которыми иногда приходится пользоваться

Отмена изменений до того, как сделан коммит:

git checkout -- . # для всех файлов
git checkout -- path/to/file # для конкретного

Переключение на еще не созданную ветку:

git checkout -b new_branch_name

Получение ветки из внешнего репозитория:

git checkout -b branch_name origin/branch_name

Получение коммитов из другой ветки в свою

git cherry-pick b50788b # Получить конкретный коммит
git cherry-pick b50788b 2569e9f 25f6e9f # Получить несколько коммитов
git cherry-pick b50788b..2569e9f # Получить диапозон

Запоминание пароля для http авторизации с помощью .netrc (в случае, если недоступна авторизация по ключу)

# Необходимо добавить строку в файл ~/.netrc
machine example.org login userlogin password userpassword

2 Comments

  • Сергей commented on 30.11.2013 Reply

    Довольно интересно про глобальный конфиг (в частности, про глобальный gitignore ) и про раскраску ! На мой взгляд, концовка испорчена привидением команд из обычного workflow. Начинали ведь про не очень широко используемые настройки!
    Вцелом, спасибо за информацию!

    • gwinn commented on 02.12.2013 Reply

      Не за что!
      А про вещи из workflow — далеко не все их используют, и я сам уже не раз рекомендовал их в качестве решения коллегам.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>