Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

codercss

Permissões para a pasta git

Recommended Posts

Olá a todos,

Não sei se este é o melhor local para esta questão, mas cá vai! Caso esteja no local errado agradeço que me informem! Obrigado

Configurei pela primeira vez o git numa máquina, que está a servir de servidor.

A pasta do git está em /media/local/git

Que permissões devo colocar na pasta git e na sua estrutura "/media/local/"?

Acabei por colocar a pasta git como utilizador comum e com 777. Fiz bem?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende quem vai acessar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abaixo segue a tabela com os códigos de permissão (formato octal):

| | r | w | x | Descrição
| 0 | - | - | - | Nenhuma permissão de acesso.
| 1 | - | - | x | Permissão somente de execução (x).
| 2 | - | x | - | Permissão somente de gravação (w).
| 3 | - | x | x | Permissões de gravação e execução (wx).
| 4 | x | - | - | Permissão somente de leitura ®.
| 5 | x | - | x | Permissões de leitura e execução (rx).
| 6 | x | x | - | Permissões de leitura e gravação (rw).
| 7 | x | x | x | Permissão total (leitura, gravação e execução, rwx).
Exemplos mais comuns

Usaremos o código de cores para facilitar a compreensão quanto ao owner, grupo e outros:

Permissão 644:
644 ou [rw-r--r--]: Owner com permissão de leitura e gravação, grupo com permissão somente de leitura, outros com permissão somente de leitura.
Permissão 755:
755 ou [rwxr-xr-x]: Owner com permissão total, grupo com permissão de leitura e execução, outros com permissão de leitura e execução.
Permissão 777:
777 ou [rwxrwxrwx]: Owner com permissão total, grupo com permissão total, outros com permissão total.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela explicação.

O que pretendo é ter um servidor onde qualquer pc que se ligue na rede possa fazer um pull. E consequentemente um push.

Quais níveis e qual proprietário deve ter essa pasta, git, no servidor?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai permitir push e pull via SSH, certo? Se todos os usuários fizerem SSH com o usuário dono da pasta (como é no GibHub, onde você faz SSH com o usuário git), basta que o owner tenha as permissões de escrita e leitura (0 755 padrão já resolve).

Se os usuários fizerem SSH com seus próprios usuários, recomendo que configure-os no mesmo grupo do usuário git e deixe a pasta com 775. Dessa forma não precisará deixar 777.

Meu tutorial completo sobre chmod e permissões: http://rberaldo.com.br/chmod-permissoes-em-sistemas-linux-e-unix-like/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Viva Beraldo,

Antes de mais parabéns pelo seu excelentes emails sobre php, aprendo bastante :) Continue esse excelente legado e trabalho que tem criado :)

Sim, o objectivo é que os usurário consigam fazer push and pull, via ssh.

Pelo quer percebi existe duas maneiras:

1-Todo o developer que entrar na minha rede pode ser acesso aos códigos que estão no git, via ssh, e via usuário git. Terei apenas que lhe passar a pass do utilizador. Ele vai fazer algo como "git clone git@ip/schacon/grit.git

2-Para todos os usuarios que entrarem e quiserem aceder ao reposotório terei que lhes dar acesso diretamente no servidor. A vantagem disso é que tenho um acesso mais controlo, certo?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, o diretório <projeto>.git no servidor não deve ser acessado diretamente. Ele é só um conjunto de dados sobre os arquivos, não os arquivos em si.

O correto é sempre fazer um clone do projeto. Esse clone terá a estrutura de arquivos correta.

E para isso, basta que o usuário faça um clone via SSH com o próprio usuário git. É só cadastrar as chaves de cada usuário no authorized_keys do usuário git

Em outras palavras, use só o primeiro método que você citou. O segundo não te dá mais controle, pois é possível limitar cada chave do authorized_keys, desabilitando acesso ao terminal. Assim a chave só servirá pra autenticar e fazer o clone/push/pull, sem dar acesso ao shell :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

Então terei que fazer o seguinte:

  1. Criar um utilizador git;
  2. Esse utilizador será owner da pasta;
  3. O grupo estará da responsabilidade o root;
  4. As permissões, segundo o post do nosso colega xanburzum será de 600. Pois pretendo que o owner consiga ler e escrever mas não quero que ele execute. O resto, o grupo, incluindo o root, e o resto do mundo não tem acesso a nada;

