J'ai essayé de faire un petit exemple représentant mon "problème"
J'ai tenté de le faire, à l'identique, en git et hg. J'ai commencé par git car c'est ce que j'utilise en temps normal
git {Exp} mkdir -p {hg,git}/dist
{Exp} cd git/dist
{dist} git init
{git:master dist} echo "file1" > file1
{git:master ~ dist} git add file1
{git:master + dist} git ci -m "add file1 from master"
{git:master dist} cd ..
{git} git clone dist local && cd local
{git:master local} git co -b test
{git:test local} echo "from test branch" >> file1
{git:test # local} git ci -a -m "add content from test branch"
{git:test local} git co master
{git:master local} echo "file1, from master" > file1
{git:master # local} git ci -a -m "update file1 from master"
{git:master local} git merge test
{git:master # merge local} [fix conflict]
{git:master # merge local} git add file1
{git:master + merge local} git ci -m "merge test branch"
{git:master local} git branch -d test
{git:master local} git push
{git:master local} cd ../dist
{git:master dist} git branch -a
* master
{git:master dist} git lg
* fd45db0 - (master) merge test branch
|\
| * cc495d5 - add content from test branch
* | 1de1ae5 - update file1 from master
|/
* 4640d4e - add file1 from master
hg {Exp} cd hg/dist
{dist} hg init
{hg:default dist} echo "file1" > file1
{hg:default ~ dist} hg add file1
{hg:default + dist} hg ci -m "add file1 from default"
{hg:default dist} cd ..
{hg} hg clone dist local && cd local
{hg:default local} hg branch test
{hg:test local} echo "from test branch" >> file1
{hg:test # local} hg ci -m "add content from test branch"
{hg:test local} hg up default
{hg:default local} echo "file1, from default" > file1
{hg:default # local} hg ci -m "update file1 from default"
{hg:default local} hg merge test
{hg:default # local} [fix conflict]
{hg:default # local} hg resolve -m file1
{hg:default # local} hg ci -m "merge test branch"
{hg:default local} hg up test && hg ci --close-branch -m "close branch" && hg up default
{hg:default local} hg push -b default
abort: push creates new remote branches: test!
(use 'hg push -f' to force)
{hg:default local} hg push -b default -f
{hg:default local} cd ../dist
{hg:default dist} hg branches
default 3:d8720e9dd3fa
test 1:b70988680c82 (inactive)
{hg:default dist} hg log [ok c'est pas la vrai commande, mais hg view
en texte donnerait : ]
* 3 - (tip) merge test branch
|\
| * 2 - (test) add content from test branch
* | 1 - update file1 from default
|/
* 0 - add file1 from default
Résultat
Pour git, aucune mention de la branche 'test'
On a bien l'information que ça vient d'une branche, ou pas en fait, et on s'en cogne. Toute l'information nécessaire est là, et c'est le principal, sans être pollué par autre chose.
Si mon dépot est public, personne ne voit test, ni sait qu'elle existe, ni comment, etc, et c'est le but, se concentrer sur le résultat.
Pour hg, on a bien notion de 'test', la branche doit être créée, etc. C'est plus génant, peut-être pas pour un projet avec 1 branche locale, mais pour un projet avec ne serait-ce qu'une dizaine, c'est dommage.
Après, c'est sur que c'est une question de philo, dans hg on dit qu'il faut travailler dans la branche 'default', dans git jamais je ne travail dans 'master', toujours dans une ou plusieurs branche locale que je merge ensuite.
[^] # Re: Comparaison avec Eclipse
Posté par CrEv (site web personnel) . En réponse à la dépêche Sortie de KDevelop 4.0. Évalué à 2.
J'ai tenté de le faire, à l'identique, en git et hg. J'ai commencé par git car c'est ce que j'utilise en temps normal
git
{Exp} mkdir -p {hg,git}/dist{Exp} cd git/dist
{dist} git init
{git:master dist} echo "file1" > file1
{git:master ~ dist} git add file1
{git:master + dist} git ci -m "add file1 from master"
{git:master dist} cd ..
{git} git clone dist local && cd local
{git:master local} git co -b test
{git:test local} echo "from test branch" >> file1
{git:test # local} git ci -a -m "add content from test branch"
{git:test local} git co master
{git:master local} echo "file1, from master" > file1
{git:master # local} git ci -a -m "update file1 from master"
{git:master local} git merge test
{git:master # merge local} [fix conflict]
{git:master # merge local} git add file1
{git:master + merge local} git ci -m "merge test branch"
{git:master local} git branch -d test
{git:master local} git push
{git:master local} cd ../dist
{git:master dist} git branch -a
* master
{git:master dist} git lg
* fd45db0 - (master) merge test branch
|\
| * cc495d5 - add content from test branch
* | 1de1ae5 - update file1 from master
|/
* 4640d4e - add file1 from master
hg
{Exp} cd hg/dist
{dist} hg init
{hg:default dist} echo "file1" > file1
{hg:default ~ dist} hg add file1
{hg:default + dist} hg ci -m "add file1 from default"
{hg:default dist} cd ..
{hg} hg clone dist local && cd local
{hg:default local} hg branch test
{hg:test local} echo "from test branch" >> file1
{hg:test # local} hg ci -m "add content from test branch"
{hg:test local} hg up default
{hg:default local} echo "file1, from default" > file1
{hg:default # local} hg ci -m "update file1 from default"
{hg:default local} hg merge test
{hg:default # local} [fix conflict]
{hg:default # local} hg resolve -m file1
{hg:default # local} hg ci -m "merge test branch"
{hg:default local} hg up test && hg ci --close-branch -m "close branch" && hg up default
{hg:default local} hg push -b default
abort: push creates new remote branches: test!
(use 'hg push -f' to force)
{hg:default local} hg push -b default -f
{hg:default local} cd ../dist
{hg:default dist} hg branches
default 3:d8720e9dd3fa
test 1:b70988680c82 (inactive)
{hg:default dist} hg log [ok c'est pas la vrai commande, mais hg view
en texte donnerait : ]
* 3 - (tip) merge test branch
|\
| * 2 - (test) add content from test branch
* | 1 - update file1 from default
|/
* 0 - add file1 from default
Résultat
Pour git, aucune mention de la branche 'test'
On a bien l'information que ça vient d'une branche, ou pas en fait, et on s'en cogne. Toute l'information nécessaire est là, et c'est le principal, sans être pollué par autre chose.
Si mon dépot est public, personne ne voit test, ni sait qu'elle existe, ni comment, etc, et c'est le but, se concentrer sur le résultat.
Pour hg, on a bien notion de 'test', la branche doit être créée, etc. C'est plus génant, peut-être pas pour un projet avec 1 branche locale, mais pour un projet avec ne serait-ce qu'une dizaine, c'est dommage.
Après, c'est sur que c'est une question de philo, dans hg on dit qu'il faut travailler dans la branche 'default', dans git jamais je ne travail dans 'master', toujours dans une ou plusieurs branche locale que je merge ensuite.