понедельник, 30 марта 2015 г.

Инструменты для работы с Git – IDM UltraCompare 8.50.0.1023

Для полноты картины опишу и этот инструмент. Может кто привык к нему. Но как то он не очень работает с кодировочками.

Этап установки пропущу. Сразу же привету конфиг файл и примеры работы.

[core]
 repositoryformatversion = 0
 filemode = false
 bare = false
 logallrefupdates = true
 symlinks = false
 ignorecase = true
 hideDotFiles = dotGitOnly

[diff]
 tool = p4m
 tool = kdiff3
 tool = dm
 tool = dfu
 tool = wm
 tool = ss
 tool = bc4
 tool = araxis
 tool = edp
 tool = ucp

[difftool "p4m"]
 cmd = "p4merge.exe $LOCAL $REMOTE"

[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe

[difftool "dm"]
 cmd = C:/Program\\ Files/DiffMerge/sgdm.exe $LOCAL $REMOTE

[difftool "dfu"]
 cmd = diffusew $LOCAL $REMOTE

[difftool "wm"]
 cmd = winmergeu $LOCAL $REMOTE

[difftool "ss"]
 cmd = smartsynchronize.exe $LOCAL $REMOTE

[difftool "bc4"]
 cmd = bcomp.exe $LOCAL $REMOTE

[difftool "araxis"]
 path = C:\\Program Files\\Araxis\\Araxis Merge\\compare.exe

[difftool "edp"]
        cmd = \"C:/Program Files/ExamDiff Pro/ExamDiff.exe\" \"$LOCAL\" \"$REMOTE\" //nh 

[difftool "ucp"]
 cmd = ucp.exe -t $LOCAL $REMOTE


[difftool]
        prompt = false
        keepBackup = false
        trustExitCode = false

[merge]
 tool = p4m
 tool = kdiff3
 tool = dm
 tool = dfu
 tool = ss
 tool = bc4
 tool = araxis
 tool = edp
 tool = ucp

[mergetool]
 prompt = false
 keepBackup = false
 keepTemporaries = false

[mergetool "p4m"]
 cmd = "p4merge.exe $BASE $LOCAL $REMOTE $MERGED"
 trustExitCode = true
 

[mergetool "kdiff3"]
 path = C:/Program Files/KDiff3/kdiff3.exe

[mergetool "dm"]
 cmd = C:/Program\\ Files/DiffMerge/sgdm.exe -merge -result=$MERGED $LOCAL $BASE $REMOTE 

[mergetool "dfu"]
 cmd = diffusew $MERGED $LOCAL $BASE $REMOTE

[mergetool "ss"]
        cmd = smartsynchronize.exe $LOCAL $REMOTE $MERGED
        trustExitCode = false

[mergetool "bc4"]
        cmd = bcomp.exe $LOCAL $REMOTE $BASE $MERGED
        trustExitCode = true

[mergetool "araxis"]
 path = C:\\Program Files\\Araxis\\Araxis Merge\\compare.exe

[mergetool "edp"]
        cmd = \"C:/Program Files/ExamDiff Pro/ExamDiff.exe\" 
//merge \"$REMOTE\" \"$BASE\" \"$LOCAL\" //o:\"$MERGED\" 
//dn1:\"Remote\" //dn2:\"Base\" //dn3:\"Local\" //dno:\"Output\" //nh

[mergetool "ucp"]
 cmd = ucp.exe -3 $BASE $LOCAL $REMOTE

Протестируем работу сравнения файлов командой

$ git difftool c258082 ffd6b37 --tool=ucp --cc test.txt

U0001

Всплыло окошко

U0002

И так сравнение работает, проверяем слияние командами:

$ git merge newbranch
$ git mergetool --tool=ucp


U0004

Всплыло окошко, которое хочется сразу же закрыть Smile

U0003

Виндовую кодировочку показывает не верно. Странно это как-то. Но так или иначе работает.

четверг, 19 марта 2015 г.

Инструменты для работы с Git – GitEye

Идем сюда и качаем под свою ОС

G0001

Установка сводится к разархивированию архива и запуска приложения, которое по существу является плагином Git к Eclipse.

G0002

G0003

Добавим любой текущий репозиторий

G0004

G0005

В общем получили оболочку Git из Eclipse Smile

Про отрубленную голову Git (detached HEAD state)

1400761301_tudaТы туда не ходи - ты сюда ходи. А то снег башка попадёт - совсем мёртвый будешь...

В этой статье пойдет речь про отрубленное отсоединенное состояние указателя HEAD. Надо понимать что названия веток в Git это указатели на коммиты. Имя ветки, допустим master, указывает на последний коммит в ветке master.

Существует так же множество других указателей и один из них HEAD, но это очень важный указатель. И вот о нем мы и поговорим.

 

И так у нас есть история коммитов

H0001

И сейчас указатель ветки master и указатель HEAD указывают на последний коммит С4 в ветке master.

То же самое можно увидеть в Git

H0002

Оба указателя master и HEAD указывают на коммит С4 (efaaf18).

Теперь передвинем указатель HEAD на коммит C2 командой

$ git checkout 7bbbd68

H0003

Вот мы и получили отрубленную отсоединеннуюый голову указатель HEAD. И Git нам любезно сообщил что снег башка попал…

На диаграмме это можно изобразить так

H0004

То есть команда git checkout 7bbbd68 просто перенесла указатель HEAD на коммит C2 (7bbbbd68). И вместе с этим вернула в рабочий каталог состояние файлов этого коммита. То есть мы откатились назад по истории коммитов.

И Git порекомендовал нам создать новую ветку, а так же сообщил хэш коммита на который сейчас указывает HEAD.

Все это можно увидеть в Git

H0005

Состояние HEAD detached означает что HEAD указывает не на вершину какой либо ветки, а просто на какой-то коммит.

Посмотреть историю перемещения головы можно командой git reflog

H0006

На скрине мы так же посмотрели состояние Git и он нам (аж красным) сообщил, что башка отсоединена на коммит 7bbbd68.

HEAD всегда должен указывать на вершину какой-либо ветки. Это очень важно. И вот почему.

Указатель HEAD по существу указывает на тот коммит, после которого будет сделан следующий коммит. И если в состоянии отрубленной головы мы сейчас сделаем еще один коммит, то у нас будет шанс потерять его, не в смысле что он будет не доступен, а что если мы не будем помнить хэш этого коммита, то мы ни когда не сможем на него переключится.

Давайте сделаем коммит и посмотрим что будет. Изменим файлик и посмотрим статус

H0007

Ну и делаем коммит

H0008

Из лога коммитов видно что сейчас HEAD указывает на коммит С5 (84b361c), но на этот коммит не указывает ни какая ветка, верней сказать ни какой указатель ветки.

Графически это можно изобразить так

H0009

Мы по прежнему находимся в состоянии detached HEAD, о чем нам все время напоминает Git. Еще раз напомню что это означает что HEAD указывает не на вершину какой-либо ветки, а просто на коммит. В нашем случае на коммит С5 (84b361c).

Выйти из состояния detached HEAD очень легко, для этого надо переключится на какую-либо ветку или создать новую ветку.

Давайте переключимся на ветку master командой git checkout master

H0010

При переключении на ветку master, Git заботливо нас предупредил, что мы оставляем 1 commit, который не присоединен ни к какой ветке. Сообщил нам имя этого коммита – С5 и его хэш – 84b361c. И посоветовал, что возможно уже самое время создать новую ветку командой

git branch new_branch_name 84b361c

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

Если сейчас дать команду просмотра лога коммитов, то мы коммит С5 в логе не увидим

H0011

Таким образом мы можем “потерять” коммит С5, если забудем его хэш. Конечно, как уже говорилось, что в Git какой-либо сделанный коммит сложно потерять (но можно). И в данном случае мы можем посмотреть историю перемещения HEAD

H0012

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

Теперь дадим команду

$ git branch lost_branch 84b361c

и посмотрим лог

H0013

Теперь, все хорошо. На коммит С5 указывает ветка lost_branch

Графически это выглядит так

H0014

Теперь мы легко можем переключится на ветку lost_branch и состояния HEAD deatached уже не будет, поскольку HEAD уже будет указывать на вершину ветки lost_branch.

H0015

Сейчас переключение произошло безболезненно, поскольку это вполне штатная работа в Git.

Ну и покажу это состояние графически

H0016

На этом, с отсоединенной головой пока все. Хотя есть еще варианты по отделению головы в Git, но об этом как-нибудь в другой раз.

пятница, 6 марта 2015 г.

Правильная установка Git на Mac OS X

Если воспользоваться установщиком Git с официального сайта

M0001

То, устанавливается не самая последняя версия Git.

Дайте команду в терминале

$ git --version

И если вы увидите что то вроде этого

git version 1.9.3 (Apple Git-50)

то это статья для вас. Если вы видите версию 2.3.1 (на момент написания статьи) последняя была такая, то тогда у вас все хорошо.

И так сперва устанавливаем Homebrew, если он у вас еще не стоит.

Просто скопируйте и вставьте эту строку в терминал и запустите ее.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

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

brew install git

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

export PATH=/usr/local/bin:$PATH

чтобы прописать путь к новой установке Git.

И далее смотрим версию Git

$ git --verrsion

Должны увидеть что то типа этого

Git_Mac_OS_X

git version 2.3.1

Все! Далее чтобы обновлять Git  достаточно дать команду

brew upgrade git

Просто не правда ли!?

Пример обновления Git в Mac OS X 10.10.2 через Homebrew

brewGitUpgrade

Вот и получили самую свежую версию Git на Mac OS X

Установка Git под Windows из пакетов Cygwin

Установка версии Git под Windows от MsysGit проста и в принципе всем хороша. Только вот версия Git, там не самая свежая, по крайней мере сейчас. Но ее вполне достаточно для повседневной работы с Git. Если мы посмотрим версию, то увидим:

$ git --version
git version 1.9.5.msysgit.0

Но если вдруг надо что-то более свежее, то можно установить Git из пакетов Cygwin. Для этого естественно нужно установить и сам Cygwin. В этом нет ни чего сложного. Идем сюда и качаем установщик. Это именно установщик, а не дистрибутив. Так как он качает все пакеты из сети. И кроме того, его же надо использовать чтобы обновить установленные пакеты или установить новые.

И так качаем

C0001

И запускаем установщик

C0002

C0003

C0004

Рекомендую хранить все относящееся к Cygwin в его корневом каталоге, и собственно туда же перенести установщик, после окончания загрузки и установки пакетов.

C0005

C0006

C0007

Делай раз, два, три

C0008

В любом случае, если что-то потом понадобится, то можно скачать и установить. Как видим версия Git в данном пакете 2.1.4, что уже явно посвежее 1.9.5. Хотя под Linux и Mac OS X уже доступен 2.3.1.

C0009

Пошла загрузка пакетов

C0010

На всякий случай приведу еще парочку быстрых серверов для загрузки

C0011

Этот вообще просто сказка Smile

C0016

Ну вот все и установилось

C0012

Запускаем и видим что при первом запуске нам сообщают где находятся конфигурационные файлы:

C0013

C0014

На рисунке справа видно где находится домашний каталог пользователя. Это папка установки (в моем случае C:\cigwin64), далее папка home, затем папка с именем пользователя и в ней уже файлы конфигов .bashrc, .bash_profile, .inputrc и .profile.

C0015Вся конфигурация терминала делается в этих файлах. Тут описывать это не буду, так как это большая отдельная тема.

Замечу лишь что основные настройки bash делаются в файле .bash_profile.

Так же можно отметить, что в домашнем каталоге так же будет размещаться и файл настроек Git – .gitconfig

Кроме того, настроить внешний вид терминала можно кликнув по иконке терминала в левом верхнем углу и выбрав Options.

 

Если вам нужны какие-то дополнительные пакеты для Cygwin, то поискать их можно тут.

После всех настроек мое окно терминала Cygwin выглядит так. И тут же посмотрим версию установленного Git.

C0017

Ну вот у нас и полноценный Git. Теперь (быстренько) проверим его работу на реальном репозитории.

C0018

Все работает.

P.S. Что еще раз стоит отметить, так это то, что глобальные и системные (global, system) настройки msysGit и Git установленного из Cygwin хранятся в разных местах, и друг другу ни как не мешают и не перекрывают, на мой взгляд это удобно, поскольку все виндовые тулзы пытаются записать свои настройки в глобальный файл настроек .gitconfig и это может, иногда, создавать не удобства и путаницу.