Como o Git efetua o commit como root no Linux?

0

Às vezes eu tenho que modificar arquivos de configuração como o repositório /etc criado pelo etckeeper. Então eu faço isso:

sudo git commit -am "Modified this setting"

Infelizmente, ela será confirmada usando as credenciais raiz. Uma alternativa suja é

sudo git commit -am "Modified this setting" --author "John Doe <[email protected]>"

Existe outra solução?

Um outro exemplo são meus arquivos /var/www definidos com 0640 e root:www-data . Se eu quiser modificar os arquivos, tenho que fazê-lo no contexto root . Como posso fazer isso com minha própria conta de usuário?

    
por nowox 19.06.2018 / 12:49

1 resposta

2

Este script curto pode ser usado para alcançar o que você deseja, desde que você tenha configurado corretamente como seu usuário regular. Ele aceita todos e quaisquer argumentos que git commit faça, exceto --author (que ele gera automaticamente), e solicitará automaticamente uma senha, para que você não precise executá-lo com sudo :

#!/bin/bash

name='git config --get user.name'
email='git config --get user.email'

author="${name} <${email}>"

sudo git commit --author "$author" $@

Ele extrai seu nome e e-mail da configuração do git do seu usuário, compõe as informações do autor e invoca o git para criar o commit. Você pode substituir commit por qualquer outro subcomando git que gere commits e aceite o argumento --author .

Como alternativa, clone o repositório como usuário regular (via um clone SSH, portanto, para o seu /var/www example, seria git clone root@localhost:/var/www ), faça seus commits como usuário regular e, em seguida, envie-os para o repositório principal . Isso dá a você um pouco mais de liberdade para gerenciar sua cópia como quiser, mas requer que as pessoas possam fazer login como root sobre ssh na interface de loopback.

Observe, no entanto, que você deseja ter cuidado ao usar o git diretamente com etckeeper , se adicionar ou remover arquivos /etc/.etckeeper precisa ser atualizado corretamente. Isso acontece automaticamente se você usar etckeeper commit (que infelizmente não suporta autoria arbitrária de commits), mas não se você apenas fizer git commit .

    
por 19.06.2018 / 21:06

Tags