Na máquina local :
-
Inicialize o diretório a ser sincronizado como um repositório Git
git initConfirme qualquer código existente
git add -A git commit -am "initial commit" -
Defina seu controle remoto para o servidor
git remote set-url origin user@server:/path/to/dir/on/serverOnde
-
useré o nome de usuário que você usa para o SSH no seuserver. Por exemplo. [email protected] -
/path/to/dir/on/serveré o diretório no servidor para o qual você deseja sincronizar suas alterações
Nota: é aconselhável ir sem senha para logins do SSH
-
Na máquina remota :
-
Inicialize um diretório vazio no servidor
mkdir /path/to/dir/on/server cd /path/to/dir/on/server git init -
Defina sua configuração para ignorar as atualizações da ramificação de check-out
git config receive.denyCurrentBranch ignoreIsso é necessário porque (citando o erro exato que você obterá se você não fizer isso) " atualizar o ramo atual em um repositório não-nu é negado, porque ele fará o índice e a árvore de trabalho inconsistente com o que você empurrou, e vai exigir 'git reset --hard' para coincidir com a árvore de trabalho para HEAD. "(vamos realmente fazer exatamente isso na próxima etapa).
-
Configure um
post-receivegit hook :Crie um arquivo
post-receiveno diretório.git/hookse abra-o em um editor:vim .git/hooks/post-receiveColoque o seguinte:
#!/bin/sh git --git-dir=. --work-tree=.. checkout -fDefina seu modo como executável:
chmod +x .git/hooks/post-receiveIsso fará o checkout de suas últimas alterações no diretório do servidor sempre que você pressionar qualquer.
-
One-liner para todos acima:
dir=<dir>; mkdir $dir && cd $dir && git init && git config receive.denyCurrentBranch ignore && printf '#!/bin/sh\ngit --git-dir=. --work-tree=.. checkout -f' > .git/hooks/post-receive && chmod +x .git/hooks/post-receive
Agora, na máquina local, você pode fazer isso:
git commit -am "Some changes"
git push
e seu diretório local será sincronizado com o diretório do servidor.
Uma receita adicional que eu uso com frequência: Na máquina local, mantenho o nome origin remoto do Github / Bitbucket que é a "casa" do projeto, e um nome especial server remoto que é onde ele fica implantado. Eu também criei uma ramificação git (que também é chamada) server e configurei para sempre enviar para o server remote:
git config branch.server.remote server
git config remote.server.push server:master
Dessa forma, sempre que estou no branch master, ele envia para o origin (Github / Bitbucket etc) e quando estou no branch server ele envia para o servidor.