GNU/Linux >> Tutoriales Linux >  >> Linux

Git y enlaces duros

Descubrí que, usando ganchos, puedes capturar el git pull evento (cuando hay algo que extraer...) escribiendo el controlador de eventos del script en .git/hooks/post-merge archivo.

Primero, tienes que chmod +x eso.

Luego, pon el ln comandos dentro de él para recrear enlaces duros en cada extracción. Genial eh!

Funciona, solo lo necesitaba para mi proyecto y ls -i muestra que los archivos se vincularon automáticamente después de pull .

Mi ejemplo 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

IMPORTANTE:Como puede ver, la ruta a cualquier archivo en su repositorio debe comenzar con $GIT_DIR , luego agregue la ruta relativa parcial al archivo.

También importante:-f es necesario, porque está recreando el archivo de destino.

EDITAR

El cliente git moderno parece admitir enlaces simbólicos y enlaces duros dentro del repositorio de forma natural, incluso cuando se empuja a una ubicación remota y luego se clona desde allí. Sin embargo, nunca más tuve la necesidad de vincular fuera de un repositorio de 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

Clonación del repositorio 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

Clonación desde repositorio remoto

$ 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 también señala algo importante:los enlaces simbólicos deben definirse relativamente.


El objeto 'árbol', que representa directorios en Git, almacena el nombre del archivo y (un subconjunto de) permisos. No almacena el número de inodo (u otro tipo de identificación de archivo). Por lo tanto, enlaces duros no se puede representar en git , al menos no sin herramientas de terceros como metastore o git-cache-meta (y no estoy seguro de que sea posible incluso con esas herramientas).

Git intenta no tocar los archivos que no necesita actualizar, pero debe tener en cuenta que git no intenta conservar los enlaces duros, por lo que git puede romperlos.

Acerca de los enlaces simbólicos que apuntan fuera del repositorio :git no tiene problemas con ellos y debería preservar el contenido de los enlaces simbólicos... pero la utilidad de tales enlaces es dudosa para mí, ya que si esos enlaces simbólicos se romperían o no depende del diseño del sistema de archivos exterior repositorio git, y no bajo el control de git.


De este problema de msysgit

Los puntos de unión no son enlaces simbólicos; por lo tanto, los enlaces simbólicos simplemente no son compatibles con msysGit.

Además, los enlaces duros nunca fueron rastreados por Git .

El problema estaba orientado a Windows (ya que se trata de msysgit) y el debate sobre el soporte potencial de symlink.
Pero el comentario sobre el enlace duro se refiere a Git en general.


Linux
  1. Cómo crear enlaces duros y simbólicos en Linux

  2. ¿La diferencia entre enlaces simbólicos y duros?

  3. Cómo crear enlaces blandos y duros en Linux

  4. RHEL 7 – RHCSA Notas:Cree enlaces duros y blandos.

  5. Diferencia entre enlaces blandos y enlaces duros en Linux

Qué es Git y cómo instalar Git en Linux

Cómo instalar y usar Git en el sistema Linux

El comando ln en Linux:crear enlaces blandos y duros

Instalación y primeros pasos con Git

Enlaces duros y enlaces blandos en Linux:todo lo que necesita saber

rsync y enlaces simbólicos