Ich habe herausgefunden, dass man mit Hooks den git pull
erfassen kann Ereignis (wenn es etwas zu ziehen gibt ...) Schreiben des Skript-Ereignishandlers in .git/hooks/post-merge
Datei.
Zuerst müssen Sie chmod +x
es.
Geben Sie dann ln
ein darin enthaltene Befehle, um harte Links bei jedem Pull neu zu erstellen. Ordentlich huh!
Es funktioniert, ich brauchte das nur für mein Projekt und ls -i
zeigt, dass Dateien nach pull
automatisch verlinkt wurden .
Mein Beispiel von .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
WICHTIG:Wie Sie sehen können, sollte der Pfad zu jeder Datei in Ihrem Repository mit $GIT_DIR
beginnen , und fügen Sie dann den partiellen relativen Pfad zur Datei hinzu.
Auch wichtig:-f
ist erforderlich, da Sie die Zieldatei neu erstellen.
BEARBEITEN
Der moderne Git-Client scheint natürlich Symlinks und Hardlinks innerhalb des Repositorys zu unterstützen, selbst wenn er an einen entfernten Ort verschoben und dann von dort geklont wird. Ich hatte jedoch nie wieder das Bedürfnis, außerhalb eines Git-Repos zu verlinken ...
$ 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
Klonen aus lokalem Git-Repository
$ cd
$ git clone tmp/ teste_tmp
Cloning into 'teste_tmp'...
done.
$ cd teste_tmp/
$ ls
hardlink symlink x
$ cat symlink
123
$ cat hardlink
123
Klonen aus einem entfernten Repository
$ 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 weist auch auf eine wichtige Sache hin:Symlinks müssen relativ definiert werden.
Das „Baum“-Objekt, das Verzeichnisse in Git darstellt, speichert Dateinamen und (Teilmenge von) Berechtigungen. Es speichert keine Inode-Nummer (oder eine andere Art von Datei-ID). Daher harte Links kann nicht in Git dargestellt werden , zumindest nicht ohne Tools von Drittanbietern wie Metastore oder Git-Cache-Meta (und ich bin mir nicht sicher, ob es sogar mit diesen Tools möglich ist).
Git versucht, keine Dateien zu berühren, die es nicht aktualisieren muss, aber Sie müssen berücksichtigen, dass Git nicht versucht, Hardlinks zu erhalten, sodass sie von Git beschädigt werden können.
Über symbolische Links, die außerhalb des Repositorys verweisen :git hat keine Probleme mit ihnen und sollte den Inhalt symbolischer Links bewahren ... aber die Nützlichkeit solcher Links ist für mich zweifelhaft, da ob diese symbolischen Links kaputt gehen oder nicht, vom Dateisystem-Layout außen abhängt. em> git-Repository und nicht unter der Kontrolle von git.
Aus diesem msysgit-Problem
Verbindungspunkte sind keine symbolischen Links; daher werden symbolische Links in msysGit einfach nicht unterstützt.
Außerdem wurden harte Links nie von Git verfolgt .
Das Thema war Windows-orientiert (da es um msysgit geht) und eine Debatte über die mögliche Unterstützung von Symlink.
Aber der Kommentar zum Hardlink betrifft Git im Allgemeinen.