Na máquina local :
-
Inicialize o diretório a ser sincronizado como um repositório Git
git init
Confirme 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/server
Onde
-
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 ignore
Isso é 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-receive
git hook :Crie um arquivo
post-receive
no diretório.git/hooks
e abra-o em um editor:vim .git/hooks/post-receive
Coloque o seguinte:
#!/bin/sh git --git-dir=. --work-tree=.. checkout -f
Defina seu modo como executável:
chmod +x .git/hooks/post-receive
Isso 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.