GNU/Linux >> Tutoriels Linux >  >> Linux

Git et liens physiques

J'ai découvert qu'en utilisant des crochets, vous pouvez capturer le git pull événement (quand il y a quelque chose à extraire ...) écrire le gestionnaire d'événements de script sur .git/hooks/post-merge fichier.

Vous devez d'abord chmod +x il.

Ensuite, mettez le ln commandes à l'intérieur pour recréer des liens physiques à chaque tirage. Super hein !

Cela fonctionne, j'en avais juste besoin pour mon projet et ls -i montre que les fichiers ont été automatiquement liés après pull .

Mon exemple de .git/hooks/post-merge :

#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf

IMPORTANT :Comme vous pouvez le constater, le chemin d'accès à tout fichier de votre référentiel doit commencer par $GIT_DIR , puis ajoutez le chemin relatif partiel au fichier.

Aussi important :-f est nécessaire, car vous recréez le fichier de destination.

MODIFIER

Le client git moderne semble prendre en charge naturellement les liens symboliques et les liens physiques à l'intérieur du référentiel, même lorsqu'il est poussé vers un emplacement distant, puis cloné à partir de celui-ci. Je n'ai plus jamais eu besoin de créer un lien en dehors d'un dépôt git...

$ mkdir tmp
$ cd tmp
$ git --version
git version 2.24.3 (Apple Git-128)
$ git init .
Initialized empty Git repository in /Users/teixeira/tmp/.git/
$ mkdir x
$ cd x
$ echo 123 > original
$ cat original
123
$ cd ..
$ ln -s x/original symlink
$ cat symlink
123
$ ln x/original hardlink
$ cat hardlink
123
$ git add .
$ git commit -m 'Symlink and hardlink commit'
[master (root-commit) 8df3134] Symlink and hardlink commit
 3 files changed, 3 insertions(+)
 create mode 100644 hardlink
 create mode 120000 symlink
 create mode 100644 x/original

Clonage à partir du dépôt git local

$ cd
$ git clone tmp/ teste_tmp
Cloning into 'teste_tmp'...
done.
$ cd teste_tmp/
$ ls
hardlink  symlink  x
$ cat symlink
123
$ cat hardlink
123

Clonage à partir d'un référentiel distant

$ cd ~/tmp
$ git remote add origin https://github.com/myUser/myRepo.git
$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 361 bytes | 361.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To https://github.com/myUser/myRepo.git
 + 964dfce...8df3134 master -> master
$ cd ../
$ git clone https://github.com/myUser/myRepo.git
Cloning into 'myRepo'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
$ cd myRepo/
$ cat symlink
123
$ cat hardlink
123

https://github.com/mokacoding/symlinks souligne également une chose importante :les liens symboliques doivent être définis de manière relative.


L'objet 'tree', représentant les répertoires dans Git, stocke le nom du fichier et (un sous-ensemble de) permissions. Il ne stocke pas le numéro d'inode (ou tout autre type d'identifiant de fichier). Par conséquent, des liens physiques ne peut pas être représenté dans git , du moins pas sans outils tiers tels que metastore ou git-cache-meta (et je ne suis pas sûr que ce soit possible même avec ces outils).

Git essaie de ne pas toucher aux fichiers qu'il n'a pas besoin de mettre à jour, mais vous devez tenir compte du fait que git n'essaie pas de conserver les liens physiques, afin qu'ils puissent être rompus par git.

À propos des liens symboliques pointant vers l'extérieur 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 tels liens est douteuse pour moi, car si ces liens symboliques seraient rompus ou non dépend de la disposition du système de fichiers à l'extérieur référentiel git, et non sous le contrôle de git.


À partir de ce problème msysgit

Les points de jonction ne sont pas des liens symboliques; par conséquent, les liens symboliques ne sont tout simplement pas pris en charge dans msysGit.

De plus, les liens durs n'ont jamais été suivis par Git .

Le problème était orienté Windows (puisqu'il s'agissait de msysgit) et débattait sur le support potentiel du lien symbolique.
Mais le commentaire sur le lien dur concerne Git en général.


Linux
  1. Comment créer des liens matériels et symboliques sous Linux

  2. Liens physiques et liens souples sous Linux expliqués

  3. La différence entre les liens symboliques et les liens matériels ?

  4. RHEL 7 – RHCSA Notes :Créez des liens matériels et logiciels.

  5. Qu'est-ce que les liens souples et les liens durs dans le système de fichiers Linux

Qu'est-ce que Git et comment installer Git sous Linux

Comment installer et utiliser Git dans le système Linux

La commande ln sous Linux :créer des liens logiciels et matériels

Installation et premiers pas avec Git

Liens matériels et liens logiciels sous Linux :tout ce que vous devez savoir

rsync et liens symboliques