Como impedir que o git exija o sudo em todos os comandos do git


10

Eu criei um diretório /var/wwwpara armazenar meus aplicativos da web clonados. Quando eu clonei o aplicativo no GitHub, ele exigiu que eu usasse o sudo, e toda vez que eu faço git pullisso é necessário o sudo. Estou com alguns problemas por causa disso. Por exemplo, minhas chaves ssh não estão correspondendo. Portanto, quando eu faço o meu git pull, estou tendo que usar HTTPS em vez de ssh e inserir manualmente meu nome de usuário e senha toda vez que desejar obter e atualizar meu aplicativo. Como eu configuro isso para não precisar usar o sudo toda vez que uso o git?

Respostas:


12

Algumas coisas estão acontecendo aqui:

  • Quando você sudo git checkout ..., todos esses arquivos pertencem ao usuário raiz e ao grupo raiz. Com as permissões padrão, é por isso que alterações subsequentes nesses arquivos exigem que você seja root.

  • /var/www/por padrão, pertence ao www-datagrupo. Algo que seu usuário não é por padrão.

A maneira mais fácil de escrever /var/www/é adicionar seu usuário ao grupo www-data . Obviamente, você pode alterar o diretório a ser de propriedade do usuário, mas isso pode ter alguns efeitos desagradáveis ​​se você não os está antecipando.

Você precisará fazer login novamente depois de adicionar seu usuário ao grupo www-data.

No seu caso, especificamente, você precisará corrigir sua bagunça atual de dados de propriedade da raiz. Você pode excluí-lo como root (e fazer check-out novamente), mas se tiver um trabalho não salvo, será mais limpo extrair tudo do seu usuário. O exemplo a seguir é extremamente preguiçoso e assume que estamos falando da única coisa em / var / www /:

sudo chown -R www-data: /var/www/

Ok, seria melhor sudo git checkoutentrar em outro diretório e implantar meu aplicativo no diretório / var / www? Acabei de ler em algum lugar que geralmente não é uma boa idéia fazer check-out de projetos no diretório var para começar. Uma pessoa recomenda a verificação de projetos para o diretório home
Scott

2
Seria melhor se você parasse de executar o git como root. Apontar para isso. Qualquer plano que o deixe executando como raiz já falhou. O que você está dizendo sobre fazer check-in em um .gitdiretório da Web está correto - conceder às pessoas acesso ao seu diretório pode dar a elas coisas que você não deseja que as pessoas acessem, mas você pode impedir o acesso ao .git/diretório que atenua todo o problema.
Oli

Também existem outras estruturas de diretório aceitáveis, nas quais você tem um diretório de espera para o seu site, para onde vão as coisas não hospedadas (incluindo o .git) e dentro dela existe um diretório público / que você solicita ao Apache para hospedar. O espírito de manter um site em / var / www / é muito arcaico.
Oli

Você tem uma estrutura de diretórios recomendada? Basicamente, eu tenho meu checkout e, em seguida, tenho que agrupá-lo em um .tgz. E então eu tenho que descompactar isso em um aplicativo de nó. A propósito, é uma aplicação de meteoros. Eu sou o tipo de confuso em que para manter essas três pastas / arquivos separados
Scott

@ Scott Eu me deparei com esse mesmo problema. Subcomandos subsequentes no repositório (no meu caso) chamarão git e tentarão clonar outros repositórios. A solução, para realinhar as chaves SSH, como você declarou, era iniciar o processo sem usar o sudo. Muitas dessas discussões de perguntas e respostas e discussões são uma solução alternativa que provavelmente o levará a muros no caminho.
Jordan Stefanelli

0

Mudar o proprietário da pasta? Mudei minha pasta www em / home / nome de usuário, você pode alterar sua localização em / etc / apache2 / sites-enabled / 000-default


Então isso tem a ver com o diretório em que estou armazenando meu clone?
9133 Scott

Sim, exatamente. Por padrão, /var/wwwnão pode ser gravado.
Joyfulgrind

0

Estou um pouco atrasado com esta resposta, mas descobri que, para evitar digitar a senha cada vez, precisava alterar o repositório de https para ssh.

Na seção de ajuda do Github.com:

O comando git remote set-url altera uma URL de repositório remoto existente.

Terminal aberto.

Altere o diretório de trabalho atual para o seu projeto local.

Liste seus controles remotos existentes para obter o nome do controle remoto que você deseja alterar.

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Altere o URL do seu controle remoto de HTTPS para SSH com o comando git remote set-url.

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

Verifique se o URL remoto mudou.

git remote -v

# Verifique o novo URL remoto

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.