RU EN

Подпись коммитов

 

Сначала надо создать gpg-ключ командой:

gpg --gen-key

После создания можно подписывать коммиты цифровой подписью. Для этого добавим в конфиг ключ и сделаем алиас для автоматического подписывания всех коммитов.

git config --global user.signingkey=FG984AA3
git config --global alias.ci=commit -S -m

 

 

Комментариев: 0
16.05.2013 21:52


Создание проекта

 

Создание репозитория:

# Создаём пустой репозиторий
cd /path/to/git_repos/
mkdir project && cd project
git --bare init

# Создаём clon-репозиторий в котором будет храниться
# рабочая копия проекта
cd /path/to/project/
git init

# Добавляем файлы проекта в ветку и делаем первый коммит
git add .
git commit -m'Создание репозитория'

#Привязываем локальную ветку к удалённому репозиторию
git remote add origin ssh://user@192.168.0.1:11111/path/repo.git
git push -u origin master

 

Комментариев: 0
06.05.2012 15:13


Конфиг Git

 

Глобальные настройки git в файле:

nano ~/.gitconfig

Алиасы:

[alias]
    st = status -s
    ci = commit -S -m
    co = checkout
    br = branch
    rom = reset --hard origin/master
    rh = reset --hard HEAD
    df = diff -w
    dc = diff --cached -w
    g  = grep -np
    lg = log -p
    standup = log --since='5 day ago' --oneline --author='User Name'
    hi = log --pretty=format:"%C(yellow)%h %C(cyan)%ad%C(green bold)%d %C(reset)%s %C(green dim)[%cn]%C(reset)" --date=short
    his = log --pretty=format:"%C(yellow)%h %C(cyan)%ad %C(yellow bold)%d%C(reset) %s %C(green dim)[%cn]%C(reset)" --date=short --stat
    tree = log --graph --pretty=oneline --decorate
    pom = pull --rebase origin master
    show = show -w
    t = tag -s -m
    td = tag -d
    amend = commit --amend -C HEAD
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
    ign = ls-files -o -i --exclude-standard

Цвета:

[color]
    branch = auto
    diff = auto
    status = auto
    interactive = auto
    ui = true
    pager = true
[color "branch"]
    current = green reverse
    local = yellow
    remote = cyan
[color "diff"]
    meta = yellow bold
    frag = magenta bold
    old = red bold
    new = green bold
[color "status"]
    added = yellow
    changed = green
    untracked = cyan
[color "grep"]
    function = yellow bold
    match = red bold
    linenumber = cyan

Полезные настройки:

[user]
    name = User Name
    email = email@email.com
    signingkey = 32FERAD2
[pull]
    default = current
[push]
    default = current
[core]
    quotepath = true
    pager = less -FXRS -x4
Комментариев: 0
23.04.2012 17:00


Полезные команды

 

Позволяет в интерактивном режиме редактировать/удалять предыдущие коммиты:

git rebase -i HEAD~4

Просмотр содержания коммита:

git log -p <commit>
git show <commit>

Различные виды фильтра вывода лога:

git log --author='author' --before="3 weeks ago" --after="2012-02-30"

Записывает все текущие изменения в стек изменений и производит сборс всех изменений до HEAD текущей ветки:

git stash

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

git stash pop

Вывод списка изменений в стеке:

git stash list

Сделать diff patch из 3-х последних коммитов. Создастся файл 0001-.patch:

git format-patch -3

Залить коммиты из diff патча в локальную ветку:

git am 0001-.patch

Просмотр истории изменения файла:

git log — <полное имя файла>

Поиск коммитов содержащих слово в описании:

git log --grep=<слово>

Поиск коммитов содержащих слово:

git log -S<слово>

Удаление удалённой ветки:

git push remote :delete_me

Смена текущей ветки на серверном репозитории:

git symbolic-ref HEAD refs/heads/new
Комментариев: 0
19.04.2012 11:41


Git + Doxygen + progect version

 

В svn есть возможность при коммите подменять ключевые слова $Log$, $Date$, $Author$ на соответствующие значения текущего коммита. Во многих случаях использование этого функционала очень удобно. К сожалению, git реализация подобного функционала связана  с некоторыми сложностями. Поэтому возникла идея написания скрипта, который перед  заливкой файлов git-проекта на хостинг произведёт замены ключевых слов на соответствующие значения. Например:

\author
\date
\version

после обработки становились:

\author A.Yancharuk 
\date 05.01.2012 09:15:05
\version v.1.003RC1

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

// Current progect version
$progect_version = "";

после обработки скриптом:

// Current progect version
$progect_version = "v.1.003RC1";

Так же было бы здорово не ограничивать функционал скрипта только PHP. Чтобы подобную замену легко можно было использовать и в С, С++, shell и т.д.

Результат можно скачать по ссылке.

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

git_keywords.sh all  # Обработка всех файлов проекта
git_kyewords.sh      # Обработка файлов предыдущего коммита

Пример использования скрипта:

# Делаем коммит
git commit -ae

# Используем тег для обозначения версии проекта
git tag -a v.1.32

# Замена всех ключевых слов в файлах предыдущего коммита
git_keywords.sh

# Удаляем старую и генерим новую документацию по проекту
rm -rf ~/documentation && doxygen ~/doxygen.progect.cfg

# Заливаем новую версию проекта на хостинг
rsync -avr -e "ssh" /home/user/www/* user@host:/home/user/www/

# Откатываем все изменения произведённые скриптом
git reset --hard HEAD

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

  • Пользователь, от имени которого запускается скрипт, должен иметь 'Full name'.
  • В файлах проекта должны присутствовать следующие шаблоны: '\date', '\author', '\version',  'precommit_version = ' (без "'" символов).
  • Шаблоны замены должны располагаться в конце строки т.к. замена будет произведена от совпадения до EOL.
  • Перед использованием скрипта нужно убедиться, что в проекте используются git tags. Номер версии берётся именно из тегов.
  • Скрипт должен запускаться в корневой директории проекта. Запуск из других папок не предусмотрен.
  • При необходимости нужно добавить расширения файлов, в которых будет вести поиск соответствий. По-умолчанию проверяются файлы: *.c *.cpp *.h *.hpp *.php *.inc *.zx
Комментариев: 0
05.01.2012 10:57