Eu tenho um projeto que é controlado por versão usando git.
O que eu quero fazer é configurar um repositório no meu pacote de hospedagem compartilhada GoDaddy (habilitado para ssh) para que eu possa implantar com um push, em vez de arrastar e soltar no FTP.
Qualquer dica seria apreciada. Melhor seria uma conta de alguém que já fez isso, mas eu pessoalmente não consegui encontrar nenhuma online.
Respostas:
Encontrei o mesmo problema em um site hospedado em um pacote de hospedagem compartilhada HostNine. Eles também fornecem
ssh
acesso a você , mas infelizmente não têmgit
instalado e nem permitem a execuçãogcc
, dificultando o download e a instalação do git para o usuário.A única maneira de pensar em solucionar essas restrições foi copiar os binários do git de outro computador que os possuía. Talvez a mesma solução funcione para você e seu host compartilhado do GoDaddy. Aqui está o que eu fiz:
Primeiro, descubra qual arquitetura seu servidor possui. No meu caso, era de 32 bits (i386). Aqui estão algumas maneiras de descobrir isso:
Em seguida, você precisa encontrar outro computador executando o Linux com a mesma arquitetura e com o git instalado. Eles nem precisam estar executando a mesma distribuição ou versão do Linux, contanto que tenham a mesma arquitetura e você possa encontrar os binários e os arquivos de biblioteca necessários.
Para encontrar a localização do binário principal do git:
Alguns outros binários importantes (como
git-receive-pack
) também residem no mesmo diretório, por isso recomendo apenas copiar tudo/usr/local/bin/git*
para garantir que você obtenha tudo o que precisa.Outros arquivos importantes são dos quais o git depende estão em um diretório 'libexec' em algum lugar no sistema de origem. Se você não copiar esses itens, poderá receber uma mensagem de erro surpreendente ao tentar fazer um
git push
, como eu fiz:Para localizar o diretório que contém as principais bibliotecas git em target_host, você pode usar este:
Eu recomendaria copiar esses arquivos primeiro e depois tentar executar o git para ver se ele reclama de alguma biblioteca compartilhada ausente. Caso contrário, você (presumivelmente) está pronto para ir. Se isso acontecer, continue lendo. (Não é necessário copiar em bibliotecas compartilhadas se elas já existirem no host de destino e estiverem na versão correta.)
Você pode copiar os arquivos com
scp
,rsync
,ftp
, ou o que você está confortável. Eu useiscp
algo assim:Então ssh para target_host. Você precisará adicionar algumas linhas como estas ao seu
~/.bashrc
:Se você esquecer esta etapa, poderá se surpreender ao ver esse erro ao fazer um
git push
:Isso está documentado nas perguntas frequentes do Git em git.or.cz:
GIT_EXEC_PATH
está documentado emman git
:Procure seu novo
~/.bashrc
. Agora tente corrergit
.Isto é o que me deu a primeira vez:
Consegui descobrir o local das bibliotecas compartilhadas para copiar, executando isso na máquina de origem:
No meu caso, eu apenas tive que copiar
/lib/libcrypto.so.4
para o~/lib
meutarget_host
e estava tudo bem.Agora você deve ter um trabalho
git
em seu servidor de hospedagem compartilhada e poderá fazê-lo!Agora você precisa criar um novo repositório git e uma árvore de trabalho em seu servidor ou copiar sua árvore de repositório / trabalho existente.
A propósito, não acho que um repositório vazio seja o que você deseja no servidor nesse caso, pois você disse que queria implantar os arquivos de conteúdo reais (em vez de apenas os
config HEAD objects/ refs/
arquivos que seriam incluídos em um repositório vazio) sempre você faz umgit push
.toolmantim.com explica a diferença entre um repositório git regular e um repositório bare:
Presumirei no momento que você já criou um diretório no seu
target_host
local em que deseja implantar seu site (ou o que quer que esteja implantando). Vamos chamar esse diretório~/www/my_site
. Você pode até enviar ftp sobre todos os seus arquivos para~/www/my_site already
. (Se você possui ou não não é importante.) Também assumirei por um momento que você ainda não copiou o subdiretório .git para~/www/my_site
(ele deve funcionar muito bem se você tiver).Como ainda não existe um repositório git inicializado em target_host, sua primeira etapa seria criar um:
Então, de qualquer host que tenha o repositório com as alterações mais recentes que você deseja implantar (sua caixa de desenvolvimento, eu acho), basta fazer algo assim para implantar:
Você pode
target_host
receber um aviso como esse se o seu repositório ainda não estiver atualizado:(Em
git
uso normal , você nunca vê essa mensagem, eu acho, porque você normalmente está empurrando para repositórios vazios . Mas, como nosso repositório remoto, nesse caso, é um repositório normal com uma árvore de trabalho e um índice,git
está compreensivelmente preocupado que possa estragar alguma coisa.)Porém, acho que é seguro configurá-lo para 'ignorar' no seu servidor, porque é provável que você não faça nenhum commit diretamente no repositório lá. (Todas as confirmações provavelmente devem se originar no seu repositório de desenvolvimento e depois serem enviadas ao servidor.)
Então vá em frente e defina isso para que você não veja o aviso toda vez que pressionar:
O
push
próprio atualiza apenas o índice, no entanto, NÃO os arquivos na própria árvore de trabalho. A atualização desses arquivos é apenas uma parte do que estamos tentando fazer, portanto, nosso trabalho não será concluído até que solicitemosgit
que o conteúdo do índice seja gravado na própria árvore de trabalho, da seguinte forma:(Nota: Quaisquer alterações que você possa ter tido na sua árvore de trabalho no servidor serão substituídas pelo conteúdo do repositório.)
Também segui a sugestão de mattikus e criei um controle remoto para o meu servidor:
Então agora tudo o que preciso fazer para implantar é:
Até cheguei ao ponto de lançar esses comandos em um script que eu nomeei
script/deploy
, sempre que eu quiser implantar, só tenho um único comando para executar.Informe-me se encontrar algum erro nestas instruções ou se souber de uma solução melhor.
fonte
Eu sou um SF e godaddy n00b, então tenha paciência comigo, mas de qualquer forma, estou muito feliz em ver isso discutido aqui.
Apenas meus US $ 0,02, eu tentei construir o git (dinamicamente) na minha caixa do linux, passando-o para a minha conta pessoal, e mesmo que tentasse simplesmente passar para a máquina pessoal passiva, ele falha devido à falta do openssl. Talvez se eu tentar construir o git estaticamente com o openssl, mas também pareça uma má ideia.
Fora do tópico, mas esse é o tipo de falta de apoio que devo esperar de godaddy, devo me arrepender de não ter escolhido os fantasmas dos sonhos?
Atenciosamente, CJ
PS. Não é uma resposta, mas uma sugestão de que, uma vez que o git-receive esteja funcionando com godaddy (não é?), Um repositório com uma árvore de trabalho desanexada é uma ótima maneira de implantar na Web: http://toroid.org/ams/git- site-howto
fonte
A maneira mais fácil de fazer isso é executando algo assim no seu servidor remoto:
Em seguida, no seu checkout de desenvolvimento:
Não há servidor ou qualquer outra coisa necessária, e você deve poder buscar / extrair dessa máquina, desde que tenha acesso ssh.
Se você também tiver o seu .ssh / config configurado, ele deve tirar vantagem disso e usar as chaves privadas que você tiver configurado.
Se você planeja enviar muitas atualizações, pode adicionar um repositório remoto ao seu checkout devel:
A partir de então, você pode:
Para obter mais informações, consulte os documentos on
git push
- line ou executegit push --help
para abrir a página de manual no seu local.fonte