[OFF-Topic] Conflitos ao fazer merge

214 views
Skip to first unread message

Cairo Noleto

unread,
Jul 29, 2008, 2:28:54 PM7/29/08
to rail...@googlegroups.com
Sei que muita gente aqui usa o git e pode me ajudar, essa mensagem eu mandei para comunidade git-br.

---------- Forwarded message ----------
From: Cairo Noleto <cairo...@gmail.com>
Date: 2008/7/29
Subject: Conflitos ao fazer merge
To: git...@googlegroups.com


Olá, tem uma coisa que está me tirando do sério, e que é aonde o GIT diz que tem toda a diferença do restante dos versionadores que eu conheço (Svn, CVS).

Meu ambiente:
Possuo um servidor remoto SVN, onde uso o git-svn para trazer localmente. Localmente possuo dois branchs, um master, onde recebo as atualizações e um branch chamado local, esse é meu ambiente de trabalho. Pois bem, sempre que faço um merge entre o master e o local, sempre tenho que resolver conflitos entre os arquivos. Não sei o que está acontecendo, mas SEMPRE, tenho que resolver conflitos que era pro GIT resolver.

Meu workflow de trabalho é o seguinte:

git checkout local
git commit/add/rm ...
git checkout master
git svn rebase master --merge
git merge local
[... resolvendo conflitos entre os brachs master e local]
git svn dcommit
git checkout local


Outra coisa, eu uso aqui o gitk para vizualisar meu branchs, e como está em relação aos outros. Quando estou no branch master ele me mostra na árvore o branch remote/svn mas não me mostra o branch local, e quando estou no branch local, apenas vejo esse branch, não vendo mais nenhum no gitk.

Se alguém poder me dar uma luz e fazer recomendar o git para todo mundo, me ajudem ae!





--
Cairo Noleto => http://www.caironoleto.com
Add4 Comunicação => http://www.add4.com.br
MSN Messenger => cairo...@hotmail.com
Google talk => cairo...@gmail.com
Skype => cnoleto

Jony dos Santos Kostetzer

unread,
Jul 29, 2008, 3:10:17 PM7/29/08
to rail...@googlegroups.com
Oi Cairo,

Um palpite: não faça merges entre suas branches locais nesse caso, e sim rebase. Dessa forma, você vai atualizando e mantendo a referência entre elas. Veja o meu workflow (baseado no seu, bem parecido por sinal ;-])


git checkout local
git commit/add/rm ...
git checkout master
git svn rebase master
# Houve mudanças no SVN? se sim, volte para sua branch local e faça rebase do master:
git checkout local
git rebase master # isso atualiza sua branch local em relação à master e faz com que seus commits sejam aplicados *sobre*  a ultima revisão, evitando uma série de conflitos.
git checkout master # voltando...
git rebase local  # aqui você faz um rebase da suas mudanças na branch local mas com a *garantia uma branch atualizada*. Se você optar por merge, sua mensagem de dcommit vai ser "Merging 'branch/local', e seus commits sao reunidos num só. Eu nao acho legal, perde todo o histórico de commits... Mas note, se você fizer merge, sua branch estará atualizada também ;-)

git svn dcommit
git checkout local
git rebase master #novamente, atualizando sua branch de trabalho

Venho mantendo rigorosamente esse workflow acima, onde os dcommits são feitos só a partir da branch master. Isso porque já tive umas catástrofes antes, tendo que voltar a fazer um git svn clone "do zero" (num projeto com mais de 1200 commits, é um saco! sem contar a migração da stash stack, das outras branchs locais...)

Enfim, veja se isso resolve seus problemas e retorne ;-)

Abraço!

Cairo Noleto

unread,
Jul 30, 2008, 10:10:19 AM7/30/08
to rail...@googlegroups.com
Jony, comecei a usar seu worflow, até agora teve um conflito, mas parece que é realmente mais interessante usar rebase ao invés de merge. Eu tentei entender a sutíl diferença entre eles mas não encontrei. Estou olhando a documentação para obter a real diferença entre eles.

Obrigado ;)

nofxx x

unread,
Jul 30, 2008, 12:07:29 PM7/30/08
to rail...@googlegroups.com
A diferença é q com rebase vai tudo ficar na mesma "linha" no mesmo galho.

Faz um de cada jeito e ve o gitk q vc entende.

Fabio Akita

unread,
Jul 31, 2008, 8:24:09 AM7/31/08
to rail...@googlegroups.com
Dê uma olhada aqui: http://www.akitaonrails.com/2008/4/3/micro-tutorial-de-git

On Jul 30, 2008, at 11:10 AM, Cairo Noleto wrote:

>> *git rebase master* # isso atualiza sua branch local em relação à
>> master e
>> faz com que seus commits sejam aplicados *sobre* a ultima revisão,
>> evitando
>> uma série de conflitos.
>> git checkout master # voltando...
>> *git rebase local* # aqui você faz um rebase da suas mudanças na
>> branch
>> local mas com a *garantia uma branch atualizada*. Se você optar por
>> merge,
>> sua mensagem de dcommit vai ser "Merging 'branch/local', e seus
>> commits sao
>> reunidos num só. Eu nao acho legal, perde todo o histórico de
>> commits... Mas
>> note, se você fizer merge, sua branch estará atualizada também ;-)
>> git svn dcommit
>> git checkout local
>> *git rebase master* #novamente, atualizando sua branch de trabalho
>>
>> Venho mantendo rigorosamente esse workflow acima, onde os dcommits
>> são
>> feitos só a partir da branch master. Isso porque já tive umas
>> catástrofes
>> antes, tendo que voltar a fazer um git svn clone "do zero" (num
>> projeto com
>> mais de 1200 commits, é um saco! sem contar a migração da stash
>> stack, das
>> outras branchs locais...)
>>
>> Enfim, veja se isso resolve seus problemas e retorne ;-)
>>
>> Abraço!
>>
>>
>>
>>
>> Cairo Noleto wrote:
>>
>> Sei que muita gente aqui usa o *git* e pode me ajudar, essa
>> *git checkout local
>> git commit/add/rm ...
>> git checkout master
>> git svn rebase master --merge
>> git merge local
>> [... resolvendo conflitos entre os brachs master e local]
>> git svn dcommit
>> git checkout local*
>>
>> Outra coisa, eu uso aqui o gitk para vizualisar meu branchs, e como
>> está em
>> relação aos outros. Quando estou no branch *master* ele me mostra na

Cairo Noleto

unread,
Jul 31, 2008, 8:38:26 AM7/31/08
to rail...@googlegroups.com
Justamente seguindo teu micro tutorial é que fiz meu workflow, agora que estou seguindo o workflow do Jony diminui bastante o numero de conflitos ;)

2008/7/31 Fabio Akita <fabio...@gmail.com>
Reply all
Reply to author
Forward
0 new messages