it-swarm.com.de

gitignore und "Die folgenden nicht protokollierten Dateien des Arbeitsbaums werden von der Kasse überschrieben"

Also habe ich meiner .gitignore-Datei einen Ordner hinzugefügt.

Sobald ich einen git status mache, sagt es mir

# On branch latest
nothing to commit (working directory clean)

Wenn ich jedoch versuche, Zweige zu wechseln, bekomme ich Folgendes:

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

So sieht meine .gitignore-Datei aus:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

Wie bringe ich das zum Laufen, damit ich Zweige wechseln kann, ohne diese Dateien zu löschen?

Wenn ich eine Änderung vornehme, hat dies Auswirkungen auf diese Dateien? Mit anderen Worten, wenn ich später in diesen Zweig zurückkommen würde, wäre alles bis zu meinem letzten Commit perfekt?

Ich möchte diese Dateien nicht verlieren, ich möchte sie nicht nur verfolgen.

731
marcamillion

Anscheinend möchten Sie, dass die Dateien ignoriert werden, sie wurden jedoch bereits festgeschrieben. .gitignore hat keine Auswirkung auf Dateien, die sich bereits im Repo befinden, daher müssen sie mit git rm --cached entfernt werden. Der --cached verhindert, dass es Auswirkungen auf Ihre Arbeitskopie hat, und wird beim nächsten Commit als entfernt markiert. Nachdem die Dateien aus dem Repo entfernt wurden, verhindert der .gitignore, dass sie erneut hinzugefügt werden.

Sie haben jedoch ein anderes Problem mit Ihrem .gitignore. Sie verwenden übermäßige Platzhalter und führen dazu, dass sie weniger übereinstimmen, als Sie erwarten. Lassen Sie stattdessen den .gitignore ändern und versuchen Sie dies.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
232
Arrowmaster

WARNUNG: Nicht gespeicherte Dateien werden gelöscht. Dies ist keine gute Antwort auf die gestellte Frage.

Ich habe auch diese Nachricht getroffen. In meinem Fall wollte ich die Akten nicht aufbewahren, also funktionierte das für mich:

git 2.11 und neuer

git clean  -d  -f .

älterer Idiot

git clean  -d  -f ""

Wenn Sie auch Dateien entfernen möchten, die von git ignoriert werden, führen Sie den folgenden Befehl aus. 

SEI GEWARNT!!! DIESE PROBLEMLICHSTEN IHR PROJEKT NICHT, WENN SIE 100% WISSEN, WAS SIE TUN

git 2.11 und neuer

git clean  -d  -fx .

älterer Idiot

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x bedeutet, dass ignorierte Dateien ebenso entfernt werden wie Dateien, die git nicht kennt.

  • -d bedeutet das Entfernen von nicht protokollierten Verzeichnissen zusätzlich zu nicht protokollierten Dateien. 

  • -f ist erforderlich, um die Ausführung zu erzwingen.

911
Scott Schafer

Warnung: Dies löscht die lokalen Dateien, die nicht indiziert werden.

Erzwinge es einfach: git checkout -f another-branch

518
Régis

Wenn Sie mit OS X arbeiten, kann dies daran liegen, dass der Dateiname einer Datei bestimmte Groß- und Kleinschreibung hatte. Stellen Sie die folgende Konfigurationsoption ein:

git config core.ignorecase true
122
mattbasta

Git sagt Ihnen, dass es Dateien erstellen möchte (benannt public/system/images/9/... etc), aber in diesem Verzeichnis sind bereits Dateien vorhanden, die nicht von Git verfolgt werden. Vielleicht hat jemand anderes diese Dateien zum Git-Repository hinzugefügt, und zum ersten Mal haben Sie zu diesem Zweig gewechselt?

Es gibt wahrscheinlich einen Grund, warum sich diese Dateien in Ihrem Zweig develop befinden, aber nicht in Ihrem aktuellen Zweig. Sie müssen möglicherweise Ihre Mitarbeiter fragen, warum das so ist.

Wie bekomme ich das, damit ich Zweige wechseln kann, ohne diese Dateien zu löschen?

Sie können es nicht tun, ohne die Dateien irgendwie verschwinden zu lassen. Sie können public jetzt in my_public oder etwas anderes umbenennen.

