Сначала надо создать gpg-ключ командой:
gpg --gen-key
После создания можно подписывать коммиты цифровой подписью. Для этого добавим в конфиг ключ и сделаем алиас для автоматического подписывания всех коммитов.
git config --global user.signingkey=FG984AA3 git config --global alias.ci=commit -S -m
Создание репозитория:
# Создаём пустой репозиторий 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
Глобальные настройки 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Позволяет в интерактивном режиме редактировать/удалять предыдущие коммиты:
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
В 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