Como faço para mover coisas do meu repositório gib Overleaf para meu repositório Gitlab git?

1

Eu tenho usado o mobaXterm em um computador Windows 10 (baseado no Cygwin) como um terminal para acessar scripts / macros ROOT e Python. Além disso, meus colegas e eu usamos o Gitlab para compartilhar esses scripts / macros. Recentemente, começamos a trabalhar em um documento LaTeX que foi compartilhado também usando o Gitlab. O problema que enfrento é tentar integrar usando o Gitlab comigo usando o Overleaf como meu editor LaTeX.

Eu segui o guia fornecido Aqui em como vincular o repositório git do Overleaf ao Github , apenas para encontrar alguns problemas irritantes.

Primeiramente, parece que eu pude clonar o repositório do Overleaf no meu computador, através desta linha: git clone https://git.overleaf.com/%%%%%%%%%%%%%% note_name

Seguido por git remote rename origin overleaf

Então eu puxei pela linha git pull overleaf master

Nada disso pareceu causar problemas. Eu adicionei meu repositório Gitlab através da linha git remote add gitlab https://gitlab.thing.ty/folder/note_name.git

Então eu fiz um empurrão preliminar para o Gitlab via git config --global push.default matching e git push gitlab

Username for 'https://gitlab.thing.ty':
Password for 'https://[email protected]':
Counting objects: 21, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (21/21), 50.81 KiB | 0 bytes/s, done.
Total 21 (delta 7), reused 0 (delta 0)
To https://gitlab.thing.ty/folder/note_name.git
   ccf7614..596ba69  master -> master'

Seguido por um pull de Overleaf git pull overleaf master

remote: Counting objects: 5, done
remote: Finding sources: 100% (3/3)
remote: Getting sizes: 100% (4/4)
remote: Compressing objects: 100% (7764/7764)
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://git.overleaf.com/%%%%%%%%%%%%
 * branch            master     -> FETCH_HEAD
   f0173f3..d3bb61b  master     -> overleaf/master
Merge made by the 'recursive' strategy.
 Section2.tex | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)'

Eu me deparei com problemas agora quando preciso confirmar alterações e enviar alterações para o Gitlab. Eu recebo linhas como:

git commit -m "configuring git access, no major edits have been made"
On branch master
Your branch is ahead of 'overleaf/master' by 16 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

e

git push gitlab
Username for 'https://gitlab.thing.ty':
Password for 'https://[email protected]':
To https://gitlab.thing.ty/folder/note_name.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 

'https://gitlab.thing.ty/folder/note_name.git'

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Não consigo descobrir como gerenciar dois repositórios diferentes de uma só vez.

    
por David 06.09.2017 / 04:20

2 respostas

1

o repositório com a maior quantidade de commits deve ser aquele que você extrai antes de tentar qualquer alteração.

git pull upstream master

Depois disso, certifique-se de que seu repositório do gitlab esteja sincronizado com o desenvolvedor.

git push origin master

Desta forma, ambos os repositórios são sincronizados enquanto você faz o seu trabalho, se você usar

git log você deve ver algo como

commit 798a0433ad807b6127066cac3f6e33d6551ef0d4 (HEAD -> master, upstream/master, origin/master)

Isso significa que ambos os repositórios estão no mesmo commit.

depois de fazer o seu trabalho (melhor se você fizer isso em um ramo separado) você precisa confirmar essas mudanças. git commit --all -m "some text"

depois de fazer isso, você deve ver com git log que sua nova ramificação está à frente de upstream e origin , se você quiser integrar as alterações em qualquer uma delas você deve usar git rebase , isso fará fast-forward no repo. Nós não usamos pull porque ele derreteria todos os commits ao mesclá-los. Depois disso, presumo que você não tenha permissões de gravação em ambos os repos.

Use git fetch para baixar as alterações de um dos repos, por exemplo, git fetch upstream master e depois disso, veja as confirmações com git log , em seguida, use git rebase para mesclar as alterações de maneira segura.

Consulte o livro oficial do Git para mais informações, mas você deve estar bem depois de ler os 3 capítulos iniciais.

Espero que ajude

    
por 06.09.2017 / 16:44
0

Existem três casos gerais para ter vários controles remotos do git e como você lida com as coisas depende de qual caso você precisa:

  1. Você tem um fork de algum software com seus próprios patches personalizados na parte superior. Este é o caso mais comum que eu conheço, e o único com quem tive experiência pessoal, e é na verdade uma situação bastante típica para desenvolvimento. Um bom exemplo disso seria link , onde eu mantenho um pequeno punhado de patches locais em cima de link
  2. Você tem vários repositórios upstream em que publica trabalhos e deseja que eles permaneçam em sincronia entre si. Não conheço nenhum projeto que faça isso regularmente, embora às vezes isso seja feito quando um projeto está em transição entre diferentes provedores de hospedagem para seus repositórios.
  3. Você tem um repositório de desenvolvimento e release separado. Isso é bem parecido com o caso 1, ao contrário.

Como mencionado, lidar com as coisas depende do caso em que você está. A situação mais simples (e a que eu acredito que você está na descrição da sua pergunta) é o caso 2, onde a gerência consiste apenas em garantir que você empurre para ambos os repositórios ao enviar atualizações (o git exige que você pressione explicitamente para cada controle remoto). O caso 3 também é muito fácil, quando você faz um lançamento, basta marcar e enviar para ambos os repositórios, mas apenas enviar para o seu repositório de desenvolvimento quando não estiver liberando algo.

O caso 1, enquanto o mais comum, é o mais complicado, pois envolve mais do que apenas comandos push e pull. A única situação em que um controle remoto secundário é importante é quando há um upstream de atualização. Nesse ponto, você precisa extrair isso e fazer um rebase (ou mesclar, dependendo do fluxo de trabalho local) sua ramificação local além disso.

Além disso, você pode estar interessado em ler o Git Book oficial, ele faz um ótimo trabalho de explicar as coisas . O capítulo sobre 'Distributed Git' é provavelmente a seção mais relevante para esta questão, mas eu absolutamente sugiro ler a coisa toda, já que entender os fluxos de trabalho requer um bom entendimento de como o Git faz o controle da fonte.

    
por 06.09.2017 / 16:49