2012-06-29 10 views
41

Ich habe eine Shell-Variable, die auf das Verzeichnis verweist, in dem sich alle meine Konfigurationsdateien befinden. Nehmen wir an, die Variable wird mit export RC=$HOME/rc erstellt. Ich habe eine globale Ignorierdatei im Konfigurationsverzeichnis: ~/rc/globalgitignore.Shell-Variable-Erweiterung in git config

Meine Frage ist, wie kann ich die RC Variable in meiner .gitconfig Datei erweitern?

Ich habe bereits versucht, die folgenden:

  • excludesfile = $RC/globalgitignore

  • excludesfile = !$RC/globalgitignore

  • excludesfile = !echo $RC/globalgitignore

  • excludesfile = !$(echo $RC/globalgitignore)

Keine dieser Lösungen funktioniert.

Die einzige Möglichkeit funktioniert, wenn ich den vollständigen Pfad eingeben: excludesfile = ~/rc/globalgitignore, aber dann muss ich den Pfad ändern, wenn mein rc Verzeichnis an einen anderen Speicherort verschieben.

Antwort

32

Sie können nicht. git-config(1) unterstützt keine Erweiterung von Umgebungsvariablen, aber nur begrenzt Typumwandlung und Pfad Expansion:

Die Typspezifizierer entweder --int sein kann oder --bool, git Config sicherzustellen, dass die Variable (n) sind von der angegebene Typ und konvertiert den Wert in die kanonische Form (einfache Dezimalzahl für int, eine "wahre" oder "falsche" Zeichenfolge für Bool), oder --path, die einige Pfad Erweiterung (siehe --path unten) . Wenn kein Typspezifizierer übergeben wird, werden keine Prüfungen oder Transformationen auf dem Wert durchgeführt.

Die Dokumentation für --path Zustände:

--path

git-config erweitern führende ~ auf den Wert von $ HOME und ~ Benutzer auf das Home-Verzeichnis für den angegebenen werden Benutzer. Diese Option hat keine Auswirkungen, wenn Sie den Wert festlegen (Sie können jedoch git config bla ~/von der Befehlszeile aus verwenden, damit Ihre Shell die Erweiterung ausführt).

Der Begriff "Erweiterung" erscheint in keinem anderen Kontext in git-config(1). Wie bist du auf die Idee gekommen, dass es so sein sollte, da kein solches Feature irgendwo dokumentiert ist?

Um Umgebungsvariablen zu erweitern, müssen Sie die Git-Konfigurationsdatei selbst vorverarbeiten, d. H. Indem Sie eine Vorlagendatei erstellen und Variablen mit einem Skript erweitern, bevor Sie die Datei in Ihr Verzeichnis $HOME kopieren.

Wenn es um das dotfile Management geht, dann tun Sie, was alle Leute tun: Legen Sie sie in ein Verzeichnis und fügen Sie symlinks von $HOME zu diesem Verzeichnis hinzu.

+0

Zuvor habe ich alle Konfigurationsdateien aus dem 'rc'-Verzeichnis in mein Home-Verzeichnis verknüpft. Um diese Links wegzulassen, habe ich die Variable 'RC' erstellt und die meisten meiner Programme benutzen sie. Übrigens ist die '~' erweitert und wenn Sie Git Config Alias ​​verwenden ... dann können Sie Shell-Kommandos und Variable erweitern verwenden. – SvenK

+3

@SvenK: Bitte lesen Sie 'git-config (1)': Die Tatsache, dass 'git-config (1)' '' '' erweitert, bedeutet nicht automatisch, dass Variablen-Erweiterungen oder sogar Shell-Befehle unterstützt werden. '~' wird * genau dann von 'git-config' behandelt, wenn und nur wenn ein Wert * mit dem Spezifizierer '--path' abgerufen wird *. Dies ist die * einzige * Art der Erweiterung, die von 'git-config' unterstützt wird. Ich habe meine Antwort aktualisiert, um die relevanten Abschnitte von 'git-config (1)' – lunaryorn

+2

einzuschließen Dies ist ein wenig frustrierend, da ich nicht nur meine http [s]? _ Proxy-Umgebungsvariable für mein ganzes System angeben kann; Ich muss es aus irgendeinem Grund auch in meiner gitconfig angeben. Ziemlich nervig für Leute, die nicht von zuhause oder einem kleinen Entwicklerladen arbeiten und/oder in verschiedenen Netzwerken sitzen, je nachdem, wo sie arbeiten. –

15

Ich benutze Bash-Skripte in meiner Konfiguration, um eine variable Erweiterung zu ermöglichen. Exportieren Sie einfach die Variable, die Sie in Ihrem Bashrc müssen und es in den Skripten verwenden:

In meiner ~/.bashrc:

export TESTVARIABLE="hello" 

In meiner ~/.gitconfig:

[alias] 
    test = !bash -c '"echo \"Value: $TESTVARIABLE\";"' 

Bei meine bash-Prompt:

bash> git test 
    Value: hello 

Th Die andere Möglichkeit besteht darin, einen Befehl git config in die Shell rc einzufügen. Ich zum Beispiel habe in meinem .bashrc:

git config --global user.name "[email protected]$HOSTNAME" 

Ich habe die gleiche Konfiguration auf allen meinen Maschinen, und durch diese Zugabe kann ich unterscheiden zwischen von verschiedenen Maschinen verpflichtet. Sie könnten das gleiche tun und zu Ihrer Shell rc hinzufügen:

export RC="$HOME/rc" 
git config --global core.excludesfile "$RC/globalgitignore" 
+1

gospes: Ich habe die erste Methode ausprobiert, die Sie für das E-Mail-Feld vorgeschlagen haben. Die resultierende E-Mail (die ich in den Festschreibungsinformationen sehe) entspricht der Zeichenfolge " ". Ideen? – tivoni

+8

@tivoni das Beispiel von @gospes funktioniert nur, weil es in der' git alias' group –

Verwandte Themen