web-dev-qa-db-fra.com

Lier un seul fichier à partir d'un autre référentiel git

Comment liez-vous un fichier unique d'un autre référentiel git à votre propre référentiel? Je ne veux pas le référentiel complet, juste un seul fichier. En utilisant git submodule semble être la bonne voie à suivre, mais il veut tout saisir.

50
Brendan Byrd

Étant donné que l'unité de travail de git est un référentiel (ou plus précisément un référentiel contenu ), je ne pense pas que vous puissiez facilement intégrer un seul fichier.

Si vous n'avez pas besoin de son historique, vous pouvez simplement le copier dans votre référentiel.
Mais si vous avez besoin de l'historique, alors git filter-branch (comme dans " git: Comment séparer la bibliothèque du projet? filter-branch, subtree? ") sont en ordre. Cela semble cependant beaucoup d'efforts pour un seul fichier.

En théorie, " git: lien symbolique/référence à un fichier dans un référentiel externe " suggère une solution combinant sous-module et lien symbolique.
(de Pavel Šimerda )

$ git submodule add /url/submodule/<reponame>
$ ln -s <reponame>/path/to/<linked_file>
$ git add .gitmodules <linked_file>
$ git commit -m "add a symbolic link to <linked_file> with the respective submodule"

Depuis 2011 (réponse originale ci-dessus), Gavriel rapporte dans les commentaires que:

  • Lorsque je récupère le référentiel principal, le fichier lié n'est pas un lien symbolique, mais le contenu du fichier est plutôt "<reponame>/path/to/<linked_file> ". En d'autres termes, git valide la cible du lien symbolique en tant que contenu de fichier
  • Mais l'idée de base fonctionne.
    J'utilise "submodule/path/to/file "au lieu de" file "et ça marche
30
VonC