2017-03-29 4 views
2

So bemerkte ich, dass seit git Namen Ordner auf der Grundlage der Zweig-Namen im Dateisystem (im Refs-Ordner speziell d. H. Fernbedienungen) dies Probleme verursachen kann, da die zulässigen Zeichen in den Ordnernamen Betriebssystem abhängig sind. Git-Zweig-Namen sind vom Betriebssystem abhängig?

Zum Beispiel können Sie einen Zweig auf MAC OS erstellen können wie:

feature/my_special_"Splash Screen"_feature 

Wenn ich das auf Windows holen, es würde mit einer Meldung fehlschlagen wie:

Fetch failed: fatal: Unable to create 'C:/AndroidStudioProjects/MyProject/.git/refs/remotes/origin/feature/my_special_"Splash Screen"_feature.lock': Invalid argument 

Da der Dateiname enthält aposthropes, die unter Windows nicht erlaubt sind, während sie auf MAC OS erlaubt sind.

Wenn Sie versuchen, die gleiche Verzweigung in Windows zu erstellen, wird git die Apottropes einfach entfernen.

Kennt jemand eine offizielle Dokumentation dazu? Müssen wir diesen Zweig auch umbenennen oder gibt es einen Workaround?

+0

Oder übernehmen nur die Politik, die Zweignamen nur enthält, kann alphanumerics + „/“ und du bist fertig. Sie könnten sogar automatisierte Überprüfungen durchführen, um zu verhindern, dass Personen Zweige, die gegen diese Richtlinie verstoßen, in ein zentrales Repository verschieben. – larsks

+0

Ein weiteres Problem ist das Falzen von Kisten. In Git wird fortlaufend daran gearbeitet, keine Dateien auf Dateisystembasis mehr zu speichern, um diese Dinge zu speichern, und Branchennamen werden oft in der Flat-Datei '.git/packed-refs' gespeichert, in der weder die Groß-/Kleinschreibung noch das Betriebssystem eingeschränkt sind auf Dateinamen sind ein Problem. Trotzdem, genau das, was @larks gesagt hat. :-) Dateinamen innerhalb des Arbeitsbaums haben das gleiche Problem, nur schlimmer, wenn Sie beginnen, Unicode-Dateinamen zu verwenden (in Betracht ziehen, Codes gegen vorher kombiniert zu kombinieren). (Auch ist '' 'kein Apostroph, es ist ein Doppelzitat.) – torek

Antwort

3

Eine nicht-offizielle Politik in "Legal Git branch names" erwähnt wird, Referenzierung this thread:

A Git-Zweigs Name kann nicht: ""

  • eine Pfadkomponente, die mit beginnt
  • Haben Sie einen Doppelpunkt ".."
  • ein ASCII-Steuerzeichen haben, "~", "^", ":" oder SP, überall
  • Ende mit einem "/"
  • Ende mit " .lock“
  • enthalten einen "\"(Backslash)

That patch (for a better error message on invalid branch name) was not implemented, und es beinhaltet nicht doppelte Anführungszeichen zu der Zeit.

Trotzdem ist es eine gute Idee, Sonderzeichen in Zweignamen zu vermeiden.

This comment in refs.c bleibt in der Nähe einer offiziellen Politik:

/* 
* Try to read one refname component from the front of refname. 
* Return the length of the component found, or -1 if the component is 
* not legal. It is legal if it is something reasonable to have under 
* ".git/refs/"; We do not like it if: 
* 
* - any path component of it begins with ".", or 
* - it has double dots "..", or 
* - it has ASCII control characters, or 
* - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or 
* - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or 
* - it ends with a "/", or 
* - it ends with ".lock", or 
* - it contains a "@{" portion 
*/ 
+0

Danke, gut, dass wir unsere eigene Richtlinie darauf aufbauen. – breakline

Verwandte Themen