четверг, 10 декабря 2015 г.

Обновление Git под Windows 10 с версии 2.5.3 до версии 2.6.3

Ни когда не обновлял Git таким образом но сейчас попробуем.

Качаем дистрибутив Git от сюда: https://git-scm.com/download/win

GU001

Естественно под свою разрядность, ну или как хотите… Я скачал под свою, чтобы обновить предыдущую установку.

Ну и запускаем скачанный файл…

GU002

После нажатия Next установщик не спросил путь, так что есть надежда что обновление пройдет гладко. И на следующем этапе уже выбраны те опции что я выбирал в предыдущей установке:

GU003

Далее так же выбрана опция что я выбирал прежде:

GU004

Далее опять мой предыдущий выбор:

GU005

Далее опять мой предыдущий выбор:

GU006

И опять мой предыдущий выбор:

GU007

А вот потом он поступил не красиво :( Этот установщик, он тупо удалил предыдущую мою установку. Со всеми моими настройками. Хотя я их конечно забекапил до этого, но все равно не красиво так делать. И так как у меня запущенный Far Manager находился в каталоге Git, то произошел сбой установки, и по существу пришлось делать чистую установку.

И да, чтобы Git установился в Program Files установщик необходимо запустить с правами администратора.

Так что можно сказать что обновление провалено. Так как настройки терминала при обновлении не сохраняются :(

По существу все изменения что у меня были хранятся по пути C:\Program Files\Git\etc\profile.d в файле git-prompt.sh

Там настраивается внешний вид терминала Git. У меня, после моих настроек, он выглядит так:

GU008

пятница, 25 сентября 2015 г.

Установка Git 2.5.3 x64 на Windows 10 Pro x64

Совсем недавно, 18 сентября 2015, была выпущена новая версия Git 2.5.3. Теперь она поставляется для x64 и x32 платформ и кроме того существует и в портабельной (portable) версии для обоих платформ.

Сейчас будем разбираться с установкой и настройкой. Поехали!

1) Качаем установщик Git-2.5.3-64-bit.exe

2) И запускаем его…

G0001

G0002

G0003

Выставляем галки как на скриншоте ниже

G0004

В принципе, если хотите, то можете выбрать и Git GUI, но он достаточно убогий и на мой взгляд лучше пользоваться другими графическими утилитами для Git. А еще лучше просто консолью :)

Причем даже если вы эту галку снимете, то gitk (Git GUI) все равно установится, единственное что он не пропишется в реестре для контекстного меню. Ну и на том спасибо. Меньше мусора.

G0005

Далее выбираем пункт как на скриншоте ниже. Ну или выбираете тот который вам по душе :)

G0006

Далее выбираем первый пункт, ну или, опять же, как душеньке угодно :)

G0007

Ниже тоже можно выбрать пункт как на скриншоте. Но опять же это дело вкуса. Тем более что в Windows 10 "империя зла", таки сделала добрый, ну более или менее хороший терминал. В общем выбираем по вкусу :)

G0008

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

Далее я ни чего не выбирал

G0009

Тем более, опять же, это можно изменить в конфигурационном файле и какой параметр менять тут уже указано.

И понеслась установка!

G0010

G0012

Все! Приехали! Конечная! Git установился.

После этого в меню Start появятся следующие пункты:

G0013

Git Bash – это консоль Bash для работы c Git

Git CMD – это консоль Windosws cmd.exe для работы с Git

Git GUI – это такая бесполезная штука, запустите увидите :)

Теперь давайте проверим что все у нас работает. Для этого запустим Git Bash и Git CMD. Git Bash это консоль в NIX стиле. Git CMD – это cmd.exe.

А после запуска дадим команду git --version

G0014

G0015

Как видим все работает. Конечно можно причесать обе консоли на предмет цветов, шрифтов и т.д. и т.п.

И еще пара замечаний, видно из Git Bash он основан на MINGW (x64). И git так же доступен и из обычного cmd.exe, который вы сами можете запустить…

G0016

Ну и далее настраиваем Git на свой вкус и цвет.

Единственное что еще стоит заметить, то это то что установщик Git дописал в системную переменную PATH путь к Git:

C:\Program Files\Git\cmd

Ну и еще стоит напомнить о том, что если вы хотите настроить Git на работу с русским языком, то помните еще и том в какой кодировке у вас работает терминал (консоль).

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

Настойка переменной окружения HOME для Git и плагина EGit в Eclipse

В принципе у меня и без этого все работало хорошо, но просто увидел вот такое предупреждение в Eclipse:

eclipse.buildId=4.4.2.M20150204-1700
java.version=1.8.0_45
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ru_RU
Framework arguments:  -product org.eclipse.epp.package.java.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product

org.eclipse.egit.ui
Warning
Fri May 01 18:49:30 MSK 2015
Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Users\<user_name>'. If this is not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

Лечится все это очень просто. Есть описания на английском:

http://wiki.eclipse.org/EGit/User_Guide#Setting_up_the_Home_Directory_on_Windows

https://danlimerick.wordpress.com/2011/07/11/git-for-windows-tip-setting-home-and-the-startup-directory/

В общем просто создаем переменную окружения HOME вот так:

2015-05-01_191030

Хотя я проблем ни каких не заметил. Может потому что работаю в командной строке. Мне ее хватает.

понедельник, 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, но об этом как-нибудь в другой раз.