1496 Stimmen

.gitignore schließt Ordner aus, aber enthält bestimmten Unterordner

Ich habe den Ordner application/, den ich zur .gitignore hinzufüge. Innerhalb des Ordners application/ befindet sich der Ordner application/language/gr. Wie kann ich diesen Ordner einschließen?

Ich habe das versucht

application/
!application/language/gr/

4voto

T.Todua Punkte 48569

In WordPress hat mir das geholfen:

wp-admin/
wp-includes/
/wp-content/*
!wp-content/plugins/
/wp-content/plugins/*
!/wp-content/plugins/plugin-name/
!/wp-content/plugins/plugin-name/*.*
!/wp-content/plugins/plugin-name/**

4voto

Breit Punkte 369

Insbesondere für ältere Git-Versionen funktionieren die meisten Vorschläge nicht so gut. Wenn das der Fall ist, würde ich eine separate .gitignore-Datei im Verzeichnis platzieren, in dem der Inhalt unabhhängig von anderen Einstellungen enthalten sein soll und dort zulassen, was benötigt wird.

Zum Beispiel: /.gitignore

# alle .dll-Dateien ignorieren
*.dll

/dependency_files/.gitignore

# alles einschließen
!*

Alles in /dependency_files (auch .dll-Dateien) wird also problemlos eingeschlossen.

3voto

Adrian Dunston Punkte 2932

Nur ein weiteres Beispiel dafür, wie man sich durch die Verzeichnisstruktur bewegt, um genau das zu bekommen, was man möchte. Hinweis: Ich habe Library/ nicht ausgeschlossen, sondern Library/**/*

# .gitignore-Datei
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme

> git add Library

> git status

Auf Branch master
Ihr Branch ist auf dem neuesten Stand von "origin/master".
Änderungen, die zum Commit vorgemerkt sind:
  (Nutze "git reset HEAD ...", um die Änderungen zu entmarkieren)

    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
    neue Datei:   Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings

2voto

Abhirup Das Punkte 583

Ich verwende diese Workaround oft in der CLI, wo ich anstelle der Konfiguration meiner .gitignore eine separate .include-Datei erstelle, in der ich die zu inkludierenden (Teil-)Verzeichnisse definiere, unabhängig davon, ob sie von .gitignore direkt oder rekursiv ignoriert werden.

Daher benutze ich zusätzlich

git add `cat .include`

während des Stagings vor dem Commit.

An den OP schlage ich vor, ein .include zu verwenden, das diese Zeilen enthält:

/application/language/gr/*

HINWEIS: Die Verwendung von cat erlaubt nicht die Verwendung von Aliassen (innerhalb von .include) zur Spezifizierung von $HOME (oder einem anderen spezifischen Verzeichnis). Dies liegt daran, dass die Zeile homedir/app1/*, wenn sie an git add mit dem obigen Befehl übergeben wird, als git add 'homedir/app1/*' erscheint und das Einklammern von Zeichen in einfachen Anführungszeichen ('') den wörtlichen Wert jedes Zeichens innerhalb der Anführungszeichen bewahrt und somit das Funktionieren von Aliassen (wie z.B. homedir) verhindert (siehe Bash Single Quotes).

Hier ist ein Beispiel einer .include-Datei, die ich in meinem Repository hier verwende.

/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc

2voto

Ich wollte die jQuery-Produktions-JS-Dateien verfolgen und das hat funktioniert:

node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X