Repositório Git – falha ao empurrar alguns refs

Git é um VCS muito poderoso para manter nosso código . Podemos compartilhar e manter o histórico de nosso código de forma tão eficaz, mas pode ser um pouco pesado para aqueles que se acostumaram a criar e manter servidores de controle de versão de longa distância.

Aqueles que vêm do SVN geralmente precisam se lembrar constantemente que agora e os usuários também são funcionários operacionais, e seu repositório git é na verdade um servidor e também uma fonte de compartilhamento potencial.

Para servir a outros diretamente de sua máquina, git dê como um repositório chamado bare , como você deseja, pode compartilhar um repositório antigo ou um novo, para isso você deve:

Projeto existente:

$ git clone --bare --shared <your local or remote repository url>

Novo projeto:

$ git init --bare --shared=group

TOME CUIDADO COM AS EXECUÇÕES DE GIT INIT –BARE –SHARED = GRUPO EM REPOSITÓRIOS EXISTENTES FARÁ QUE TODAS AS REFERÊNCIAS SEJAM PERDIDAS

Depois de fazer isso, qualquer pessoa pode pegar seu ip e se conectar diretamente ao seu repositório usando por exemplo o protocolo ssh, como:

$ git clone <ssh user_name>@<repository machine ip>:<repository address>.git

Depois de adicionar algumas coisas … faça um commit e depois de tudo terminar empurre! BANG !! Inicie todos os problemas …
Como você deve notar, existem algumas diferenças na forma como os projetos novos e existentes foram definidos. Se outra pessoa tentar adicionar / confirmar / enviar os mesmos arquivos ou conteúdo (git manter os dois como os mesmos objetos), enfrentaremos o seguinte erro:

$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote
: error: insufficient permission for adding an object to repository database ./objects remote: fatal: failed to write object

Para resolver este problema você tem que ter algo em mente o sistema de permissões do sistema operacional, já que você está restrito por ele neste caso. Para entender melhor o problema, vá em frente e verifique a pasta do seu objeto git (.git / objects). Você provavelmente verá algo assim:

<your user_name>@<the machine name> objects]$ ls -la
total 200

drwxr-xr-x 25
<your user_name> <group_name> 2048 Feb 10 09:28 .
drwxr-xr-x 3
<his user_name> <group_name> 1024 Feb 3 15:06 ..
drwxr-xr-x 2
<his user_name> <group_name> 1024 Jan 31 13:39 02
drwxr-xr-x 2
<his user_name> <group_name> 1024 Feb 3 13:24 08

* Observe que essas permissões de arquivo foram concedidas apenas para seus usuários, ninguém nunca poderá alterá-lo … *

          Nível  u   g   o
Permissão rwx r-x ---
Binário 111 101 000
Octal 7 5 0

RESOLVER O PROBLEMA

Se você tiver permissão de superusuário, você pode ir em frente e alterar todas as permissões por si mesmo usando a etapa dois; em qualquer outro caso, você precisará pedir a todos os usuários com objetos criados com seus usuários, use o seguinte comando para saber quem eles são :

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

Agora você e todos os usuários proprietários do arquivo terão que alterar a permissão desses arquivos, fazendo:

$ chmod -R 774 .

Depois disso, você precisará adicionar uma nova propriedade que seja equivalente a –shared = group feito para o novo repositório , de acordo com a documentação, isso torna o grupo de repositório gravável, faça-o executando:

$ git config core.sharedRepository group