webentwicklung-frage-antwort-db.com.de

Warum darf ein Zweigname nicht das Leerzeichen enthalten?

Ich habe es versucht:

git branch "MyProj/bin/ ignored"

und erhalten:

fatal: 'MyProj/bin/ ignored' is not a valid branch name.

Die Manpage git-branch verweist auf die Manpage git-check-ref-format , um die tatsächlichen Regeln für einen gültigen Zweignamen abzurufen.

Natürlich scheint der Grund für den oben genannten schwerwiegenden Fehler die Einfügung eines Leerzeichens zu sein.

Irgendeine Idee, warum in dieser Zeit noch Leerzeichen von einem Filialnamen ausgeschlossen sind (ich hätte es in alten CVS erwartet, aber Git?)

Was können technische Gründe dafür sein?

50
WinWin

Ich weiß nicht, ob Sie unten einen rein technischen Grund finden werden. Ich kann jedoch anbieten, dass Leerzeichen dazu neigen, Schraubenschlüssel in allen Arten von * nix-Hilfsprogrammen und Dateinamen zu werfen. Es kann also sein, dass Sie versehentlich etwas Falsches tun sollten. Immerhin läuft ein Git-Zweig auf eine Datei im Repo zurück, und dies vermeidet den Umgang mit Leerzeichen im Namen dieser Datei (insbesondere ist ein Zweig eine Datei in .git/refs/heads /, wie im Kommentar erwähnt).

Meistens würde ich vermuten, dass der Grund philosophisch ist und die Dinge einfach halten soll. Zweignamen sind von Menschen lesbare Namen, die keinen Grund haben, kompliziert zu sein (und erfordern, jedes Mal zwei zusätzliche Zeichen einzugeben, haha, um den Geist des Systemadministrators aufzurufen, der jeden Befehl an eine nicht zu entziffernde Kombination aus drei Buchstaben gebunden hat). Andernfalls als Argument "Warum CD nicht chdir" bezeichnet.

55
shelhamer

Es gibt eine mögliche Problemumgehung, wenn Sie verzweifelt genug sind. Der Unicode-Satz enthält viele Leerzeichen. Aber nur U + 0020 ist der Raum, der nicht erlaubt ist. Nehmen Sie z. ein sicheres Leerzeichen und Sie können einen Zweignamen mit Leerzeichen haben. Das Hauptproblem ist, dass Ihre Tastatur wahrscheinlich keine Taste für diesen Codepunkt hat. Ich verwende das folgende Skript, um dieses Problem zu umgehen:

#!/bin/zsh
git co -b "${@// / }"

Es ersetzt einfach alle Leerzeichen in den Argumenten durch geschützte Leerzeichen ...

4
Vir

alter Thread, aber hey ..
auf einem mac verwende ich alt + space. Es wird einen unsichtbaren Charakter hinzufügen, der den Trick für Sie erledigen wird. mind: es ist kein "Raum", es ist ein unsichtbarer Charakter. Visuell dasselbe, aber effektiv nicht das Gleiche. 100% werden wahrscheinlich die Hölle von irgendjemand anderem verwirren und auf jeden Fall Chaos bringen, aber hey, für die Tritte .. warum nicht? xD 

git checkout -b US24024 Automated Tests - Profile A Switched to a new branch 'US24024 Automated Tests - Profile A'

4
joe

Dies ist nicht zulässig, da dies die Funktionalität des Befehls "git checkout" verkomplizieren würde. 

Ex: Betrachten Sie, dass derzeit ein Zweig aufgerufen wird, obwohl Sie derzeit im Master sind. Wenn Sie den Befehl ausführen würden

(Master): git checkout -b mein Fix

git würde nicht wissen, ob Sie einen neuen Zweig mit dem Namen "my fix" oder einen neuen Zweig mit dem Namen "my" erstellen möchten, der mit Ihrem ursprünglichen "fix" und nicht mit dem "master" -Zweig verknüpft ist.

Quelle: https://git-scm.com/docs/git-checkout (Git-Dokumentation)

1
Catalin Popescu

Weil Pfadnamen korrekt in Shell-Skripts verwendet werden, ist schwierig. Aus der verlinkten Manpage git check-ref-format selbst:

Diese Regeln erleichtern es Shell-Skript-basierten Tools, die Referenz zu analysieren Namen, Pfadnamenerweiterung durch die Shell, wenn ein Referenzname verwendet wird (aus Versehen) nicht in Anführungszeichen gesetzt, und Mehrdeutigkeiten in bestimmten Referenznamen vermeiden Ausdrücke (siehe gitrevisions (7)):

Siehe auch Dateinamen und Pfadnamen in Shell: So machen Sie es richtig :

Das grundlegende Problem ist, dass heutzutage die meisten Unix-ähnlichen Dateinamen .__ enthalten. fast alle Bytes . Dazu gehören Zeilenumbrüche, Registerkarten und das Escape-Zeichen (einschließlich Escape-Sequenzen, die bei der Anzeige Befehle ausführen können), other Steuerzeichen, Leerzeichen (überall!), führende Striche (-), Shell Metazeichen und Byte-Sequenzen, die keine zulässigen UTF-8-Zeichenfolgen sind.

...

Dieser -Fehler in Unix-artigen Kerneln (der gefährliche Dateinamen erlaubt) kombiniert mit zusätzlichen Schwächen in der Bourne-Shell-Sprache, wodurch es In Shell ist es noch schwieriger, Dateinamen und Pfadnamen korrekt zu behandeln. ICH Ich denke, Shell ist eine vernünftige Sprache für kurze Skripte. Die übermäßige Freizügigkeit von Dateinamen macht jedoch einfache Aufgaben zu leicht erledigte falsche Aufgaben.

0
kelvin