Начальная настройка окружения
Задать имя пользователя и почтовый адрес для текущего репозитария:
1 2 | git config user.name "Doka" git config user.email my_git_mail@idoka.ru |
Выполнение этой команды эквивалентно редактированию строк файла .git/config:
1 2 3 | [user] name = Doka email = my_git_mail@idoka.ru |
Тоже самое глобально для всех будущих репозитариев:
1 2 | git config --global user.name "Doka" git config --global user.email my_git_mail@idoka.ru |
Для удобства работы можно задать короткие псевдонимы команд, например:
1 2 3 4 | 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
, проделайте следующее:
1 | git config --global core.editor joe |
Проверить используемую конфигурацию командой:
1 | git config --list |
Также можете проверить значение конкретного ключа, выполнив git config <key>
, например:
1 | git config user.name |
Вывести лог коммитов в формате «Дата Автор»:
1 | git log --no-merges --pretty=format:"%an %ai" | more |
Использовать цветной вывод в терминале:
1 | git config color.ui true |
Выводить в логе коммит на одной строке:
1 | git config format.pretty oneline |
Интерактивный способ добавления в индекс:
1 | git add -i |
Помощь по использованию команд git можно получить следующими способами:
1 | git help <verb> |
или:
1 | git <verb> --help |
Мнение о настройке окончания строк исходников
Мой подход тезисно:
- В силу сформировавшегося Design Flow часто приходится иметь дело с ситуацией, когда на M$ машине работаю с git, но код, полученный по git используется на хостах Linux
- «Правильные» редакторы на M$-хостах оставляют файл в той кодировке (dos|unix) в которой он был открыт (за исключением файлов со смешанным окончанием строк)
- Перевод строк определяется настройками конкретного репозитария, а не настройками клиента пользователя (уход от человеческого фактора)
- В репозитории файлы, помеченные как текстовые, всегда хранятся с LF-окончаниями строк (unix), при коммите в этих файлах CRLF всегда заменяются на LF
- Какие файлы текстовые, а какие — нет, определяется файлом
.gitattributes
, располагающимся в корне репозитария - Для всех новых репозиториев во избежании конфликтов со смешанным окончанием строк необходимо как можно раньше (до коммита текстовых файлов) добавить в репозитарий файл .gitattributes с сопутствующей настройкой окончания строк
- Глобальные настройки окончания строк на хосте находятся в файле
.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
- под Linux хочется видеть в рабочей копии LF-окончания строк:
За дополнительной информацией обращаться https://help.github.com/articles/dealing-with-line-endings/
Модификация приглашения bash
Для тех кто путается в ветках и коммитах, есть полезный хак командной строки bash (должно работать в любых башах что поддерживают тюнинг приглашения через PS1), хак позволяет автоматически выводить название текущей ветки и (в кратком виде) текущий статус рабочей копии в статусной строке баш.
Пример:
1 | [master_fpga !+] [doka@dokahost:~/proj/2014/fpga_miner] $ |
Расшифровка статусов (можно настроить, отредактировав .bash_gitstatus
):
>
— в рабочей копии есть переименованные файлы*
— есть незапушенные локальные коммиты+
— в рабочей копии есть новые добавленные файлы?
— в рабочей копии есть новые файлы, не добавленные под контроль версийx
— в рабочей копии есть удаленные файлы!
— в рабочей копии есть изменения по сравнению с последним коммитом
Установка:
- Положить файл
.bash_gitstatus
в домашнюю директорию~
- в
~/.bashrc
дописать в конец:12. ~/.bash_gitstatusPS1="\[\e[37m\]`parse_git_branch`\[\e[m\] [\u@\h \W]\$ " - перевойти в шелл, либо выполнить команду
. ~/.bashrc
Содержимое .bash_gitstatus
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # 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-е число раз модифицирован под собственные нужды.
Полезные советы
При сборке пакета из исходников в гите полезно клонить не весь реп, а только последний коммит:
1 | git clone --depth=1 ... |
При возникновении проблем с гит-репозиторием на локальном хосте, если ничего другого не помогает, полезно сделать:
1 | git reset --hard ... |
GUI-клиенты под линукс
- SmartGit — выбор редакции 🙂
- Git Cola*
- gitk*
- gitg*
- git-gui*
* — есть в репозиториях CentOS 7