2014-01-14 7 views
10

Ich habe ein Repo, das SVG-Bilder in einem Verzeichnis icons/ enthält. hinzufügen Dem Versuch, diese Bilder zu der Repo schlägt fehl, und Git klagt mit der Fehlermeldung:Git ignorieren Icon-Dateien wegen Icon? Regel

The following paths are ignored by one of your .gitignore files: 
public/img/icons/my-icon.svg 
Use -f if you really want to add them. 

Wenn ich die ignorierten Dateien git-check-ignore mit verfolgt, fand ich, dass die Icon? Regel aus meiner .gitignore_global Datei der Täter war.

$ git check-ignore -v public/img/icons/my-icon.svg 
/Users/ryanatallah/.gitignore_global:42:Icon? public/img/icons/my-icon.svg 

Was könnte eine elegante Lösung für dieses Problem sein?

+0

Warum gehst du nicht einfach Entfernen Sie die Zeile 'Icon?' aus .gitignore_global oder ändern Sie sie so, dass sie nur dem entspricht, was Sie ignorieren wollen? – Njol

+0

Weil ich immer noch möchte Git 'Icon?' Dateien zu ignorieren. –

+0

Wenn Sie sagen, dass Sie ** Icon ** -Dateien ignorieren möchten, gibt es ein anderes Muster, das anstelle von 'Icon' funktionieren würde? Zum Beispiel - '* .ico' – TheCodeArtist

Antwort

17

Es stellt sich heraus, dass dieses Problem durch eine Git bug verursacht wird, wo die Icon? gitignore Regel auch Verzeichnisse wie icons/ entspricht. Die Lösung besteht darin, die Regel am Ende mit dem richtigen Steuerzeichen (einem Wagenrücklauf) zu schreiben. This question erklärt, dass Icon? Dateien automatisch für Verzeichnisse mit benutzerdefinierten Symbolen erstellt werden.

Die Lösung, wie in this blogpost dokumentiert ist, ist die Regel richtig in meine globale Gitignore-Datei mit dem Wagenrücklauf zu schreiben. Der folgende Ruby-Skript funktioniert den Trick:

>> f = File.open(".gitignore", "a+") # append 
=> #<File:.gitignore> 
>> f.write("Icon\r\r") 
=> 8 
>> f.close 
=> nil 
+0

Danke dafür! Mein Kollege und ich zogen uns eine halbe Stunde lang die Haare aus. –

+0

OS X: Ich habe versucht, nach der Verwendung dieser Technik eine weitere Zeile zu ".gitignore" hinzuzufügen, aber es wurde mit Icon in derselben Zeile gemischt. Ich habe das Problem umgangen, indem ich den Eintrag 'Icon' gelöscht und neu hinzugefügt habe, diesmal nur mit' f.write ("Icon \ r \ r \ n"). Danach konnte ich einen weiteren Eintrag hinzufügen ('echo" file_to_ignore ">> .gitignore'). –

+0

'f.write (" Icon [\ r] \ n ") scheint vorzuziehen. Sehen Sie [hier] (https://Stackoverflow.com/a/33974028/192740) für warum. Es verhindert auch Arnauds Problem. – cstork

2

Um Regeln aus der übergeordneten .gitignore Datei überschreibt, müssen Sie ! Präfix verwenden, zum Beispiel in lokaler .gitignore Datei hinzufügen:

!Icon