Digamos que eu tenha um PC desktop e um laptop, e às vezes trabalho no desktop e às vezes trabalho no laptop.
Qual é a maneira mais fácil de mover um repositório git para frente e para trás?
Quero que os repositórios git sejam idênticos, para que eu possa continuar de onde parei no outro computador.
Gostaria de ter certeza de que tenho os mesmos branches e tags em ambos os computadores.
Obrigado johan
Nota: Eu sei como fazer isso com o SubVersion, mas estou curioso para saber como isso funcionaria com o git. Se for mais fácil, posso usar um terceiro pc como servidor clássico com o qual os dois pc: s podem sincronizar.
Nota: Ambos os computadores estão executando Linux.
Atualização :
Então, vamos tentar a ideia do XANI: s com um repositório git vazio em um servidor e a sintaxe de comando push do KingCrunch. Neste exemplo, há dois clientes e um servidor.
Portanto, vamos criar primeiro a parte do servidor.
ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init
Então, de um dos outros computadores, tento obter uma cópia do repo com clone:
git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.
Em seguida, vá para esse repo e adicione um arquivo:
cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master
Agora o servidor está atualizado com testfile1.txt.
De qualquer forma, vamos ver se conseguimos esse arquivo do outro computador.
mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull
E agora podemos ver o arquivo de teste.
Neste ponto, podemos editá-lo com mais algum conteúdo e atualizar o servidor novamente.
echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master
Em seguida, voltamos ao primeiro cliente e fazemos um git pull para ver o arquivo atualizado. E agora posso ir e voltar entre os dois computadores e adicionar um terceiro, se quiser.
fonte
Respostas:
Acho que existem várias abordagens. Vou apenas descrever como lido com isso
Eu tenho um netbook como um servidor 24/7, que mantém vários repositórios git. De / para lá, empurro e puxo as alterações via SSH. Para acesso externo, uso dyndns.org. Funciona bem, principalmente porque tenho mais de dois sistemas, que precisam de acesso a alguns dos repositórios.
Atualização: um pequeno exemplo. Vamos dizer que meu netbook se chama "netbook". Eu crio um repositório lá
Na minha área de trabalho, vou criar um clone dele. Talvez eu adicione alguns arquivos também
Nos meus portáteis farei (primeiro) o mesmo, mas para acesso remoto (de fora da minha LAN), também adicionarei o endereço externo.
É apenas a maneira como o git (/ git workflows) funciona. Você pode adicionar quantos repositórios remotos desejar. Não importa se dois ou mais se referem aos mesmos repositórios "físicos". Você não precisa de um "servidor" local próprio, pode usar qualquer servidor público, ao qual tenha acesso ssh. E é claro que você não precisa de nenhum servidor público, se não precisar de acesso externo. O repositório vazio também pode estar no sistema de desktop e você pode então criar um repositório de cópia de trabalho dentro do sistema de arquivos local.
Esta é a maneira, como eu lido com isso, e para mim funciona muito bem (se não for perfeito;))
Algo para ler: http://progit.org/ Livro realmente bom.-
fonte
Eu clonaria o repo de uma caixa para a outra e, em seguida, configuraria os dois repos para poder usar apenas
git fetch
a outra caixa.Renomear o remoto de
origin
com o nome da outra caixa torna as ramificações remotas mais fáceis de ler.Observe que apenas usando
git fetch
(e nãogit push
), isso funciona bem com repositórios não básicos:fonte
Maneira mais fácil: repositório central criado com
--bare
(sem arquivos em check-out, apenas coisas .git) ou github"Distribuído" terá a seguinte aparência:
Configuração:
git remote add desktop ssh://user@desktop/home/user/repo/path
git remote add laptop ssh://user@laptop/home/user/repo/path
Sincronizando:
git pull laptop/desktop
(push não funcionará muito bem em repositórios não básicos porque git não modificará os arquivos retirados ao enviar para repositório remoto)Ou faça repo no pendrive;)
fonte
user
? Para o github, só preciso adicionar as chaves rsa-pub. Tentei adicionar rsa-pub para o computador do solicitante do clone em known_hosts, mas não funcionou ...Que tal simplesmente usar
rsync
?fonte
Você não poderia simplesmente criar um repositório remoto no GitHub, BitBucket ou GitLab? (As duas últimas empresas oferecem repositórios privados gratuitos e ilimitados). Ao terminar o dia de trabalho, basta usar
git push
para enviar suas alterações para o repositório remoto. Quando você chegar em casa, bastagit pull
colocar as alterações do trabalho em sua máquina doméstica. Da mesma forma, quando terminar em casa, façagit push
e, quando voltar ao trabalho, façagit pull
.fonte
-f
opção perigosa comgit push
para sobrescrever commits de "transferência" de lixo.Cenário 1: Eu trabalho (edito código e arquivos) exclusivamente no PC1 mas quero ter uma cópia duplicada dos arquivos (ex: para construir toda a base de código) também no PC2.
Sincronize de PC1 para PC2 em <1 minuto em um ponto de acesso wi-fi usando <25 MB de dados:
Eu trabalho em um computador fraco com o qual viajo (um laptop), mas construo um computador mais poderoso localizado em outro lugar. Eu uso o git o tempo todo para sincronizar do meu laptop com o outro computador usando um script. Eu apenas digito este comando para executá-lo:
É isso aí! Geralmente, leva cerca de 25 MB de dados e cerca de 30 segundos a 1 minuto, mesmo ao usar um hotspot wi-fi de telefone celular e trabalhar em um repo com dezenas de gigabytes de tamanho. Estou conectado ao PC2, então o faço
git log -1
no PC2 para verificar se a sincronização funcionou e, a seguir, executo o comando build. Funciona perfeitamente. Dê uma chance. Veja os links abaixo para detalhes.Observação: o repositório clonado no PC2 estará em um branch git chamado
somename_SYNC
. Modifique o script apropriadamente se desejar que tenha o mesmo nome de branch em vez de sempre usar um "branch SYNC". É possível modificar o script para obter um efeito mais parecido com o Cenário 2 abaixo, se desejado. No entanto, fazer o Cenário 2 manualmente não é difícil, então você pode querer continuar fazendo o Cenário 2 manualmente. É o Cenário 1 onde o script automatizado é o mais benéfico e economiza tempo, pois permite um fluxo de trabalho fácil e rápido de "modificar, sincronizar, construir" onde a "modificação" ocorre no PC1, a "sincronização" é executada no PC1, mas também afeta PC2 e a "construção" ocorre no PC2.Links:
Trabalhe em um projeto remoto com Eclipse via SSH
https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh
Cenário 2: Eu trabalho (edito código e arquivos) em vários computadores e quero ser capaz de editar o mesmo repositório de código em qualquer computador do mundo:
Vá para https://github.com e crie uma conta e, opcionalmente (recomendado), configure as chaves SSH .
Agora use sua interface da web para criar um novo repositório.
Encontre o novo ssh do repositório ou URL clone https. Ex: [email protected]: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git ou https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .
Clone o projeto no PC1. Ex:
[email protected]:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git cd eRCaGuy_dotfiles
E repita exatamente o mesmo comando de clone no PC2.
Agora no PC1, faça algumas alterações, confirme-as e envie-as para seu repositório "remoto" no github:
# edit some files, then do the following git add -A # stage ("add") all changed files to be committed git commit # commit them git push # push them to your remote github repo
Agora no PC2, coloque suas alterações:
# pull all changes from github (which includes the changes # you just pushed from PC1) to PC2 git pull
Agora você pode editar arquivos no PC2, confirmá-los e enviá-los ao github usando os comandos mostrados apenas 2 etapas acima e, a partir do PC1, você pode executar
git pull
para obter essas alterações do PC2.Continue fazendo este processo, conforme necessário, trabalhando no PC1 OU PC2 e facilmente compartilhando os arquivos e dividindo seu trabalho entre os dois computadores. Lembre-se de que todas as suas alterações devem ser confirmadas e enviadas por push para o github em um PC antes que você possa verificá-las (retirá-las) e continuar trabalhando no outro PC.
Se você entrar em uma situação em que os arquivos estão um pouco fora de sincronia entre os dois PCs, talvez você precise usar alguns branches extras, fazer algumas mesclagens, resolver conflitos, etc. Então, torna-se mais semelhante ao trabalho com uma pequena equipe em que todos trabalham no mesmo repo. Google é seu amigo. Git é muito, muito poderoso e tem um comando, conjunto de comandos ou fluxo de trabalho para quase tudo.
fonte
Bem, você pode enviar e receber (via Git) para o servidor que você poderia configurar. Ou você pode armazenar seus repositórios no GitHub e usá-los como uma ponte de sincronização.
fonte
Você pode fazer o repositório em qualquer um dos seus computadores, provavelmente o desktop e empurrar / puxar para ele do laptop e de si mesmo.
fonte