Совместный git


Правильный подход к коллективному использованию git -
это коммиты рядовых разработчиков в ветки типа dev-branch-*
и merge избранных веток ведущими разработчиками в ветки prod-branch-v*

Чтобы не путать ветки dev* и prod* - нужно заблокировать
неавторизованные коммиты, например, в master-ветку на сервере.

Делается это с помощью серверного хука "pre-receive":

#!/bin/bash

whiteList=(user1 user2 user3)

usr=$USER

#variants:
#usr=$GITHUB_USER_LOGIN
#usr=$GITHUB_USER_EMAIL

if [[ " ${whiteList[*]} " =~ " $usr " ]]; then
    exit 0
fi

while read oldrev newrev refname; do
    if [ "$refname" != "refs/heads/master" ]; then
        exit 0
    fi
done

echo "User '$usr' is not allowed commit changes in branch"
exit 1

В данном примере хук разрешает коммит в ветку "master" только пользователям
из белого листа - остальные могут коммитить только в другие ветки.

Много полезных примеров на эту тему можно найти здесь:
https://github.com/github/platform-samples

#