Git-Ignorieren von Symlinks auf einem vom Composer installierten Magento-Modul


11

Ich installiere Module mit composer.phar.

Dadurch werden Symlinks-Dateien in publichtml/app/code/community(zum Beispiel) mit einem Ziel zu erstellt vendor/themodule....

In meinem habe .gitignoreich das Vendor-Verzeichnis ausgeschlossen - aber die Links würden natürlich immer noch im Git landen.

Gibt es eine einfache Möglichkeit, diese Links automatisch auszuschließen? (außer alles manuell zum .gitignore hinzuzufügen)

Ich muss sagen, dass ich einige require-devModule habe, die nicht auf dem endgültigen Server landen sollten - also wäre es zumindest nicht so schön, diese Links dort zu haben.


1
Würde dies auch für Modman gelten?
Philwinkle

Mit modman würden Sie im Allgemeinen Git-Submodule für jede Erweiterung verwenden und einfach die Symlinks zum Repository hinzufügen. Sie müssen dort nicht ausgeschlossen werden, im Gegenteil, in einem Modman-Bereitstellungsszenario wäre dies meistens nicht sinnvoll.
Vinai

1
@philwinkle Ich habe kürzlich begonnen, das Magento-Stammverzeichnis aus Sicherheitsgründen in einem separaten Repo zu verfolgen (z. B. um leicht geänderte Dateien zu erkennen), um Änderungen an index.php und Mage.php zu verfolgen und um Magento-Upgrades zu vereinfachen, die definitiv auch für Modman, IMO, relevant sind .
ColinM

Antworten:


8

Das Beste, was ich mir ausgedacht habe, war, dies nach einer Installation / Aktualisierung des Komponisten auszuführen

$ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore

Der Befehl sollte im Git-Stammverzeichnis ausgeführt werden. Es werden alle Symlinks zur Gitignore-Datei hinzugefügt, die noch nicht vorhanden sind.


Dies erzeugt Pfade wie ./foo/bar... Ich denke, wir müssen den ersten entfernen .- hat es bei Ihnen so funktioniert?
Alex

Funktioniert gut für mich mit der Führung ., ja. Sonst zur Rettung sed:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai

Eigentlich bricht das den Grep ... nun, vielleicht gibt es sowieso einen guten Weg, den Weg aufzuräumen ...
Vinai

1
Einfache Lösung : find * .... Wird meine Antwort aktualisieren.
Vinai

3

Diese Methode fügt nur nicht verfolgte Symlinks hinzu, sodass sie wiederholt werden können, ohne doppelte Einträge, Symlinks, die sich in Submodulen befinden oder auf andere Weise bereits ignoriert werden, oder absichtlich verfolgte Symlinks hinzuzufügen.

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    test -L "$f" && echo $f >> .gitignore;
    test -d "$f" && echo $f\* >> .gitignore;
done


1

Die kombinierte Lösung von @ColinM und @Vinai, die für mich funktioniert

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    if test -L "$f"
    then
        test -L "$f" && echo $f >> .gitignore;
    elif test -d "$f"
    then
        find ${f%/} -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
    fi
done

Haben Sie bemerkt, dass neuere Composer-Installer die Symlinks automatisch ausschließen?
Alex

Sicher, aber einige meiner Projekte stehen nicht unter der Kontrolle des Komponisten. Die hier angebotenen Lösungen gelten nicht nur für Komponistenprojekte, sondern auch für das Ignorieren von Symlinks. Hoffe, es wird jemandem helfen
martin_mageworx
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.