la plus grosse différence entre google code et github
c'est la philosophie du fork
dans github, non seulement parce qu'ils utilisent Git,
mais principalement dans leur interface, ils créent le coté
"social coding" en poussant les devs a faire du fork dans tous les
sens
par ex, tu crées une issue "je pense qu'il manque ca dans ton code",
tu fais un fork du project XYZ, dans ton coins tu patch/ajoutes ce que
toi tu penses manque, et pis apres tu finis par un "pull request"
où en gros tu dis au developeur original du code
"j'ai fais ces modifs, s'il te plait reintegre ca dans le code"
Github l'explique ici
http://help.github.com/send-pull-requests/
et pour moi c'est exactement le probleme de github (et par extension
git)
si je bosse en equipe sur un projet open source, c'est pas de cette
manière
que je veux bosser, je veux pouvoir discuter avec les autres devs
avant que
des modifs soient faites
bref, je vois le fork tres différemment
pour moi un fork c'est quelqu'un qui me dit "je suis pas d'accord avec
la direction que prends le projet",
ok c'est bien, chacun est libre de faire un fork, mais apres avec "ta
vision différente" tu reviens pas me dire d'intégrer ca dans ce que je
fais, parce que si t'as pas pris le temps de discuter du soit disant
"probleme", bref si il n'y a pas de communication au niveau du
development et bah moi ton "pull request" et bah je vais completement
l'ignorer.
Une des choses les plus dure dans un projet open source c'est de
justement garder la ligne directrice
et de ne pas partir dans tous les sens, et perso le seul moyen que je
me vois de faire ca c'est de justement discuter avec les autres devs
du projet, "pourquoi on fait ca", "pourquoi on ajoute ca", "pourquoi
on le fait de cette manière et pas de cette autre facon", etc.
Avec google code, les gens peuvent toujours forker si ils veullent,
mais si ils veullent que ce soit reintegrer dans le code ils vont
devoir
communiquer, obtenir les droits de commit, ou envoyer un diff et
expliquer le truc
pour le probleme "je pense qu'il manque ca dans ton code"
soit la personne est deja dans la team de dev, et donc on discute,
ca peut etre validé ou non
soit la personne est externe au projet et ca rajoute une issue,
qui elle aussi peut etre validé ou non
bref, au lieu de partir dans un fork direct, on discute avant
si ca vaut le coup ou pas, si ca va dans la direction du projet ou
pas, etc.
Et ca je pense que ca évite de perdre du temps et surtout de partir
dans n'importe quelle direction.
Maintenant sur les différences entre Git et SVN,
je pense aussi que Git et Github c'est l'effet de mode
"le truc où il faut se montrer si on est un codeur"
super...
sauf que tout comme je suis contre le fork et pour la communication
entre devs
je suis contre un SCM décentralisé et pour un SCM centralisé
En bossant sur maashaack et d'autres projets avec Eka on est passé par
plusieurs phases,
et en fait SVN c'est vraiment LE bon outil pour nous et il y a
énormément de choses
qu'on peut faire avec SVN qu'on ne pourrait pas faire avec Git ou
Mercurial.
Récemment on a modifier la structure d'organisation de maashaack,
on est passé d'une structure on va dire "monolithique" a une structure
hyper modulaire,
et bah heureusement qu'on est resté sous SVN, parce que sous Git on
aurait pas pu.
Avec Eka on a cette philosophie que le code est vivant et change tout
le temps,
sur un truc comme maashaack on gere vraiment énormément de code et ca
pourrait tres
vite tourner au bordel.
A coté de ces projets open source on aussi des choses qui se passent
au niveau de nos boulots
respectifs, bref on s'est retrouvé dans des situations où
- maashaack vX est deja utilisé dans un projet, on veut faire de gros
changement dans maashaack sans casser
le "vieux" projet qui l'utilise
- maashaack doit etre utilisé a coté d'autres projets comme un
"component"
- on voudrait utiliser maashaack pour tel projet mais il faut modifier
des choses dans maashaack
pour que ce soit possible
bref, en restant dans un seul repo avec tout le code groupé au meme
endroit, a force cela crée
des problemes de sync (meme avec des branches et des tags), et que en
soit le projet est trop gros
pour faire un fork a chaque fois qu'on l'utilise (ce serait trop le
bordel a gérer).
Et donc pour rendre ce code source modulaire, on a copié ce qu'il se
fait avec la gestion du code source
de chromium (google chrome).
En gardant SVN, on utilise au dessus de celui-ci un outil qui
s'appelle 'gclient',
cela permet de créer une 'solution' qui consiste en fait d'une serie
de repertoire auquel on associe
un path de repo SVN.
par ex:
solutionX
|_ toto
https://toto.googlecode.com/svn/trunk
|_ titi
https://titi.googlecode.com/svn/trunk
|_ tutu
https://tutu.googlecode.com/svn/trunk
faire de cette maniere, ca nous permet d'assembler differents projets
open sources pour nos besoins
cet outil 'gclient' permet aussi de faire des override en local,
par ex si je veux bosser depuis branches/test123 au lieu de trunk
j'ai just a modifier le fichier local ".gclient" pour obtenir ca
solutionX
|_ toto
https://toto.googlecode.com/svn/trunk
|_ titi
https://titi.googlecode.com/svn/branches/test123
|_ tutu
https://tutu.googlecode.com/svn/trunk
mais en poussant l'usage de l'outil ca permet d'aller encore plus loin
et de completement maitriser l'arborescence d'un projet
solutionX
|_ toto
https://toto.googlecode.com/svn/trunk
|_ test
https://toto.googlecode.com/svn/test/trunk
|_ titi
https://titi.googlecode.com/svn/trunk
|_ tutu
https://tutu.googlecode.com/svn/trunk
et ca, c'est justement ce que Git ne peut pas faire,
avec Git on ne pourrait pas imbriquer des repertoires venant de
different repos dans une arbo comme celle la
plus d'infos sur gclient
http://dev.chromium.org/developers/how-tos/depottools
http://dev.chromium.org/developers/how-tos/chromium-modularization
http://dev.chromium.org/developers/contributing-to-webkit
Pour simplifier je dirais que gclient ca permet de remplacer les
svn:externals
et de garder une liste claire de ce qui se passe avec des fichiers
DEPS.
Et pour maashaack ca permet de passer chaque "package" ou "library" ou
"tool" en module "independant"
que ensuite on re-assemble dans différentes projets.
LA vraie difference SVN et Git, c'est que avec SVN on peut gerer ca
dans un seul repo,
avec Git on devrait créer un repo par "module", bref non merci.
(note que meme si gclient dit qu'il gere les repos Git, j'ai testé et
bref gros bordel,
avec SVN au contraire pas de bordel du tout)
Pour finir je dirais que ce changement d'organisation pour maashaack
n'aurais jamais pu
exister en faisant un fork (ala Github), le seul moyen de le faire
correctement et progressivement
c'etait de discuter avec Eka, de peser le pour et le contre, de bien
verifier que ca reglait
vraiment tous nos problemes, que ca peut evoluer pour le futur etc.
bref discuter
zwetan