Atualmente, esta resposta se aplica apenas ao uso de dois computadores Linux [ou talvez também funcione no Mac? - não testado no Mac] (sincronizando de um para o outro) porque escrevi esse script de sincronização no bash. No git
entanto, é simplesmente um invólucro , portanto, fique à vontade para pegá-lo e convertê-lo em uma solução Python de plataforma cruzada ou algo assim, se desejar
Isso não responde diretamente à pergunta do OP, mas é tão próximo que eu garanto que ele responderá à pergunta de muitas outras pessoas que chegam nesta página (a minha incluiu, na verdade, como eu vim aqui antes) escrever minha própria solução) estou postando aqui de qualquer maneira.
Eu quero:
- desenvolva código usando um IDE poderoso como o Eclipse em um computador Linux leve e, em seguida,
- construa esse código via ssh em um computador Linux diferente e mais poderoso (a partir da linha de comando, NÃO a partir do Eclipse)
Vamos chamar o primeiro computador em que escrevo o código "PC1" (Computador Pessoal 1) e o segundo computador em que construo o código "PC2". Eu preciso de uma ferramenta para sincronizar facilmente de PC1 para PC2. Eu tentei rsync
, mas era incrivelmente lento para grandes repositórios e consumia toneladas de largura de banda e dados.
Então, como eu faço isso? Que fluxo de trabalho devo usar? Se você também tiver essa pergunta, aqui está o fluxo de trabalho que eu decidi. Eu escrevi um script bash para automatizar o processo usando git
para enviar automaticamente as alterações de PC1 para PC2 por meio de um repositório remoto, como o github. Até agora, funciona muito bem e estou muito satisfeito com isso. É muito, muito mais rápido do que rsync
, mais confiável, na minha opinião, porque cada PC mantém um repositório funcional de git e usa muito menos largura de banda para fazer toda a sincronização, por isso é facilmente viável no hot spot de um telefone celular sem usar muitos dados.
Configuração:
Instale o script no PC1 (esta solução assume que ~ / bin está no seu $ PATH):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
Agora edite o arquivo "~ / .sync_git_repo" que você acabou de copiar acima e atualize seus parâmetros para se adequar ao seu caso. Aqui estão os parâmetros que ele contém:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
Git clone seu repositório que você deseja sincronizar no PC1 e no PC2.
- Verifique se as teclas ssh estão configuradas para poder empurrar e puxar para o repositório remoto do PC1 e PC2. Aqui estão alguns links úteis:
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Verifique se as teclas ssh estão configuradas para ssh de PC1 a PC2.
Agora cd
em qualquer diretório dentro do repositório git no PC1 e execute:
sync_git_repo_from_pc1_to_pc2
É isso aí! Cerca de 30 segundos depois, tudo será sincronizado magicamente do PC1 para o PC2, e a saída será impressa o tempo todo para informar o que está fazendo e onde está no disco e em qual computador. Também é seguro, porque não substitui nem exclui nada que não foi confirmado. Ele faz o backup primeiro! Leia mais abaixo para saber como isso funciona.
Aqui está o processo que esse script usa (ou seja: o que realmente está fazendo)
- Do PC1: verifica se há alterações não confirmadas no PC1. Nesse caso, ele os confirma em uma confirmação temporária na ramificação atual. Em seguida, força os empurra para uma ramificação SYNC remota. Em seguida, ele descompacta seu commit temporário que acabou de fazer na ramificação local e, em seguida, coloca o repositório git local de volta exatamente como estava, testando todos os arquivos previamente testados no momento em que você chamou o script. Em seguida, é uma
rsync
cópia do script para o PC2 e faz umassh
chamada para informar ao PC2 para executar o script com uma opção especial para fazer apenas coisas do PC2.
- Aqui está o que o PC2 faz: ele
cd
entra no repositório e verifica se existem alterações locais não confirmadas. Nesse caso, ele cria uma nova ramificação de backup extraída da ramificação atual (nome da amostra:. Agora, ele faz check-out da ramificação SYNC, retirando-a do repositório remoto, se ainda não estiver na máquina local. as alterações mais recentes no repositório remoto e faz uma redefinição forçada para forçar o repositório SYNC local a corresponder ao repositório SYNC remoto. Você pode chamar isso de "puxão rígido". É seguro, no entanto, porque já fizemos backup de alterações não confirmadas. tinha localmente no PC2, então nada está perdido!my_branch_SYNC_BAK_20200220-0028hrs-15sec
Nesse <- observe que AAAAMMDD-HHMMhrs - SSsec) e confirma todas as alterações não confirmadas nessa ramificação com uma mensagem de confirmação como DO BACKUP OF ALL ALTERAÇÕES NÃO COMPROMETIDAS NO PC2 (TARGET PC / BUILD MACHINE)
- É isso aí! Agora você produziu uma cópia perfeita do PC1 para o PC2 sem precisar garantir diretórios de trabalho limpos, pois o script tratava de todas as confirmações e itens automáticos para você! É rápido e funciona muito bem em grandes repositórios. Agora você tem um mecanismo fácil de usar qualquer IDE de sua escolha em uma máquina durante a construção ou teste em outra máquina, facilmente, através de um ponto de acesso wifi do seu telefone celular, se necessário, mesmo que o repositório tenha dezenas de gigabytes e você esteja na hora e com recursos limitados.
Recursos:
- Todo o projeto: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Veja muito mais links e referências no próprio código-fonte dentro deste projeto.
- Como fazer um "puxão", como eu o chamo: Como forçar o "git pull" a substituir arquivos locais?
Palavras-chave:
- sincronização do repositório git entre computadores, quando se desloca?