Checkout automaticamente após o envio

1

Basicamente, eu só quero usar o git como uma espécie de FTP unidirecional.

Eu tenho um repositório do git local em local/ . Eu quero empurrá-lo para server:remote/ , e eu quero que depois todos os arquivos são retirados em remote no servidor (de forma idêntica ao que parece localmente, assumindo que eu git-add ed tudo)

Em outras palavras, quero reproduzir esse comportamento do Mercurial:

[hooks]
changegroup.update = hg update && echo updated successfully.

Eu encontrei toneladas de tutoriais que fazem isso com dois diretórios separados no lado do servidor, mas eu preferiria usar um único. Isso é possível? Quando eu tento, recebo a mensagem, abaixo da qual eu realmente não entendo.

Qual seria a melhor prática para fazer isso? (Se necessário, você pode assumir que eu nunca mudo nada no servidor, então --force ing algo não seria um problema.)

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
    
por Marian 26.02.2018 / 17:08

1 resposta

1

I want to reproduce this behaviour from Mercurial:

Com versões recentes, a configuração mencionada na mensagem de erro agora suporta um novo valor:

[receive]
    denyCurrentBranch = updateInstead

Isso deve lhe dar exatamente o comportamento que você deseja.

I found tons of tutorials that do this with two separate directories on the server side

Como alternativa, você pode ainda usar a maioria desses tutoriais, empurrando para um branch diferente (ou seja, não para o que está sendo retirado, mas para algo como deploy ).

git push origin master:deploy

Agora você pode usar% (%) ou post-receive de ganchos semelhantes (ou até mesmo iguais) como se estivesse empurrando para um repositório vazio. Por exemplo, o gancho pode executar post-update ou até git merge --ff-only deploy .

    
por 26.02.2018 / 18:25

Tags