Eu hospedo meu próprio repositório git em um VPS. Digamos que meu usuário seja john.
Estou usando o protocolo ssh para acessar meu repositório git, então minha URL é algo como ssh://[email protected]/path/to/git/myrepo/
.
Root é o dono de tudo o que está sob /path/to/git
Estou tentando conceder acesso de leitura / gravação a john para tudo o que está sob /path/to/git/myrepo
Eu tentei os dois chmod
e setfacl
controlamos o acesso, mas ambos falham da mesma maneira: eles aplicam direitos recursivamente (com as opções corretas) a todos os subdiretórios existentes do momento /path/to/git/myrepo
, mas assim que um novo diretório é criado, meu usuário não pode escrever no novo diretório.
Eu sei que existem ganchos no git que me permitirão reaplicar os direitos após cada confirmação, mas estou começando a pensar que estou indo na direção errada, porque isso parece muito complicado para um propósito muito básico.
P : Como devo configurar o meu direito de conceder ao rw acesso a john para qualquer coisa abaixo /path/to/git/myrepo
e torná-lo resistente a alterações na estrutura da árvore?
P2 : Se eu der um passo atrás, mude a abordagem geral, por favor me diga.
Edit : A pergunta foi respondida como está, mas essa foi a pergunta errada. A pergunta certa seria "Como configurar um repositório bare git no servidor para uso com acesso ssh?". Veja minha própria resposta.
fonte
g+s
. Claro que você também precisará primeiro entender o básicochmod
.{}
- é um espaço reservado para substituição de nome de arquivo.;
é o terminador do comando executado por-exec
. Como;
tem um significado especial,bash
ele deve ser escapado com \. vejaman find
para detalhesNa verdade, essa foi a abordagem errada. Após pesquisas adicionais, descobri que, no meu caso, tenho que usar os recursos de compilação do git para lidar com o sistema de arquivos no repositório.
É basicamente feito com a
shared
opção degit init
, que pode ter (entre outros) os seguintes valores:group
: inicialize o repositório para que arquivos e diretórios tenham acesso de gravação de usuário e grupo e todo mundo tenha acesso de leitura0660
: mesmo, mas sem acesso de leitura para os outros.Os diretórios e arquivos recém-criados automaticamente têm as permissões corretas. Você também pode usar
git init
em um repositório existente para reconfigurá-lo sem perder seu conteúdo.Então, no final, o que eu tinha que fazer:
mygitrepo
root:mygitrepo
E agora todos os usuários do grupo podem puxar / empurrar, e mais ninguém pode, e isso sem mexer nos direitos do sistema de arquivos.
http://www.kernel.org/pub/software/scm/git/docs/git-init.html para mais informações.
fonte
Se houver ACLs suportadas, você poderá fazê-lo com ACLs padrão. Lembre-se de que é fácil esquecer aqueles, pois eles não aparecem quando você faz um
ls -l
.Mas suspeito que você queira fazer algo um pouco mais organizado. A implantação de gitolita pode fornecer uma solução melhor.
fonte
ls
(e também acho que o Squeeze), você recebe um+
no final das permissões para dizer que há uma ACL:drwxr-xr-x+ 2 anthony anthony 4096 Sep 28 11:16 i-have-an-acl
find ... -exec cmd {} +
sintaxe, na qual{}
é substituído o maior número possível de nomes de arquivos encontrados (como oppsed{} \;
onde{}
é substituído apenas por um arquivo encontrado por vez)