Re: Outil checkout

"[email protected]" <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.