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
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 15
    • +1
      Открофенно говоря… это офигенно! =)
    • 0
      Добавьте комментарии к алиасам, а то даже непонятно, что мне этот блок алиасов даст вообще. После прочтения мне хотелось закрыть окно, но на глаза попался скриншот в комментариях. В общем, нужно подать всё это презентабельнее.
      • 0
        а я бы убился постоянно лишний раз «git» вбивать. Поэтому у меня куча однобуквенных алиасов прямо в шелле, например:
        s — git status
        с — git commit
        o — git checkout
        b — git branch
        и т.д.

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

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

              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
              Кстати, вот здесь, наверное, было бы к месту голосовое управление.
              Не как основное, а в дополнение к ручному вводу.
              «Гит! статус!»
              «Гит! бранчи!»
              «Гит! стяни!»
              «Гит! запихни!»
              «Гит! заныкай!» (stash)


              Хотя, это не офисный вариант, конечно.
              • +1
                Для 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.

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

                Самое читаемое