Acho que vale a pena examinar aqui a terminologia usada no git:
- git working tree: os arquivos em que você está trabalhando atualmente
- git staging area: arquivos que você indica que deseja em seu próximo commit
- git repository: um diretório em sua máquina com os arquivos de trabalho, bem como um diretório
.git
, que contém a versão completa & história da filial, etc.
Cada desenvolvedor possui um repositório git completo ao clonar outro repositório em sua máquina. De fato, todo repositório git possui todos esses elementos (exceto repositórios vazios nos quais não precisamos entrar aqui).
O que você quer é mais uma questão de processo ou política que governe o fluxo de trabalho de sua equipe. Você poderia configurar um pouco assim:
- cada desenvolvedor tem seu repositório git funcional em sua máquina
- desenvolvedores fazem commits
- que esta seja a árvore de trabalho como você a define acima
- assim que o desenvolvedor termina o trabalho, eles
git push
os confirmam para um repositório git em algum servidor em rede- é aqui que você faz seus testes, etc.
- este é o servidor de teste da sua equipe
- quando os novos commits passarem em todos os testes, você
git push
deles para o repo final no github- este é o repositório principal e autoritário da sua equipe
Note que cada marcador é um repositório git que serve a qualquer propósito que você precisar e o define.
Um commit é feito pelo desenvolvedor em sua estação de trabalho. Depois disso, tudo que o git faz é embaralhar os commits entre os repositórios, onde quer que eles estejam e qualquer função que eles possam servir.
Espero que resolva as coisas um pouco.