wenn ich später wieder in diesen Zweig komme, wäre alles bis zu meinem letzten Commit perfekt?

Wenn Sie Ihre Änderungen übernehmen, werden sie von Git nicht verloren gehen. Wenn Sie Ihre Änderungen nicht festschreiben, versucht Git wirklich, not die von Ihnen durchgeführte Arbeit zu überschreiben. Deshalb warnt Git Sie hier zuerst (wenn Sie versucht haben, Zweige zu wechseln).

41
Greg Hewgill

Es gibt einen Befehl für diese heikle Aufgabe (unlöschte Dateien dauerhaft löschen)

git clean -i

Dann wird git pull funktionieren.

21
Abhishek Goel

Das hat bei mir funktioniert.

 1. git fetch --all
 2. git reset --hard Origin/{branch_name}
14

Für diejenigen, die etwas weniger Weitreichendes brauchen als Scott Schafers Antwort ,

git clean -f

wird wahrscheinlich funktionieren. Ich schlage sehr vor, zu laufen

git clean --dry-run

zuerst. Dieser Befehl gibt eine Liste von Dateien aus, die Git entfernt, wenn Sie git clean -f Ausführen, und erspart Ihnen möglicherweise den Aufwand, versehentlich etwas zu entfernen, das Sie nicht wollten.

Weitere Informationen zu git clean Finden Sie unter diese Stack-Oveflow-Antwort oder die Dokumente .

12
mc_kaiser

Leider hat es weder git rm --cached noch git clean -d -fx "" für mich getan.

Meine Lösung endete damit, meinen Zweig in die Ferne zu drängen, ein neues Repo zu klonen und dann im neuen Repo zusammenzuführen. Andere Leute, die auf das Repo zugreifen, mussten dasselbe tun.

Moral der Geschichte: Verwenden Sie eine .gitignore-Datei von Anfang an.

11
Kyle Clegg

Wenn Sie diese Frage schnell lösen möchten, können Sie diesen Befehl verwenden:

git checkout -f dev
9
GeekHades

Dies ist mir auf einem Windows 8 -System passiert, wobei Git vom Befehl Prompt verwendet wurde. Der Rest meines Teams verwendetTFSund ich benutze Microsofts git-tf zum Push/Pull zwischen TFS und meinem lokalen Git-Repository.

Das Problem entstand aufgrund einiger Dateien, die nur zur Änderung ihres Falles umbenannt wurden . Was scheinbar passiert ist, war folgendes:

  • Die Akten wurden mit gemischter Hülle in ihren Namen eingecheckt.
  • Bei einem späteren Commit wurden die Dateinamen in Kleinbuchstaben geändert.
  • git-tf bekam die Dateien zunächst in gemischter Schreibweise.
  • Bei der Umbenennung der Dateien in Kleinbuchstaben wurden die Dateien nicht von git-tf abgerufen, da diese Dateinamen unter Windows 8 gleichwertig sind.
  • Da Git die Groß- und Kleinschreibung beachtet, beklagte es sich, dass es sich um Dateien mit gemischten Fällen handelt, die nicht in der Quellcodeverwaltung waren. Mit git status konnte ich jedoch keine Änderungen sehen, da diese Dateinamen in der Windows-Eingabeaufforderung gleichwertig sind.

Die einfachste Lösung für mich war:

  • git checkout eine vorherige Version des Projekts, lange bevor diese Dateien hinzugefügt wurden .
  • Danngit checkout die neueste Version des Projekts, mit dem korrekten Dateiformat.
8
Ryan Lundy

Ich hatte das gleiche Problem, als ich in einem Zweig aus einem früheren Commit auscheckte. Git lehnte es ab, wegen nicht nachverfolgter Dateien zu checken.

Ich habe eine Lösung gefunden und ich hoffe, es wird auch Ihnen helfen.

Das Hinzufügen der betroffenen Verzeichnisse zu .gitignore und das Ausgeben von $ git rm -r --cached auf diesen ist anscheinend nicht ausreichend. 

