Git

индекс
244,39

GITips & GITricks

Уже было несколько статей, где авторы рассказывали о том как скрасить консольные будни с git. В последней приведенной ссылке автор предлагает создавать алиасы, для работы c git, непосредственно в shell. Это не очень хороший способ, хотя бы потому, что, например алиас gc будет конфликтовать с одноименной командой пакета graphviz. git сам прекрасно умеет работать с собственным алиасами.


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

[alias]
s = status
b = branch
ba = branch -a -v -v
bs = !git-branch-status
bsi = !git-branch-status -i
ci = commit
co = checkout

d = diff -C
ds = diff -C --stat
dsp = diff -C --stat -p
dw = diff -C --color-words

l = log -C --decorate
ls = log -C --stat --decorate
lsp = log -C --stat -p --decorate
lg = log --graph '--pretty=tformat:%Cblue%h%Creset %Cgreen%ar%Creset %Cblue%d%Creset %s'
lga = log --graph '--pretty=tformat:%Cblue%h%Creset %Cgreen%ar%Creset %Cblue%d%Creset %s' --all
l19 = log --graph '--pretty=tformat:%Cblue%h%Creset %Cgreen%ar%Creset %Cblue%d%Creset %s' --all -19
# для сложных ветвлений
lsd = log --graph '--pretty=tformat:%Cblue%h%Creset %Cgreen%ar%Creset %Cblue%d%Creset %s' --all --simplify-by-decoration
ru = remote update
sb = show-branch --sha1-name
ls-del = ls-files -d
ls-mod = ls-files -m # включая удалённые файлы
ls-new = ls-files --exclude-standard -o
ls-ign = ls-files --exclude-standard -o -i
ka = !gitk --all
kdo = !gitk --date-order
kado = !gitk --all --date-order
kasd = !gitk --all --simplify-by-decoration


Добавляем в $HOME/.gitconfig данный кусок кода и пользуемся с большим удовольствием. Пользователи svn не будут путаться между svn co/git co, пользователи git получат раскрашенную историю коммитов и удобные шорткаты.

Ну, и в качестве бонуса, вывод текущей ветки в строке приглашения:

добавляем в $HOME/.bashrc
export PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w $(__git_ps1 "(%s)") \$\[\033[00m\] '
получаем:
image
+29
12 декабря 2009, 12:59
68

комментарии (15)

+1
LeNsTR #
Открофенно говоря… это офигенно! =)
+2
LeNsTR #
особенно порадовал такой вот вывод лога ^__^: rghost.ru/697767/image.png
0
mkevac #
Wow! Поделитесь фоном терминала, пожалуйста.
marko at kevac dot org
+2
LeNsTR #
да уж пусть будет всем и сразу (:
rghost.ru/703840/image.png
0
mkevac #
Спасибо огромное.
0
culebron #
Добавьте комментарии к алиасам, а то даже непонятно, что мне этот блок алиасов даст вообще. После прочтения мне хотелось закрыть окно, но на глаза попался скриншот в комментариях. В общем, нужно подать всё это презентабельнее.
0
Somebody32 #
а я бы убился постоянно лишний раз «git» вбивать. Поэтому у меня куча однобуквенных алиасов прямо в шелле, например:
s — git status
с — git commit
o — git checkout
b — git branch
и т.д.

И никаких конфликтов.
+1
wwarlock #
Конечно, о вкусах не спорят, но всё-таки, большей частью работаешь с материалом, хранимым в VCS, чем с контролем ревизий.
Потому, команды системы контроля ревизий вводятся не так чтобы уж и часто, чтобы можно было говорить о какой-то существенной экономии времени.
Но, вот минусов для себя я вижу, как минимум три:
— в однобуквенной команде шансов ошибиться значительно больше.
— эти команды сложнее запомнить, и чтобы вспомнить надо лезть в конфиг.
— когда приоритеты изменяться и вместо контроля ревизий прийдётся повесить на однобуквенный алиас что-то другое, то надо будет переучиваться и в переходный период чревато накладками.

И, добавлю от себя 5 копеек, оболочка bash (в.4.0.33) выполняет автодополнение параметров для git, svn, hg по tab. Оболочка zsh делает всё тоже самое плюс выводит развёрнутое описание для команды и поддерживает bzr.
Очень удобно.
+1
3ax #
хорошая идея! Особенно с приглашением! Пойду проверю, как оно под Виндой (cygwin) работать будет.
0
3ax #
нет, __git_ps1 — коммандо не найдена.
0
krak #
у меня и в Линуксе не работает :(
0
apkawa #
Есть такой кусочек кода. остается добавить либо в алиасы, либо создать скрипт.
git symbolic-ref HEAD|awk '{sub(/^refs\/heads\//, "", $1); print "("$1")"}'
0
apkawa #
Точнее не так. я ща сделал примерно так:

parse_git_branch ()
{
git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)#(git::\1)#'
}

PROMPT=" ${green}[${blue}%12~/${green}]
${blue}\$(parse_git_branch) ${red}%# ${nocolor}"

+2
wwarlock #
Кстати, вот здесь, наверное, было бы к месту голосовое управление.
Не как основное, а в дополнение к ручному вводу.
«Гит! статус!»
«Гит! бранчи!»
«Гит! стяни!»
«Гит! запихни!»
«Гит! заныкай!» (stash)


Хотя, это не офисный вариант, конечно.
+1
crtman #
Для zsh можно сделать так:

autoload -Uz vcs_info

precmd() {
psvar=()
vcs_info
[[ -n $vcs_info_msg_0_ ]] && psvar[1]="$vcs_info_msg_0_"
}

PS1="%n@%m:%~%(1v.%F{green}%1v%f.) $ "

vcs_info кстати работает почти со всеми популярными VCS.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.