GNU/Linux >> Znalost Linux >  >> Linux

Git a pevné odkazy

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ě.


Linux
  1. Jak vytvořit pevné a symbolické odkazy v Linuxu

  2. Vysvětlení pevných odkazů a měkkých odkazů v Linuxu

  3. Co jsou měkké a pevné odkazy v systému souborů Linux

  1. Rozdíl mezi symbolickými a pevnými odkazy?

  2. Jak vytvořit měkké a pevné odkazy v Linuxu

  3. Rozdíl mezi měkkými a pevnými odkazy v Linuxu

  1. Přizpůsobení mého linuxového terminálu pomocí tmux a Git

  2. Vytvářejte pevné a měkké vazby – příprava na zkoušku RHCSA

  3. RHEL 7 – RHCSA Poznámky:Vytvářejte pevné a měkké vazby.