Запретить пользователям совершать git как неправильный пользователь

Я использую git и Codebase для проекта.

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

Есть ли способ запретить пользователям совершать или нажимать кому-то еще детали пользователя (эффективно, чтобы они не могли "подделывать" коммиты как принадлежащие другому пользователю)?

Edit:

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

Изменить 2:

Git config в соответствии с запросом:

(репо/.git/конфигурации)

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:<redacted company name>/<redacted project name>/test.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

Ответы

Ответ 1

Ooops. Хотя это допустимый метод, предполагается, что вы полностью контролируете сервер. Если вы используете размещенное решение, все ставки отключены.

Вы можете проверить имя автора и адрес электронной почты в репозитории update. Вы можете получить оба значения:

#!/bin/sh
set -- refname sha1_old sha1_new
author_name=$(git log --pretty=format:%an $sha1_new)
author_email=$(git log --pretty=format:%ae $sha1_new)

Трюк, конечно, выясняет, действительно ли они действительны. Вот один трюк:

Вы можете использовать опцию command="" в вашей конфигурации ssh, чтобы сделать обертку вокруг git-receive-pack, которая отображает ключи ssh в информацию об авторе. Например, что-то вроде этого:

#!/bin/sh

GV_AUTHOR_NAME="$1"
GV_AUTHOR_EMAIL="$2"

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME
eval exec $SSH_ORIGINAL_COMMAND

И вы бы использовали строку authorized_keys примерно так:

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' '[email protected]'" ssh-rsa ...

Результат всего этого состоит в том, что ваш update script будет иметь переменные окружения GV_AUTHOR_NAME и GV_AUTHOR_EMAIL, доступные и может проверять их против фиксации и выхода с ошибкой, если они не совпадают.

Ответ 2

Извините, мое сообщение удалено, прежде чем я отправил свое последнее обновление:

Вы можете совершать как кто-то еще, когда у вас есть свои учетные данные.

Чтобы уточнить, сценарий, о котором вы спрашиваете, выглядит следующим образом:

Пользователи Foo и Bar могут передать репо. Вы хотите, чтобы пользователь Foo не перешел на репо в качестве пользовательской панели.

В этом случае пользовательская панель должна защитить свой частный SSH-ключ, точно так же, как защитить пароль. Поскольку это используется для аутентификации вашей фиксации.