Étant donné que Git ne reconnaît pas les liens symboliques qui pointent en dehors du référentiel, y a-t-il un problème avec les liens physiques?
Git pourrait-il les casser? Pouvez-vous s'il vous plaît me diriger vers des informations détaillées?
Étant donné que Git ne reconnaît pas les liens symboliques qui pointent en dehors du référentiel, y a-t-il un problème avec les liens physiques?
Git pourrait-il les casser? Pouvez-vous s'il vous plaît me diriger vers des informations détaillées?
Réponses:
L'objet 'tree', représentant les répertoires dans Git, stocke le nom de fichier et le (sous-ensemble de) permissions. Il ne stocke pas le numéro d'inode (ou tout autre type d'identifiant de fichier). Par conséquent, les liens durs ne peuvent pas être représentés dans git , du moins pas sans outils tiers tels que metastore ou git-cache-meta (et je ne suis pas sûr que cela soit possible même avec ces outils).
Git essaie de ne pas toucher les fichiers qu'il n'a pas besoin de mettre à jour, mais vous devez tenir compte du fait que git n'essaye pas de préserver les liens physiques, afin qu'ils puissent être interrompus par git.
À propos des liens symboliques pointant en dehors du référentiel : git n'a aucun problème avec eux et devrait préserver le contenu des liens symboliques ... mais l'utilité de ces liens est douteuse pour moi, car le fait que ces liens symboliques soient rompus ou non dépend de la disposition du système de fichiers en dehors du référentiel git , et non sous le contrôle de git.
la source
J'ai découvert qu'en utilisant des hooks, vous pouvez capturer l'
git pull
événement (quand il y a quelque chose à extraire ...) en écrivant le gestionnaire d'événements de script dans un.git/hooks/post-merge
fichier.Tout d'abord, vous devez le faire
chmod +x
.Ensuite, mettez les
ln
commandes à l'intérieur pour recréer des liens physiques à chaque pull. Neat hein!Cela fonctionne, j'en avais juste besoin pour mon projet et
ls -i
montre que les fichiers étaient automatiquement liés aprèspull
.Mon exemple de
.git/hooks/post-merge
:IMPORTANT: comme vous pouvez le voir, le chemin d'accès à n'importe quel fichier de votre référentiel doit commencer par
$GIT_DIR
, puis ajouter le chemin relatif partiel au fichier.Également important:
-f
est nécessaire, car vous recréez le fichier de destination.la source
À partir de ce problème msysgit
Le problème était orienté Windows (puisqu'il s'agit de msysgit) et le débat sur le support potentiel de symlink.
Mais le commentaire sur le lien dur concerne Git en général.
la source
Google 'git préserve les liens durs' et cela montre que git ne sait pas comment préserver la structure des liens durs AFAIK, peut-être par conception.
Mes projets Web utilisent des liens physiques comme suit:
Si je voulais apporter des modifications à index.php, je le change en un seul endroit et les liens physiques (pages de détails du produit) pointent vers les changements - sauf que git ne conserve pas cette relation pendant le clonage et l'extraction sur d'autres ordinateurs.
sur une autre machine créera un nouveau index.php pour chaque lien physique.
la source
hardlink --ignore-time
sur/var/lib/jenkins
, pour récupérer l' espace disque. Au cours de la journée, certains fichiers sont à nouveau dissociés aprèsgit pull
ou,mvn compile
mais c'est correct, je m'attends à ce que cela se produise. Si git devait conserver les liens durs, ma stratégie de recyclage de l'espace disque ne fonctionnerait pas.