Doka avatar

Журнал Эмбеддед-Инженера

О микроэлектронике, радиотехнике и хобби

Dmitry Murzinov

4 минут чтения

Начальная настройка окружения

Задать имя пользователя и почтовый адрес для текущего репозитария:

git config user.name "Doka"
git config user.email my_git_mail@idoka.ru

Выполнение этой команды эквивалентно редактированию строк файла .git/config:

[user]
   name = Doka
   email = my_git_mail@domain.com

Тоже самое глобально для всех будущих репозитариев:

git config --global user.name "Doka"
git config --global user.email my_git_mail@domain.com

Для удобства работы можно задать короткие псевдонимы команд, например:

git config --global alias.st "status -s"
git config --global alias.di "diff"
git config --global alias.ci "commit"
git config --global alias.co "checkout"

По умолчанию git использует стандартный редактор вашей системы, которым обычно является vim. Если вы хотите использовать другой текстовый редактор, например, joe, проделайте следующее:

git config --global core.editor joe

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

git config --list

Также можете проверить значение конкретного ключа, выполнив git config <key>, например:

git config user.name

Вывести лог коммитов в формате “Дата Автор”:

git log --no-merges --pretty=format:"%an %ai" | more

Использовать цветной вывод в терминале:

git config color.ui true

Выводить в логе коммит на одной строке:

git config format.pretty oneline

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

git add -i

Помощь по использованию команд git можно получить следующими способами:

git help <verb>

или:

git <verb> --help

 

Мнение о настройке окончания строк исходников

Мой подход тезисно:

  1. В силу сформировавшегося Design Flow часто приходится иметь дело с ситуацией, когда на M$ машине работаю с git, но код, полученный по git используется на хостах Linux
  2. “Правильные” редакторы на M$-хостах оставляют файл в той кодировке (dos|unix) в которой он был открыт (за исключением файлов со смешанным окончанием строк)
  3. Перевод строк определяется настройками конкретного репозитария, а не настройками клиента пользователя (уход от человеческого фактора)
  4. В репозитории файлы, помеченные как текстовые, всегда хранятся с LF-окончаниями строк (unix), при коммите в этих файлах CRLF всегда заменяются на LF
  5. Какие файлы текстовые, а какие - нет, определяется файлом .gitattributes, располагающимся в корне репозитария
  6. Для всех новых репозиториев во избежании конфликтов со смешанным окончанием строк необходимо как можно раньше (до коммита текстовых файлов) добавить в репозитарий файл .gitattributes с сопутствующей настройкой окончания строк
  7. Глобальные настройки окончания строк на хосте находятся в файле .gitconfig, убедитесь, что не установлен (или установлен в значение native) параметр core.eol и core.autocrlf установлен в соответствии с вашими предпочтениями:
    • под Linux хочется видеть в рабочей копии LF-окончания строк: core.autocrlf=input или core.autocrlf=false
    • под M$ хочется видеть в рабочей копии LF-окончания строк: core.autocrlf=input
    • под M$ хочется видеть в рабочей копии CRLF-окончания строк: core.autocrlf=true или core.autocrlf=false

За дополнительной информацией обращаться https://help.github.com/articles/dealing-with-line-endings/

Модификация приглашения bash

Для тех кто путается в ветках и коммитах, есть полезный хак командной строки bash (должно работать в любых башах что поддерживают тюнинг приглашения через PS1), хак позволяет автоматически выводить название текущей ветки и (в кратком виде) текущий статус рабочей копии в статусной строке баш.

Пример:

[master_fpga !+] [doka@dokahost:~/proj/2014/fpga_miner] $

Расшифровка статусов (можно настроить, отредактировав .bash_gitstatus):

  • > - в рабочей копии есть переименованные файлы
  • * - есть незапушенные локальные коммиты
  • + - в рабочей копии есть новые добавленные файлы
  • ? - в рабочей копии есть новые файлы, не добавленные под контроль версий
  • x - в рабочей копии есть удаленные файлы
  • ! - в рабочей копии есть изменения по сравнению с последним коммитом

Установка:

  1. Положить файл .bash_gitstatus в домашнюю директорию ~
  2. в ~/.bashrc дописать в конец:
. ~/.bash_gitstatus
PS1="\\[\\e[37m\\]\\`parse_git_branch\\`\\[\\e[m\\] [\\u@\\h \\W]\\$ "
  1. перевойти в шелл, либо выполнить команду . ~/.bashrc

Содержимое .bash_gitstatus:

# get current branch in git repo
function parse_git_branch() {
	BRANCH=`git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \\(.*\\)/\\1/'`
	if [ ! "${BRANCH}" == "" ]
	then
		STAT=`parse_git_dirty`
		echo "[${BRANCH}${STAT}]"
	else
		echo ""
	fi
}

# get current status of git repo
function parse_git_dirty {
	status=`git status 2>&1 | tee`
	dirty=`echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?"`
	untracked=`echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?"`
	ahead=`echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?"`
	newfile=`echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?"`
	renamed=`echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?"`
	deleted=`echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?"`
	bits=''
	if [ "${renamed}" == "0" ]; then
		bits=">${bits}"
	fi
	if [ "${ahead}" == "0" ]; then
		bits="*${bits}"
	fi
	if [ "${newfile}" == "0" ]; then
		bits="+${bits}"
	fi
	if [ "${untracked}" == "0" ]; then
		bits="?${bits}"
	fi
	if [ "${deleted}" == "0" ]; then
		bits="x${bits}"
	fi
	if [ "${dirty}" == "0" ]; then
		bits="!${bits}"
	fi
	if [ ! "${bits}" == "" ]; then
		echo " ${bits}"
	else
		echo ""
	fi
}

Disclaimed: рецепт подсмотрен в интернетах и за время пользования был N-е число раз модифицирован под собственные нужды.

Полезные советы

При сборке пакета из исходников в гите полезно клонить не весь реп, а только последний коммит:

git clone --depth=1 ...

При возникновении проблем с гит-репозиторием на локальном хосте, если ничего другого  не помогает,  полезно сделать:

git reset --hard ...

 

GUI-клиенты под линукс

  • SmartGit - выбор редакции :)
  • Git Cola*
  • gitk*
  • gitg*
  • git-gui*

Большинство из перечисленных пакетов есть в репозитариях CentOS/RHEL

Cheat Sheet

ToDo

Последние записи

Разделы