Wie kann ich Git-Commit-Dateien in einem verknüpften Ordner erstellen?


19

Ich habe zwei Ordner:

  • /home/me/code/project/
  • /srv/www/projectfiles/

In dem /home/me/code/projectOrdner habe ich einen Link staticzu/srv/www/projectfiles/

dh /home/me/code/project/static/->/srv/www/projectfiles/

Wenn ich jetzt versuche, einen Commit durchzuführen, werden hinter dem Symlink keine Dateien angezeigt. Stattdessen wird versucht, den Symlink selbst als Datei festzuschreiben.

Wie lege ich eine Datei fest /srv/www/projectfiles/style.css, die sich hinter dem Symlink befindet?

Antworten:


12

Eine Problemumgehung wäre, dass / srv / www / projectfiles ein Symlink zu / home / me / code / project / static ist, sodass git keine Symlinks sieht


Sie kehren also die Logik um? Behalten Sie die erforderlichen Dateien / Ordner im Git-Ordner und platzieren Sie dann einen Symlink an einer anderen Stelle (wo sich die ursprünglichen Dateien / Ordner befanden)?
RusI

@ Rusl Ja genau das
user151019

Aber wie kann ich dann die Dateien lokal anpassen? Sollte ich für jede maschine ein eigenes repo haben? Verliert den ganzen Punkt.
Ashnur

Nun, die lokale Anpassung wird nicht in Git sein
User151019

3

Wenn Sie Linux verwenden, gefällt mir besonders die Lösung von GitBLSR . Es ist eine Bibliothek, die über LD_PRELOAD geladen wird und Symlinks zu Dateien und Ordnern außerhalb eines Repositorys transparent dereferenziert.

Die Installation für ein lokales Benutzerkonto ist einfach:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

Dadurch wird die Bibliothek kompiliert und ein Alias ​​wie das folgende in erstellt ~/.bashrc:

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

Die Verwendung dieses Alias ​​ermöglicht die transparente Link-Dereferenzierung.


1
Das ist furchtbar! Aber es funktioniert gut, also ist es großartig. Vielen Dank!
kay

Das ist komisch! Ich liebe es einfach
Marcos Besteiro López

2

Verwenden Sie einen Bereitstellungspunkt, um den Zielordner (mit dem Sie gegenwärtig einen Symlink erstellen) an dem Ort bereitzustellen, an dem er unter dem Git-Projekt angezeigt werden soll. Ich habe diesen Ansatz erfolgreich angewendet.


1

Verschieben Sie die Dateien in den Ordner und entfernen Sie den Symlink. Git überquert keine Symlinks.

Es wird (und ich) davon ausgegangen, dass Sie einen Link zu einer Reihe von Dateien erstellen, die Sie entweder nicht steuern oder nicht ändern möchten, da sie nicht versioniert werden müssen.


1
Ich kontrolliere diese Dateien. Sie sind die Stylesheets usw. und müssen sich in einem Verzeichnis befinden, das der Server bedienen wird.
Macha

1

Eine andere Problemumgehung - die einzige, die ich gefunden habe und die auch für Verzeichnisse funktioniert - besteht darin, den Git-Arbeitsbaum für die spezifischen Aktionen zu ändern.

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.