Friday, February 18, 2011

Мои git alias'ы

Решил тут написать алиасы, которые я использую в гите:

$ cat ~/.gitconfig
...
[alias]
di = diff --no-prefix
ll = status
fast-fix = !"git diff && read -p \"ready to commit?\" i && git commit -a && git push"


Итак по порядку:
git diff --no-prefix заменяет вывод с
--- a/path/to/file
+++ b/path/to/file

на
--- path/to/file
+++ path/to/file

что бывает удобно когда собираешься скопировать название файла мышкой (двойной клик, если в пути нет пробелов).

git ll это просто аналог башевского alias ll='ls -l'

Ну и наконец самое сложное: git fast-fix
сначала делается git diff && read -p "ready to commit?" эта штука выводит текущие изменения и ждёт когда я что-нибудь нажму или же нажму ctrl+c для отмены дальнейших действий. А действия дальше какие: git commit -a который понятно что делает: просит ввести коммит мессидж, если его ввести, то произойдёт git push, если нет, то коммита не будет и как следствие пуша :)

Во-первых почему называется fast-fix? потому, что на букву f начинается не так много команд, а на fa и вовсе ниодной, таким образом я набираю git fa[TAB][ENTER], можно было бы тогда и назвать git fa, но имхо это уже не такое очевидное сокращение, как di или ll.
Во-вторых зачем так сложно? Данная команда очень удачна в случае, когда изменений минимальное количество: скажем нужно просто исправить опечатку. Тогда чтобы сделать это нужно выполнить всего 3 действия: git pull; edit somefile; git fast-fix. Ну причём первое не всегда обязательно, если вы забыли стянуть изменения, то при git push вам об этом скажут и можно будет отдельно сделать git pull; git push; Самое главное, что происходит проверка того, что вы собираетесь закоммитить: во время git diff (изменения по сравнению с working tree) и во время git commit (список файлов, по сравнению с HEAD). Во время которой может обнаружиться что-то, чего вы не ожидали :) и главное, можно будет исправить (ctrl+c в diff и пустое сообщение в git commit).
В-третьих зачем так просто? Да, когда изменений больше чем на пару строчек, то этот скрипт немного слабоват, и тут я открыт для предложений :)

No comments: