Архив рубрики: Linux

Git, краткий справочник команд

Введение

Эта статья является продолжением предыдущей статьи Git, краткая теория.
Сегодня мы рассмотрим работу с Git на практических примерах. (Используется Git версии 1.7.8.msysgit.0)
В Git есть хорошая практика, которая рекомендует перед началом работы с репозиторием представиться ему, указав своё имя и электронный ящик для обратной связи. Поэтому работу с Git мы начнём с описания команд работы с конфигурацией Git
Сделаю важное замечание, я не буду углубляться во всё многообразие способов вызова той или иной команды Git, наоборот — я приведу конкретные команды для получения нужного результата.

 Настройка Git-репозитория (git config)

Как говорилось в прошлой статье, настройки Git придерживаются стандартной архитектуры настроек Linux. Настройки могут быть: локальные (—local), пользовательские (—global), системные (—system).
Настройки распределены по секциям, подсекциям и имени параметра:

section.subsection.name = value

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

[section "subsection"]
    name = value

Все составляющие имени параметра разделяются точкой.
Подсекция может состоять из любого кол-ва подсекций:

section.subsection1.subsection2.subsectionN.name = value

Но в файле настроек всё выглядит точно так, как и раньше:

[section "subsection1.subsection2.subsectionN"]
    name = value

Справка

git help config
получить справку по работе с командой git config

Чтение списка настроек

git config -l

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

git config —local -l

список только локальных настроек репозитория из файла .git/config

git config —global -l

список пользовательских настроек из файла ~/.gitconfig (Заметка: в Windows путь к домашней папке можно явно указать через переменную окружения $HOME)

git config —system -l

список системных настроек из файла /etc/gitconfig

cat .git/config
находясь в папке репозитория можно просто вывести файл настроек (команда cat не относится к git)

Добавление настроек

git config [—system | —glogal | —local] —add имяСекции.имяПеременной значениеПеременной

общий синтаксис добавления нового параметра в файл конфигурации. По умолчанию новый параметр добавляется в —local, если не указанного другого назначения.

git config user.name YourName
git config user.email YourEmail@email.x

добавить настройку в локальный конфигурационный файл, атрибут —add может быть опущен, хотя я его пишу для наглядности. Смотреть следующий пример для подробностей.

git config —add user.name YourName
git config —add user.email YourEmail@email.x

добавить информацию о вашем имени и электронном ящике в секцию user локального репозитория.
Но чтобы не выполнять эту операцию для каждого репозитория, вы можете добавить эти настройки в пользовательский файл конфигурации:

git config —global —add user.name YourName
git config —global —add user.email YourEmail@email.x

теперь информация об имени и эл. ящике записана в ~/.gitconfig, и будет применяться автоматически для всех репозиториев текущего пользователя системы.

git config —global —add user.name «YourName YourSurname»
используйте двойные кавычки, чтобы использовать пробелы внутри значения параметра.

Чтение отдельной настройки

git config —get user.name
вернёт значение настройки user.name, которая применяется к текущему репозиторию

Поиск отдельной настройки

git config —get-regexp regexpName [regexpValue]

возвращает список настроек, удовлетворяющих установленным регулярным выражениям. regexpName — регулярное выражение для имени параметра. regexpValue — регулярное выражение для значения параметра.

git config —get-regexp user

вернёт все настройки, в имени которых встречается слово «user».

git config —get-regexp ^user

вернёт все настройки, имя которых начинается на «user». Говоря иначе — вернёт все настройки из всех секций [user].

git config —global —get-regexp ^user

получить список настроек секции «user» только из файла пользовательских настроек ~/.gitconfig

git config —global —get-regexp remote
получить информацию о секциях «наблюдения» и ассоциациях текущих веток с удалёнными ветками

Создание Git-репозитория (git init)

Команда git init создаёт новый репозиторий

git init

создать «простой» репозиторий в текущей папке. Это основной репозиторий, с которым нам предстоит работать.

git init —bare

создать «голый» репозиторий в текущей папке (используется как централизованное хранилище при централизованном стиле разработки).

git init repo

создать новую папку repo в текущей папке и создать в ней репозиторий

git init —bare repo
аналогично предыдущему примеру, но создаётся «голый» репозиторий

Состояние репозитория (git status)

Команда git status позволяет узнать текущее состояние репозитория.

git status
показать текущее состояние репозитория

Подготовка файлов к фиксации (git add)

Команда git add добавляет файл или группу файлов в index (staging area). (В дальнейшем добавленные файлы могут будь зафиксированы в репозитории командой git commit

git add .

добавить все файлы и папки текущей директории в index (staging area)

git add path/to/file1
добавить только один файл (или папку) в staging area

Фиксация изменений (git commit)

Команда git commit переносит изменения из index (staging area) в local repo.
После оп
ерации фиксации вам необходимо заново заполнять область index (staging area)

git commit -m «Комментарий к фиксации»

фиксирует изменения, добавленные в staging area, в репозитории. Заметьте, чтобы зафиксировать изменения, их надо сначала добавить в staging area командой «git add .«.

git commit -a -m «Комментарий к фиксации»
фиксирует все изменения, сделанные в working directory. Особенность этой команды в том, что перед ней не нужно выполнять команду «git add .» (это не распространяется на новые файлы, которые ещё никогда ранее не добавлялись).

Возврат к любой фиксации (git checkout)

Команда git checkout позволяет загрузить любое состояние репозитория в working tree.
При возврате к фиксации, work tree переходит в состояние на тот момент фиксации: исчезают файлы, которых не было в тот момент, появляются файлы, которые были на тот момент. (Заметка: checkout можно выполнить, только тогда, когда у вас нет никаких изменений в текущем состоянии working tree. В ином случае вам следует их зафиксировать или отказаться от них).

git checkout nameBranchOrCommit

где nameBranchOrCommit — либо первые четыре (или более) символов имени фиксации, либо имя ветки.
Имя фиксации — это сорока символьная строка, например: b4d470fc242c41d1e270a4041edf673586f8325a

git checkout b4d4

переключиться на фиксацию с именем, начинающимся на «b4d4». Заметка: при таком переключении у вас меняется текущая ветка на ветку «(no branch)». Заметка: вы можете указать имя фиксации, которая располагается в любой ветви и вы будете перенесены на эту точку фиксации.

git checkout master

переключиться на ветвь master (переключение происходит на верхушку ветви)

git checkout master~1

переключиться на одну фиксацию назад относительно верхушки ветви master

git checkout head~1

переключиться на одну фиксацию назад относительно текущего вашего положения.
Заметка: при каждой операции checkout ссылка head указывает на текущее положение.
Заметка2: не рекомендуется создавать ветвь с одноимённым названием head, т.к. head — это ссылка на текущее состояние.

git checkout b4d47~2

переключиться на две фиксации назад относительно фиксации с именем, начинающимся на «b4d47».

git checkout -b branchName nameBranchOrCommit
переключается на фиксацию nameBranchOrCommit и тут же создаёт от неё новую ветвь branchName и переключается на эту ветвь.

Работа с ветвями (git branch)

Команда git checkout обеспечивает работу с ветвями. Просмотр, создание и удаление ветвей разработки

git branch

просмотреть список существующих ветвей и узнать какая ветвь выбрана текущей

git branch -r

просмотреть список удалённых ветвей (ветвей из репозиториев, за которыми мы «наблюдаем»);

git branch branchName

создать ветвь с именем name. Создание ветви не приводит к переключению в эту ветвь, для этого используйте команду git checkout branchName. Созданная ветвь ответвляется от текущего состояния репозитория.

git branch -d branchName

удаляет ветвь branchName. Если ветвь ещё не была с лита с основной ветвью, то git предупредит об этом и удаления не будет

git branch -D branchName
удаляет ветвь branchName, даже если вы ещё не сливали её изменения с основной ветвью

Обзор изменений (git diff)

Команда git diff позволяет увидеть изменения между разными состояниями фиксаций, или между текущими изменениями и последней фиксацией.

git diff

показать изменения между work tree и index (staging area)

git diff —cached

показать изменения между index (staging area) и local repo

git diff master~2..master

показать суммарные изменения, произошедшие при перемещении от фиксации master~2 к фиксации master.
Заметка: если вы только добавляли текст, то будут отображаться «плюсики» в начале добавленных строк.

git diff master..master~2

показать суммарные изменения, которые произошли при перемещении от фиксации master к фиксации master~2.
Заметка: в отличии от предыдущего примера, здесь будет показано, что строки были удалены — знаки «минуса» в начале строк.

</div >

git diff otherBranch..master
показать суммарные изменения между последней фиксацией в ветви otherBranch и последней фиксации в ветви master.
Заметка: возможно такое сравнение не будет иметь смысл, если ветви не имеют общего предка, но… всё на ваше усмотрение.

Обзор лога фиксаций (git log)

Команда git log позволяет увидеть историю фиксаций от начала до текущего состояния HEAD.

git log

показать историю фиксаций от начала до текущего состояния HEAD.

git log nameBranchOrCommit

показать историю фиксаций от начала до указанной ветви или имени фиксации

git log anyBranch~1

показать историю фиксаций от начала до предпоследний фиксации на ветви anyBranch

git log master~2..master

показать историю фиксаций от пре-предпоследней фиксации до последней фиксации по ветви master
Заметка: обратите внимание, что запись «git log master..master~2» не покажет ничего.

git log br1..master

покажет историю фиксаций от места ответвления ветки br1 (от ветки master) до текущего состояния по ветке master.
Заметка: ветка br1 должна быть ответвлена от ветки master

git log br1…master

покажет общую историю фиксаций от места ответвления ветки br1 до текущего состояния ветки master. В историю попадут как фиксации сделанные по ветке master, так и фиксации сделанные по ветке br1. Обратите внимание, что диапазон указан с тремя точками, именно это отличает данный пример от предыдущего.

git log HEAD

то же, что и «git log«, покажет историю фиксаций от начала до текущего состояния

git log FETCH_HEAD

покажет историю фиксаций от начала до состояний FETCH_HEAD
Заметка: состояние FETCH_HEAD становится доступным после выполнения операции git fetch или git pull.

git log HEAD..FETCH_HEAD

покажет историю фиксаций по текущей ветви начиная от места, где совпадают состояния HEAD и FETCH_HEAD, и до конца истории.

git log HEAD…FETCH_HEAD
покажет историю общую фиксаций от места, где совпадают состояния HEAD и FETCH_HEAD, и до конца истории.

Создание наблюдений (git remote)

Команда git remote применяться для создания «наблюдений» за другими репозиториями. Позволяет удобно сливаться с другими репозиториями.

git remote

выводит список существующих «наблюдений»

git remote add name path

добавляет новое наблюдение с именем name до репозитория, расположенного по пути path.

git remote rm name
удаляет наблюдение с именем name вместе с данными, которые были загружены в это наблюдение. (На репозиторий за которым «наблюдали» эта операция никак не влияет!)

Загрузка удалённого репозитория (git fetch)

Команда git fetch позволяет загрузить удалённый репозиторий в раздел «наблюдения» локального репозитория. Загрузить репозиторий — ещё не значит «слиться» с ним. Для слияния используется команда git merge.

git fetch

подгружает данные по текущей ветке из соответствующей ветки удалённого репозитория, или подгружает данные из соседней ветки локального репозитория

git fetch repo branch
подгружает содержимое ветки branch репозитория repo в объект состояния FETCH_HEAD.

Слияние двух состояний (git merge)

Команда git merge выполняет слияние двух состояний HEAD и FETCH_HEAD в новое HEAD состояние. Если происходит конфликт изменений, то эти файлы выходят из index (staging area), до тех пор, пока вы не исправите конфликт и не поместите их обратно в index командой «git add .«.
Команда слияния всегда занимает отдельную фиксацию, при слиянии не допускается изменение каких-либо файлов

git merge branch
слить ветку branch с текущей веткой.

Обновление репозитория (git pull)

Команда git pull выполняет подгрузку удалённого репозитория и производит слияние с ним. Данная операция аналогична последовательному выполнению двух операций: git fetch и git merge.

git pull
обновить текущую ветку репозитория до состояния другой локальной или удалённой ветки репозитория

Клонировать репозиторий (git clone)

Команда git clone создаёт копию репозитория и устанавливает настройки для наблюдения за оригинальным репозиторием. Эти настройки применяются в командах fetch, push, pull.

git clone repo newRepo
создаёт полный клон репозитория repo в репозиторий newRepo (папка нового репозитория создаётся автоматически).

Втолкнуть изменения в удалённый репозиторий (git push)

Команда git push позволяет втолкнуть изменения текущего репозитория в удалённый. По умолчанию, вталкивать данные можно только в «голые» репозитории.

git push

вталкивает данные всего локального репозитория в соответствующие ветки удалённого репозитория

git push origin master
вталкивает данные текущей ветви в ветвь master удалённого репозитория origin. Если ветвь master не существует в удалённом репозитории, она будет создана. Если для удалённой ветви невозможно выполнить FAST-FORWARD слияние, то данные не будут «втолкнуты» (об этом будет сообщено).
Заметка: данный способ вызова команды является первым при первой фиксации в пустой удалённый репозиторий.

Откат изменений (git reset)

Команда git reset позволяет откатить изменения или неудачное слияние до последнего стабильного состояния (до последней фиксации).

git reset

отменит операцию слияния, но оставит изменения в конфликтующих файлах и/или в index области. При этом состоянии Git будет ожидать от вас фиксации или полной отмены изменений.

git reset —hard
отменит операцию слияния, очистит index область и вернёт все файлы work tree до состояния последней фиксации по текущей ветви.

Создание отметок готовности (git tag)

Команда git tag позволяет отметить текущее состояние, как некоторое конечное состояние для новой версии вашего проекта. Используется для создания списка стабильных версий проекта. Заметка: имя метки tag может использоваться в командах checkout и других командах, на ровне с именами фиксаций, именами ссылок (HEAD, FETCH_HEAD) и именами веток (master и т.п.).

git tag

показать список существующих tag-ов

git tag -m «описание» tagname

создать метку tag для текущего состояния (на текущей ветке) с именем tagname.

git tag -d tagname
удалить метку tag с именем tagname

Заключение

В этой части мы кратко рассмотрели список наиболее часто используемых команд при работе с Git. В следующей части мы рассмотрим практические примеры работы с Git.
Читать далее: Git в примерах
Смотрите также:

Автор: galiego710

linux: утилита pv (pipeviewer)

Прикрутил к небольшому скрипту дампа полезную маленькую утилитку pv (pipeviewer), теперь при архивации показыается бегущая шкала и остаток времени, полезно очень.

Как это выглядит:

$ dumparch ./.thunderbird
202MB 0:01:29 [9,67MB/s] [===>        ] 20% ETA 0:05:47

Читать

расчёт dpi монитора и настройка в linux (черновик)

Началось с того, что меня бесило, что gnome ставил 96 dpi мне, хотя, очевидно, настоящий dpi другой. Также запросто может быть (у меня на прошлом мониторе был) совершенно разное значение DPI по горизонтали и вертикали. Потом я перестал пользоваться gnome и начал сталкиваться с такой же настройкой в целом во всей системе. Как и положено в linux это приводило к гемору и тому, что иногда это работало, иногда нет, итп. И руководство давности годовой из инета оказывались неактуальными совершенно, потому что всё уже deprecated и работает по-другому.

[!]з.ы. по сути это черновиком так и осталось, так что пользы мало.

Расчёт очевиден. Допустим, у меня монитор 24″, его разрешение: 1920 * 1080. Мерю реальные размеры линейкой: 530 мм * 299 мм. В дюймах (1 дюйм = 25.4 мм) будет: 20,866141732 * 11,771653543. Стало быть, DPI: 92,015094341 * 91,7458194. То есть DPI физически у меня по обеим сторонам 92.

Вот два калькулятора DPI:
http://members.ping.de/~sven/dpi.html
http://pxcalc.com/

Смотрим что нам даёт xdpyinfo

$ xdpyinfo | grep -B2 resolution
screen #0:
dimensions: 1920x1080 pixels (507x285 millimeters)
resolution: 96x96 dots per inch

тут провал.

Хотя явно видно, что изначально устанавливаются другие, почти правильные, DPI:

$ grep -i DPI /var/log/Xorg.0.log
[ 33.243] (**) intel(0): DPI set to (92, 94)

Это как бы похоже на правду.

А до этого видно, в принципе, корректное получение размеров монитора из EDID:

[    33.243] (**) intel(0): Display dimensions: (530, 290) mm
[ 33.243] (**) intel(0): DPI set to (92, 94)

Но ниже:

[    33.477] (II) AIGLX: Loaded and initialized /usr/lib/dri/i915_dri.so
[ 33.477] (II) GLX: Initialized DRI2 GL provider for screen 0
[ 33.477] (II) intel(0): Setting screen physical size to 507 x 285

то, что и показывает xdpyinfo, походу.

Короче, кто-то посередине портит DPI. Также гуглилась бага intel-драйвера итд итп. Не понять вообще нифига, может, объяснит кто. Я по-разному в течение года прописывал в разных средах и WM, что уже запутался и забыл как правильнее. Пробовал по разному:

1) Указывал в /usr/bin/startx следующее: defaultserverargs=»—dpi 92″

2) В LXDE ещё попробовал:
/home/dimon/.config/lxsession/LXDE/desktop.conf
iXft/DPI=92

3) Ещё попробовал прописать чо-то примерно:

ServerArgsLocal=-br -nolisten tcp -dpi 96

4) смотрим:

/etc/X11/Xresources

! This is the global resources file that is loaded when
! all users log in, as well as for the login screen

! Fix the Xft dpi to 96; this prevents tiny fonts
! or HUGE fonts depending on the screen size.
Xft.dpi: 96

! hintstyle: medium means that (for Postscript fonts) we
! position the stems for maximum constrast and consistency
! but do not force the stems to integral widths. hintnone,
! hintslight, and hintfull are the other possibilities.
Xft.hintstyle: hintmedium
Xft.hinting: true

5) ~/.Xresources

Xft.dpi: 92

обязательно в конце перевод строки.
Потом
xrdb -merge ~/.Xresources

Просмотр самой базы:

xrdb -query -all

Сам этот файл (~/.Xresources) мержится как и положено в
/etc/X11/xinit/xinitrc

И ещё 100 способов.

Автор: Дмитрий

linux: webdav монтирование (на примере yandex.диск)

Сначала монтировал через gvfs, но не вполне удобно. Можно прописать намертво в fstab и всегда монтировать при старте в /mnt куда-нибудь, но мне этот вариант не очень нравится, всё же целевой ресурс персональный и монтироваться-авторизоваться должен на уровне юзера, имхо. Т.е. хочется от юзера монтировать в свою папку и логины-пароли держать где-то там же. Так-то вообще самый простой путь: Ставим davfs2. В /etc/fstab добавляем что-то такое:


https://webdav.yandex.ru /home/user/yadisk davfs users,rw,noauto 0 0

Чтобы каждый раз не вводить логин-пароль, прописываем в /home/user/.davfs2/secrets (сам он создастся после первого монтирования):

https://webdav.yandex.ru логин пароль

Или, если пароль в открытом виде светить не хочется, то только логин:

https://webdav.yandex.ru логин

тогда при каждом монтировании будет запрошен пароль для этого логина (это я считаю наиболее приемлемым путём). А дальше от юзера как обычно:

mount ~/yadisk
umount ~/yadisk

Не нужно забывать, что после попытки отмонтирования кеши могут быть ещё не дозаписаны.

Автор: Дмитрий

Установки Firefox 12 в Ubuntu

Финальная версия Mozilla Firefox 12 пока еще не выпущена, однако пользователи уже сейчас получили ряд новых функций, среди которых: номера строк в окне просмотра исходного кода, центрированные результаты поиска на странице, улучшенные элементы управления мультимедиа HTML5, поддержка CSS column fill, CSS text-align-last и так далее. Стоит отметить, что это также очень важный релиз для пользователей Ubuntu, поскольку в предстоящей версии платформы именно Firefox 12 будет установлен по умолчанию.

Для того чтобы не ждать несколько месяцев, мы предлагаем пользователям Ubuntu уже сейчас попробовать неофициально обновить бета-версию обозревателя от Mozilla. Браузер будет работать на следующих версиях платформы: Ubuntu 12.04 LTS (Precise Pangolin), Ubuntu 11.10 (Oneiric Ocelot), Ubuntu 11.04 (Natty Narwhal) и Ubuntu 10.04 LTS (Lucid Lynx).

Шаг 1: добавляем Firefox 12 в репозиторий.

Независимо от версии платформы (см. список выше), необходимо открыть терминал и прописать в нем следующую команду: sudo add-apt-repository ppa:mozillateam/firefox-next. После этого нажимаем к «Enter», вводим пароль, опять нажимаем «Enter» и снова «Enter». Оставляем окно терминала открытым и переходим к следующему шагу.

Шаг 2: установка Firefox 12 на Ubuntu.

В том же окне терминала вставляем следующую командную строку: sudo apt-get update && sudo apt-get install -y firefox. После этого текущая версия браузера будет перезаписана. Дожидаемся завершения установки. По окончании необходимо перезапустить Firefox для того, чтобы изменения вступили в силу.

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

Автор: ГАЗЕНВАГЕН™

Что делать если в Ubuntu пропали все заголовки окон?

По непонятной мне причине иногда у моего Ubuntu частенько пропадают заголовки окон, для того чтобы их вернуть без перезагрузки ОС можно воспользоваться коммандной строкой:

metacity --replace

Автор: Sergiy Kamolov