861 Stimmen

Alle Dateien zu einer Übergabe hinzufügen, außer einer einzelnen Datei?

Ich habe eine Reihe von Dateien in einem Changeset, aber ich möchte gezielt eine einzelne geänderte Datei ignorieren. So sieht es aus nach git status :

# modified:   main/dontcheckmein.txt
# deleted:    main/plzcheckmein.c
# deleted:    main/plzcheckmein2.c
...

Gibt es eine Möglichkeit, wie ich git add aber die eine Textdatei, die ich nicht anfassen möchte, einfach ignorieren? Etwa so:

git add -u -except main/dontcheckmein.txt

0voto

TheChetan Punkte 4136

Wenn Sie eine bestimmte Datei jedes Mal ignorieren möchten, gibt es drei wirksame Lösungen, die nicht mit .gitignore .

  1. Fügen Sie die Datei, die Sie ignorieren wollen, zu .git/info/exclude . Es funktioniert genau wie Ihr .gitignore mit der Ausnahme, dass die die Konfiguration ist spezifisch für Ihren Rechner .

  2. Setzen Sie die gewünschte Datei mit einer pre-commit git hook . Zum Beispiel:

    $ echo 'git reset -- src/main/resources/log4j.properties' >> .git/hooks/pre-commit
    $ chmod +x .git/hooks/pre-commit

    Ein Pre-Commit-Hook wird unmittelbar vor einer Übergabe ausgeführt. So können Ihre Dateien vor jeder Übertragung automatisch zurückgesetzt werden.

    $ git status
    On branch CHANGE-137-notifications-support ...
    
    Changes not staged for commit:
     modified:   Dockerfile
     modified:   src/main/resources/log4j.properties
    
    $ git add .
    
    $ git status
    On branch CHANGE-137-notifications-support ...
    
    Changes to be committed:
     modified:   Dockerfile
     modified:   src/main/resources/log4j.properties
    
    $ git commit -m "Trivial change"
    
    Unstaged changes after reset:
    M    src/main/resources/log4j.properties
    
    [CHANGE-137-notifications-support 97cfb3f] Trivial change
    1 file changed, 3 insertions(+)
  3. Die dritte Möglichkeit ist die Aktualisierung des Index für eine bestimmte Datei.

    $ git update-index --assume-unchanged src/main/resources/log4j.properties

0voto

Chris Punkte 1884

Ich benutze git add --patch ziemlich viel und wollte so etwas, um zu vermeiden, dass ich auf d die ganze Zeit über dieselben Dateien. Ich peitschte eine sehr hacky paar Git Aliase, um die Arbeit zu erledigen:

[alias]
    HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
    ap                      = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"

In meinem Fall wollte ich nur bestimmte minimierte Dateien immer ignorieren, aber Sie könnten eine Umgebungsvariable verwenden wie $GIT_EXCLUDE_PATTERN für einen allgemeineren Anwendungsfall.

-2voto

Rodrigo Punkte 79

Sie können dies versuchen: git add * && git reset main/dontcheckmein.txt

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