Não é possível enviar para os repositórios remotos do git

2

Estou tendo problemas para enviar meu código para um repositório remoto do git do meu host local. Esse problema aparece apenas para repositórios que foram criados inicialmente com URLs remotos que são diretórios do sistema (por exemplo, / var / www / lib) e acessados posteriormente por meio de URLs remotos que são http urls ( eg. http://mysite.com/repo.git ) . Aqui está o erro que estou recebendo:

Fetching remote heads...
  refs/
  refs/tags/
  refs/heads/
  fetch 023264fe3e5e24075307512502599d279c1a1640 for refs/heads/master
error: remote 'refs/heads/master' is not an ancestor of
local 'refs/heads/master'.
Maybe you are not up-to-date and need to pull first?
fatal: git-http-push failed

Aqui estão os passos para criar o problema. Inicialmente, eu preenchi o repositório remoto do próprio servidor remoto assim:

cd /var/www/
git init
git add .
git commit -m 'test'
git remote add newproject /var/lib/git/newproject.git  ## I suspect the problem begins here
git push newproject master

Por cerca de uma semana, eu tenho cometido, puxado e empurrado sem problemas, porque eu estava trabalhando diretamente fora do servidor remoto de /var/www/ . Então, hoje, eu instalei o webdav para que eu possa empurrar e puxar do meu host local. Tenho certeza que instalei e configurei o git e o apache corretamente. Então, do meu localhost, aqui está o que eu fiz:

cd /home/user/newproject/
git init
git remote add newproject http://[email protected]/newproject.git  # this is different from above where i used /var/lib/git/newproject
git pull newproject master   #worked perfectly
vi test.html
git add test.html
git commit -m 'test'
git push newproject master

Então eu recebo o erro como mencionado pela primeira vez. Um pull não resolveu esse problema. Todos os novos repositórios feitos com as versões http não têm problema com push e pull. Apenas os repositórios antigos que foram criados com / var / lib / git estão tendo problemas ao alternar para a versão http.

Alguém sabe como consertar isso?

    
por John 06.04.2011 / 16:05

1 resposta

1

Retiro sua pergunta, de que o webdav para o mesmo usuário funciona como planejado para outros repositórios, portanto o webdav está configurado corretamente.

Para onde http://[email protected]/newproject.git aponta? Ele aponta para o repo em /var/lib/git/newproject.git ou para /var/www ?

Eu posso ver dois possíveis problemas:

  1. O usuário do httpd precisa de acesso de gravação para todos os arquivos de repo
  2. O repositório deve ser nu

Acesso de gravação para o usuário do httpd

O servidor da Web tem acesso de gravação a todas as partes do repositório? Quando você faz push localmente, pode ter criado arquivos com uma conta de usuário (ou raiz) que o servidor da Web não pode gravar agora. Obviamente, o mesmo se aplica quando o servidor web tenta acessar o repositório em /var/www .

A melhor opção seria chown -R de todos os arquivos para o usuário do httpd.

repo nu

O repo de destino é um repositório vazio?

Tecnicamente, não é necessário que o repositório esteja vazio, mas há problemas que podem surgir quando você tem uma cópia de trabalho registrada de um ramo para o qual você está empurrando. Seu problema pode ser um desses problemas.

Veja também como converter um -git-repository-from-normal-to-bare e tudo sobre repos "bare" .

Você deve verificar git status , git branch e similar no diretório de destino para problemas.

Se você continuar tendo problemas, outra opção óbvia é clonar o repositório servido, mover o repositório servido para algum outro local, git init --bare (corrigir permissões ou fazê-lo como usuário httpd) e pressionar novamente.

problema-com-git-remote-refs-heads-master-não-é-um-ancestral-de-local-refs-h é uma pergunta no Stackoverflow sobre a mesma mensagem de erro em uma configuração similar. / p>     

por 22.12.2012 / 17:16

Tags