Usando o git para assumir o gerenciamento de diretórios de arquivos de texto meio sincronizados

0

Este é um problema difícil de descrever (e, é claro, difícil de procurar respostas), o mais próximo que encontrei é Mover duas árvores de diretório existentes já sincronizadas para git annex

Eu tenho duas cópias dos meus arquivos de texto do documento, um em uma máquina Linux de desktop, um em um laptop. Anteriormente, eu corria rsync periodicamente para manter esses arquivos sincronizados nos dois sentidos. Eu gostaria de mover o gerenciamento desse problema para git , mas queria saber qual seria a maneira mais clara de começar.

Coloquei arquivos na minha área de trabalho em um servidor git remoto, seguindo as instruções na Web. Tudo bem. Agora o problema para mim está do lado do laptop. Por exemplo, eu já tenho metade dos arquivos e pastas sincronizados no meu laptop, e não acho que o git clone comumente sugerido seria a resposta adequada para a minha situação, seria?

Digamos que os arquivos e pastas do meu laptop já estão fora de sincronia com os da minha área de trabalho, nos dois sentidos . Quais seriam as etapas adequadas para sincronizar os arquivos de texto do meu documento usando git com o meu co-setup remoto git repo?

    
por xpt 12.08.2013 / 04:47

3 respostas

1

Veja a resposta por que usar o git para sincronização não é uma boa ideia.

Aqui está um caso de teste que mostra como sincronizar o git com dois diretórios já preenchidos.

cd /tmp
mkdir foo
cd foo
git init
echo "hello" > README.md
git add .
git commit -m "initial commit"
git remote add origin [email protected]:<myUser>/test.git
git push -u origin master

Neste ponto, eu tenho um repositório git local que é sincronizado com o meu servidor git. Agora vou criar uma nova cópia do arquivo REDME.md como se tivesse sido rsyn-ed para outra máquina

cd /tmp
mkdir bar
cd bar
git init
echo "hello" > README.md
git add .
git commit -m "initial commit"
git remote add origin [email protected]:<myUser>/test.git
git push -u origin master

Como a barra está atrás do mestre, não consigo empurrar.

To [email protected]:<myUser>/test.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:<myUser>/test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Eu tentei fazer um git pull. O Git fundiu o repositório, mas não baixou o arquivo, porque ele já existe localmente.

git pull origin master From github.com:/test * branch
master -> FETCH_HEAD Merge made by the 'recursive' strategy.

Você também deve sempre lembrar de fazer um git pull antes de alterar qualquer arquivo em cada sistema; caso contrário, você receberá conflitos que precisam ser resolvidos.

    
por 12.08.2013 / 05:34
0

Você pode clonar em seu laptop e, em seguida, copiar os arquivos existentes em seu laptop sobre a cópia de trabalho. Você poderá então compor um arquivo mesclado verificando os diffs, possivelmente restaurando as linhas excluídas que deseja manter.

    
por 12.08.2013 / 05:11
0

Parece que usar o git como mediador de sincronização seria a solução perfeita. Eu recomendaria que você evitasse usar o git como uma ferramenta de sincronização pelos seguintes motivos.

Git nunca teve a intenção de trabalhar dessa maneira.

O Git executa lentamente com arquivos grandes ( 2 )

O Git não sincroniza pastas vazias

O Git não rastreia os metadados do sistema de arquivos

O Git não rastreia outros projetos git (qualquer pasta com uma pasta .git dentro dele )

Uma citação do site githubs

Though it sounds like Git would make an amazing backup tool, Git really doesn't work out well for backups over the long term

link

Se você já trabalhou com um repo que tem milhares de commits, o git fica muito lento. O Dropbox ou o rsync serão a melhor ferramenta para o trabalho.

    
por 12.08.2013 / 05:25