Angenommen, Sie möchten eine Verzweigung basierend auf einem früheren Commit K erstellen, um etwas zu testen und zur aktuellen Version zurückzukehren. Ich würde es in den folgenden Schritten tun:

  1. Richten Sie die nicht aufgezeichneten Dateien ein: Bearbeiten Sie den .gitignore und wenden Sie $ git rm -r --cached auf die Dateien und Verzeichnisse an, die der Git ignorieren soll. Fügen Sie auch die Datei .gitignore selbst zu .gitignore hinzu und vergessen Sie nicht, $ git rm -r --cached .gitignore auszugeben. Dadurch wird sichergestellt, dass das Ignorierverhalten von git in früheren Commits gleich bleibt.

  2. Übernehmen Sie die gerade vorgenommenen Änderungen:

    $ git add -A
    $ git commit

  3. Speichern Sie das aktuelle Protokoll, andernfalls können Probleme mit der aktuellen Version auftreten

    $ git log > ../git.log

  4. Hard Reset auf das Festschreiben K 

    $ git reset --hard version_k

  5. Erstellen Sie eine Verzweigung basierend auf dem Festschreiben K

    $ git branch commit_k_branch

  6. Kommen Sie in diesen Zweig

    $ git checkout commit_k_branch 

  7. Machen Sie Ihre Sachen und machen Sie es

  8. Gehe wieder in den Master zurück

    $ git checkout master

  9. Stellen Sie die aktuelle Version erneut ein

    $ git reset current_version oder $ git reset ORIG_HEAD

  10. Jetzt können Sie hart auf den Kopf zurücksetzen

    git reset --hard HEAD

HINWEIS! Überspringen Sie nicht den vorletzten Schritt (wie z. B. $ git reset --hard ORIG_HEAD). Andernfalls gehen die oben beschriebenen, nicht protokollierten Dateien verloren.

Ich stellte auch sicher, dass die Dateien, über die git sich beschwert hatte, nicht gelöscht wurden. Ich habe sie in eine Textdatei kopiert und den Befehl $ for i in $(cat ../test.txt); do ls -ahl $i; done ausgegeben.

Wenn Sie erneut zu dem oben genannten Zweig wechseln, vergessen Sie nicht, $ git status auszugeben, um sicherzustellen, dass keine unerwünschten Änderungen angezeigt werden.

7
Juri Sinitson

In meinem Fall lag das Problem bei den Submodulen. master wurde mit einem anderen Zweig zusammengeführt, der dem Projekt ein neues Submodul hinzugefügt hat. Der Zweig, den ich auschecken wollte, hatte es nicht. Deswegen beschwerte sich git über nicht aufgespürte Dateien und keine der anderen Lösungsvorschläge funktionierte für mich. Ich zwang die Kasse zu meiner neuen Filiale und zog den Master.

  • git checkout -f my_branch
  • git pull Origin master
  • git submodule update --init
4
Bruno Pinheiro

Diese beiden Funktionen (git rm --cached, Git checkout -f anderer Zweig) haben für mich NICHT funktioniert.

Stattdessen habe ich die Datei (in Eclipse) physisch entfernt, was Git Ihnen befiehlt. Bitte verschieben oder entfernen Sie sie, bevor Sie die Zweige wechseln können.

und dann füge ich es hinzu.

und dann habe ich gezogen und es hat funktioniert!

3
In-young Choung

Ich war auch mit einem ähnlichen Problem konfrontiert und habe alle oben genannten Lösungen ausprobiert, aber es hat nicht funktioniert

Das Problem wurde verursacht, als ich umbenannt wurde mein onMusicUpdateListener.Java in OnMusicUpdateListener.Java im Zweig develop

Nun hatte masteronMusicUpdateListener.Java Und develop die gleiche Datei wie OnMusicUpdateListener.Java.

Wann immer ich zum Master wechselte, gab es einen Fehler

The following untracked working tree files would be overwritten by checkout

und dann aborted.

Um das zu lösen, checked outmaster branch Habe ich meinen onMusicUpdateListener.Java umbenannt in OnMusicUpdateListener.Java, committed und dann merged mit develop branch.

Dann habe ich meinen develop-Zweig um merging in master aktualisiert, und jetzt ist alles wieder normal und das Problem ist gelöst.

3

Dateien verschieben statt löschen

Eine Möglichkeit, das Löschen von Dateien zu vermeiden, ist das Verschieben von Dateien. Zum Beispiel:

cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done
2
gmatht

