Re: Outil checkout
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <CADneLzdrG-y=Q-Zvjfi0jn+wPh3heQDnW6uGh93Z210AabFE8w@mail.gmail.com> |
Bonjour Désolé, il n'y pas d'équivalent des svn:externals coté git. Cela est dû au fonctionnement même de git. (Note : les explications qui vont suivre auront de gros abus de langages, c'est juste pour fixer les idées). Git fonctionne uniquement par identifiant de commit (SHA1). Les informations de branches ou tags sont des marqueurs associés à des commits (donc des instantanés). Tandis que SVN travaille sur des répertoires. Par exemple avec svn:externals depuis le dépôt A on peut cibler la branche trunk du dépôt B distant. Dès qu'un commit sera fait sur B/trunk, une simple mise à jour (svn checkout) permettra d'obtenir les derniers commits depuis A. Ceci n'est pas possible avec git. On ne peut identifier qu'un commit spécifique. Le dépôt A ciblera le commit associé à la branche master du dépôt B. Si des mises à jour sont faites sur B, cela ne remontera pas dans A automatiquement. Il faudra faire un nouveau commit dans A indiquant la nouvelle référence du commit associé à la branche master. Pour se faire une idée on peut regarder le fichier .git/ORIG_HEAD qui permet à git de savoir à quel commit correspond la branche courante de travail. Dès qu'une mise à jour du dépôt est faite (git commit / fetch / pull / rebase ....) git va mettre à jour un tableau de correspondance pour identifier les pointeurs de branches aux bons commits. Le seul cas qui pourrait être considéré comme équivalent ce serait avec les tags. Par définition ils sont immuables, une fois défini il ne dois pas bouger dans le temps. Toutefois subtilité contrairement à git, dans svn un tag est une branche comme une autre. C'est uniquement la convention d'usage qui protège l'évolution dans le temps du tag. Dans git le tag est écrit dans les informations de commit En pratique coté git en natif on a : * submodule * subtree Ces solutions ont le même travers, travailler sur des commits uniquement. Donc il est impossible d'avoir le même comportement qu'un svn:externals sur des branches. Comme tu as pu le constater toutes les autres solutions sont des outils externes qui tentent de pallier ce comportement. Ils ne sont pas interchangeables et intrinsèquement ils garderont cette limitation liée aux pointeurs sur les commits. On trouvera aussi d'autres outils comme : * https://linuxfr.org/news/tsrc-un-gestionnaire-de-depots-git * https://subgit.com/gitx * .... Pour conclure je dirais svn:externals répond à une problématique de packaging, c'est à dire comment faire dépendre/interagir plusieurs projets entre eux. Git ne cherche pas à résoudre ce genre de problématiques. C'est pourquoi il vaut mieux se tourner vers des solutions comme composer. Ils sont réfléchis pour traiter ces questions. Km