Zjistil jsem, že pomocí háčků můžete zachytit git pull
event (když je co stáhnout...) zápis obsluhy události skriptu na .git/hooks/post-merge
soubor.
Nejprve musíte chmod +x
to.
Poté vložte ln
příkazy uvnitř ní pro opětovné vytvoření pevných odkazů při každém vytažení. Skvělé, co!
Funguje to, jen jsem to potřeboval pro svůj projekt a ls -i
ukazuje, že soubory byly automaticky propojeny po pull
.
Můj příklad .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
DŮLEŽITÉ:Jak vidíte, cesta k jakémukoli souboru ve vašem úložišti by měla začínat $GIT_DIR
a poté přidejte částečnou relativní cestu k souboru.
Také důležité:-f
je nezbytné, protože znovu vytváříte cílový soubor.
UPRAVIT
Zdá se, že moderní git klient přirozeně podporuje symbolické odkazy a pevné odkazy uvnitř úložiště, i když je přesunete do vzdáleného umístění a poté z něj klonujete. Už nikdy jsem neměl potřebu odkazovat mimo git repo i když...
$ 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
Klonování z místního úložiště git
$ cd
$ git clone tmp/ teste_tmp
Cloning into 'teste_tmp'...
done.
$ cd teste_tmp/
$ ls
hardlink symlink x
$ cat symlink
123
$ cat hardlink
123
Klonování ze vzdáleného úložiště
$ 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 také poukazuje na důležitou věc:symbolické odkazy musí být definovány relativně.
Objekt 'strom' představující adresáře v Gitu ukládá název souboru a (podmnožinu) oprávnění. Neukládá číslo inodu (nebo jiný druh ID souboru). Proto pevné odkazy nelze reprezentovat v git , alespoň ne bez nástrojů třetích stran, jako je metastore nebo git-cache-meta (a nejsem si jistý, zda je to možné i s těmito nástroji).
Git se snaží nedotýkat se souborů, které nepotřebuje aktualizovat, ale musíte vzít v úvahu, že git se nesnaží zachovat pevné odkazy, takže je může git prolomit.
O symbolických odkazech směřujících mimo úložiště :git s nimi nemá problémy a měl by zachovat obsah symbolických odkazů... ale použitelnost takových odkazů je pro mě pochybná, protože to, zda by tyto symbolické odkazy byly rozbité nebo ne, závisí na rozložení souborového systému venku git repozitář a není pod kontrolou git.
Z tohoto problému msysgit
Spojovací body nejsou symbolické spojnice; proto symbolické odkazy v msysGit prostě nejsou podporovány.
Pevné odkazy Git také nikdy nesledoval .
Problém byl orientovaný na Windows (protože jde o msysgit) a debata o potenciální podpoře symbolického odkazu.
Ale komentář o pevném odkazu se týká Gitu obecně.