A equipa tenho apenas que passar os seguintes dados:

  1. user: git;
  2. pass: ******

Certo?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

600 está bom, mas vale lembrar que "execução" em uma pasta é entrar nela (comando cd). Com 600, não será possível dar cd na pasta. Se esse for o comportamento desejado, ok, deixe 600

Você pode passar a senha do usuário para todos, sim. Mas eu nunca faria isso. Prefiro utilizar o sistema de chaves (tutorial aqui). Com chaves fica mais mais seguro e organizado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok....ando um pouco confuso com isto :P

O que fiz foi:

1-Criar no servidor uma pasta com as seguintes permissões e users:

drwxrwx---  3 git  root 4096 Aug 17 23:21 projects

O user git não tem pasta home (tutorial bom: http://www.tecmint.com/add-users-in-linux/);

2-Criei uma pasta, chamada proj1.git com as mesmas permissões e users;

3-No interior dela fiz "git init --bare" (tutorial bom: https://blog.butecopensource.org/criando-um-git-server-local/);

No cliente fiz:

1-git clone user@ip_do_git_server:/path/to/my_project

Agora estou a ler este site (http://rogerdudler.github.io/git-guide/index.pt_BR.html). E estou a descobrir que ainda não sei mexer com o git :P Mas isso eu já desconfiava hehe, mas vamos lá estudar :)

Esbarrei com este site (https://git-scm.com/book/pt-br/v1/Git-no-Servidor-Configurando-Git-no-Servidor) Mas confesso, que neste momento, ainda me baralhou mais. Talvez numa fase mais a frente.

Estou a ver este livro (https://www.casadocodigo.com.br/pages/sumario-git-github) Aconselham a leitura? Ou é preferível ler o site do git?

Encontrei este artigo: https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow Gostei da explicação!

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho estes dois artigos sobre Git:

http://rberaldo.com.br/git-controlando-versao-de-seus-programas/

http://rberaldo.com.br/git-criando-repositorios-remotos/

Sobre o livro, não conheço, então não vou opinar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Beraldo,

Segui os seus artigos e consegui montar o ambiente. Mas tive que dar permissões 777, para toda a arvore que recebe os projectos git no servidor. Porque com 600 ou 775 o user comum no pc comum não consegui fazer os push ou pull.

É seguro manter o sistema assim?

Vou ler sobre as ssh keys, pois é bastante chato ter que ficar a passar a pass do user git todas as vezes que é necessário fazre push ou pull.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado xanburzum obrigado pelos artigos, vão ler!

Uma questão que me está a mexer com a cabeça :P

Já consegui montar o git repositório no servirdor. Estão apenas as voltas com as permissões. Pois só funciona com 777. Apesar de configurar para user git, que não tem pasta home, e usergroup para root, fico preocupado com o 777. Acham, também que é nível a mais?

Mas a minha questão é referente ao workflow. Programo no meu ambiente e faço o push commit para o servidor git. Esse servidor também recebe o apache. Como faço para actualizar a versão que está no apache ao mesmo tempo que faço o commit? Ou isso não funciona assim?

A ideia era quando fazer o "git commit -am "mesage" ele actualiza-se logo o que está no apache.

Estive a explorar o conteúdo do repositório no git servidor, e não vejo lá os ficheiros :P Vejo que existe uma séria de pastas e arquivos, que serve de base de daods para o git, penso eu!

Obrigado malta, e caso queiram que abre um novo tópico digam por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre rodar pull automaticamente, nunca fiz isso, mas encontrei este tutorial: https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps

777 me parece exagero. Se todos os usuários fazem login com o usuário dono do repositório, 700 deveria ser suficiente

O diretório <projeto>.git não terá os arquivos. Nessa pasta ficam só os diffs de cada commit e outros arquivos do git. Com base nesses dados o git gera a árvore de diretórios ao fazer o clone do projeto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi com nível 700. Talvez antes, por ainda não saber utilizar o git, tive-se feito confusão.

Em relação em rodar o pull automaticamente achei uma solução de colocar uma tarefa no crontab -e para rodas todos os dias à meia noite. Essa tarefa iria rodar um script com o comando

git pull origin master

Na pasta do apache.

Apenas vejo vantagem neste processo de utilizar o branch master como versão final. Pois assim estarei sempre seguro que a versão que entra em produção é a versão final.

Quando comecei a pesquisar por git fiquei com a ideia que o envio da versão de desenvolvimento para produção era mais prática. Pois fiquem com ideia que o ftp tinha "morrido"!

De certa maneira, ainda com os meus conhecimentos básicos, acho que está mais prático e seguro que o ftp. Pois basta aceder no servidor e correr o comando "git pull origin master" e está tudo pronto!

Neste livro, https://www.casadocodigo.com.br/pages/sumario-git-github, que já li e aconselho, o autor sugere vários ambientes de desenvolvimento com o git. Um deles é o "Utilizando branches por funcionalidade com um repositório central" que gostei particularmente. Pois utiliza o branche master como versão final e para cada nova feature é criado um branch especifico. Após a aprovação o mesmo é "merge" com o branch master. O que dá para utilizar o script que falei à pouco.

Mas top, top será o ambiente "Utilizando branches por etapa de desenvolvimento com um repositório central" que sugere a utilização de branch para "hotfix" e tudo! :) Mas ainda tenho que partir muita unha no git para chegar aí!

[uPDATE]

Outra coisa que acabei por perceber foi a utilização do git. Antes pensava que o git era um vcs e um sistema de backup. Mas agora percebo que apenas devemos fazer um commit quando acabamos uma etapa importante de uma funcionalidade que estamos a desenvolver.

O desenvolvimento de uma nova funcionalidade, que depois será mesclada no projecto final, terá vários commits. O próprio ponto de mesclagem será ele também um commit!

Muito bom! Adoro a filosofia!

Nota: Eu não sou programador a tempo inteiro. Sou uma pessoa que gosta de programar e de momento estou desempregado, por isso estou a tentar aprender a área para ganhar algum dinheiro!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia do cron funciona, mas apenas uma vez por dia. Pensei que você queria forçar o pull sempre que um push for feito para o branch master.

O Git é muito bom. Bem mais organizado e rápido que usar FTP. Aliás, odeio FTP :P

Eu não diria que só devemos fazer commit ao finalizar uma tarefa. Acho que devemos fazer commit sempre que uma etapa da tarefa for finalizada. O push (ou o merge seguido pelo push), sim, deve ser feito apenas depois de finalizar a tarefa.

Dentro de uma tarefa, se houver vários commits, podemos desfazer alguma modificação que fizemos simplesmente voltando a versão. Por isso prefiro commitar várias vezes :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim a ideia era fazer o pull sempre que um push for feito. Partilhei a ideia do cron por achar interessante. Mas vou ler os links que me enviou!

Como é o seu workflow para o servidor web? Neste momento tenho o projecto no meu pc, onde faço commit de tudo o que vou fazendo. Quando quero enviar para o repositório central faço "git push origin master" e lá vai ele :P

A questão que ainda estou preço é como isso fica disponível para o apache. Antes pensava que os ficheiros do projecto ficavam no repositório central. Mas não, o que fica lá é apenas os diff's e mais alguns ficheiros que o git precisa para gerir o sistema.

Por isso, agora entendo que precise de fazer o pull na pasta do apache.

Mas o que ainda não consegui perceber é se isso pode ser feito quando eu fizer o push no meu pc ou se tenho que aceder ao servidor, via ssh, e fazer lá o pull.

Nota: Utilizei o ftp por pouco tempo, mas tive que muitas vezes que apontar num papel, ou arquivo txt, as vezes que fazia update no ftp. E confesso que ficava com medo ao ver os arquivos subir, muitas vezes tive arquivos que não subiram e tinha que andar a fazer overwrite a alguns deles! Medo!

Não estou a falar mal do ftp, foi muito bom no seu tempo e talvez ainda seja. Apenas estou a comentar que me sinto mais confiante com o git, apesar de ainda não estar a 100%

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.