Dies könnte eine Erlaubnisfrage sein,

den Besitzer wechseln,

Sudo chown -v -R usr-name:group-name folder-name
2
Won Jun Bae

In meinem Fall hat git rm --cached nicht funktioniert . Aber ich habe es mit einem git rebase bekommen

2
Hillkorn

2 Dateien mit demselben Namen, aber unterschiedlichen Fällen können das Problem sein.

Sie können eine dieser Dateien löschen oder umbenennen. Ex:

Pdf.html.twig (The GOOD one)

pdf.html.twig (The one I deleted)
2
Samuel Vicent

Wenn Sie eine Datei lokal umbenannt haben und dann eine pull ausführen, wird diese Fehlermeldung angezeigt. 

1
lyuboslav kanev

das ist einfach zu lösen, git sagt, dass Sie in beiden Zweigen die gleichen Dateien haben. Daher müssen Sie die spezifischen Dateien aus dem Hauptzweig löschen. Anschließend können Sie Folgendes zusammenführen:

git merge "deine Niederlassung"

Ich hoffe es funktioniert für dich, ich habe gerade meinen Fehler gelöst . Mein Fehler war:

fehler: Die folgenden nicht protokollierten Arbeitsbaumdateien werden durch die Zusammenführung überschrieben: .vs/slnx.sqlite Bitte verschieben oder entfernen Sie sie, bevor Sie zusammenführen . Abbruch

Jetzt funktioniert es! In meinem Fall .vs/slnx.sqlite wurde von Visual Studio generiert. Ich musste es schließen, bevor ich es löschen konnte.

1
jeirueda

Die meisten Antworten erwägen das Löschen oder Entfernen der Dateien. Dies ist der einfache Weg. Aber manchmal möchten Sie die lokalen Dateien nicht loswerden. Aber mit einer Strategie verschmelzen, so hat auch git eine Lösung dafür;

git merge --strategy=ours master 
0

In meinem Fall wurde dieser Fehler angezeigt, da ich ein beliebtes Open Source-CMS verwende und das Verzeichnis, das Probleme verursachte, das Uploads-Verzeichnis war, in das der CMS schreibt.

Es heißt also, dass es Dateien gibt, die Sie nicht haben, die Sie jedoch nicht durch Versionierung erhalten können.

Ich packe alle Dateien von der Live-Site auf meine lokale und greife dann in das Repo, in der Hoffnung, dass das Problem dadurch behoben wird.

0
Markosaurus

Überprüfen Sie, ob ein Ordnername mit einem '/' oder einem speziellen Symbol versehen ist, und benennen Sie diesen Ordner um. Dann klonen Sie das Repository einfach an einen anderen Speicherort.

0
Codemaker

Löschen Sie einfach die Dateien oder benennen Sie sie um.

z.B. 

$ git pull
Enter passphrase for key '/c/Users/PC983/.ssh/id_rsa':
error: Your local changes to the following files would be overwritten by merge:
        ajax/productPrice.php
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
        ajax/product.php
Please move or remove them before you merge.
Aborting
Updating a04cbe7a..6aa8ead5

Ich musste ajax/product.php und ajax/produtPrice.php umbenennen/löschen.

Keine Sorge, git pull bringt sie zurück. Ich empfehle Ihnen, sie umzubenennen, anstatt sie zu löschen, da Sie möglicherweise einige Änderungen verlieren.

Wenn dies nicht hilft, müssen Sie den gesamten Zweig löschen und erneut erstellen und dann git pull Origin remotebranch

0
Black

Löschen Sie .gitignore file aus appname/gen/, um dieses Problem zu lösen.

0
vishnuc156

Um die geänderten Dateien zu speichern und den geänderten Inhalt später zu verwenden, habe ich diesen Fehler gefunden, während ich versuche, einen Zweig auszuchecken und beim Versuch, die Datenbank zu verstecken. Versuchen Sie Git stash 

git stash

Ich ging einfach zum Dateisystem und löschte die Datei direkt, fuhr dann mit git Checkout fort und es funktionierte.

Ich hatte das Problem mehrmals aufgetreten und es könnte mit Entwicklern zusammenhängen, die löschen, drücken, erneut hinzufügen, drücken oder etwas Ähnliches.

0
Phil Carter