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