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?

Macha
quelle

Antworten:

12

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

user151019
quelle
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.

Kennzeichen
quelle
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.

Tony Garland
quelle
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.

Josh K
quelle
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/
Ohad Cohen
quelle