Git-Repository ignoriert alle DLLs

88

Titel sagt alles. Ich versuche, meine NuGet-Pakete zum Repository hinzuzufügen. Alles außer den DLL-Dateien wird erkannt.

Die Gitignore-Datei enthält keine Verweise auf * .dll. Die DLL-Dateien werden nicht erkannt, wenn sie sich irgendwo im gesamten Repository befinden. info / exclude ist ebenfalls leer.

Ich habe auch das Repository (Dateisystem zu Dateisystem im Gegensatz von Remote zu Dateisystem) ohne Glück geklont. Dieses Problem tritt auch auf zwei verschiedenen Computern auf.

Ich könnte die DLL-Dateien manuell hinzufügen, aber sie sollten verfolgt werden. Warum werden sie nicht verfolgt?

Paul Knopf
quelle
25
Was git config --get core.excludesfilesagt das aus?
Antony Hatchkins
2
Außerdem ist es im Allgemeinen keine gute Idee, git zum Verfolgen von Binärdateien zu verwenden, da git Deltas zwischen Revisionen nicht effizient berechnen kann, sodass das Beibehalten aller Versionen eine Verschwendung von Speicherplatz ist. Wenn DLLs im laufenden Betrieb generiert werden, ist es besser, sie in git einfach zu ignorieren. Wenn dies nicht der Fall ist, ist es besser, einen anderen Synchronisierungsmechanismus zu verwenden (z. B. rsync).
Antony Hatchkins
Dies sind NuGet-Pakete, die ich zu git hinzufügen möchte. Ich verwende nicht die "Package Restore" -Funktionalität von NuGet, daher muss der gesamte Paketordner eingecheckt sein.
Paul Knopf

Antworten:

121

Haben Sie entweder ~/.gitignore_globaloder ~/.gitignorein Ihrem Home-Verzeichnis, in dem auch diese Dateimuster aufgelistet sein könnten?

Siehe https://help.github.com/articles/ignoring-files

Stuart M.
quelle
6
Da er mit DLL-Dateien arbeitet, befindet er sich auf einer Windows-Plattform. ~ Bedeutet also $ HOMEDRIVE $ HOMEPATH unter Windows 7
Antony Hatchkins
9
Dies stellte sich als Problem heraus. Ich habe diese globale Ignorierdatei jedoch nicht hinzugefügt. Gibt es einen Grund, warum es einfach aus dem Nichts auftauchen würde? Jetzt, wo ich darüber nachdenke, habe ich kürzlich SourceTree (von Atlassian) installiert. Vielleicht ist es der Schuldige?
Paul Knopf
6
Ich hatte das gleiche Problem, ich habe vorher auch SourceTree installiert. Ich denke, es ist eine gute Vermutung, dass SourceTree die globale Ignorierdatei hinzugefügt hat, da sie in der Vergangenheit funktioniert hat.
Andreas Krebs
8
Edit: OK, es wurde von SourceTree Link
Andreas Krebs
31
Ich musste rennen git check-ignore, um herauszufinden, wo sich die Datei befand. Fond es bei ~ / Documents / gitignore_global.txt
Matt Canty
96

Wenn Sie SourceTree und die Standardeinstellung verwenden, werden standardmäßig alle DLLs ignoriert ... Tools => Options => Git, dann "Edit File" ... fügen Sie ein "#" vor .dll => "# .dll" hinzu. . speichern und schließen.

Öffnen Sie dann für Windows Explorer in Ihrem Paketordner ein GitBash-Terminal und geben Sie "git add" ein. und lassen Sie es funktionieren, warten Sie eine Sekunde in SourceTree und alle fehlenden Paket-DLLs werden angezeigt, damit Sie sie festschreiben und pushen können.

KevinB
quelle
13
Richtige Antwort für SourceTree-Benutzer;)
jmpcm
Wusste von einer globalen Ignorierliste, konnte sie nicht in der GUI finden. Danke!
Christoph
Tools => Options => Git / Mercurial Global Ignore List ... Wenn Sie keine haben, können Sie eine erstellen und dort darauf verweisen.
KevinB
2
Dateispeicherort: ~ / Documents / gitignore_global.txt
James McCormack
Dies funktionierte für den Quellbaum, aber wie für das visuelle Studio waren die Ignorierungen nicht in meinem Gitignore. Alle, die ich
Quellbaum
11

Ich könnte die DLL-Dateien manuell hinzufügen, aber sie sollten verfolgt werden. Warum werden sie nicht verfolgt?

Nein, sie sollten nicht verfolgt werden, es sei denn, Sie haben sie hinzugefügt. Es werden nur Dateien verfolgt, die bereits hinzugefügt und festgeschrieben wurden. das ist was "verfolgt" bedeutet.

Versuchen Sie manuell eine von ihnen Zugabe über git addund es wird sagen , warum es ihnen ist zu ignorieren, und prompt Sie verwenden git add -fdie Datei sowieso hinzuzufügen.

meagar
quelle
Ich habe ein "git add '/ packages'" gemacht und es hat die .dlls nicht erkannt. Ich habe dann -f verwendet und es hinzugefügt. Ich habe das Problem gefunden. "* .dll" wurde in meiner globalen Liste ignoriert. Keine Ahnung, woher diese globale Ignoranz kam.
Paul Knopf
2

Sie müssen git explizit anweisen, neue Dateien zu verfolgen.

  1. Ausführen git add filename, um die Datei zum Git-Index hinzuzufügen.

  2. Ausführen git commit, um Änderungen in Ihrem Index festzuschreiben.

git status sollte auch die Liste der nicht verfolgten Dateien und Verzeichnisse anzeigen.

Wenn Sie alle Dateien im Repo auflisten möchten, die von gitignore ignoriert werden, können Sie Folgendes ausführen:

git ls-files . --ignored --exclude-standard --others

Wenn Sie alle nicht verfolgten Dateien im Repo auflisten möchten:

git ls-files . --exclude-standard --others
Tuxdude
quelle
2
Ich musste "git add -f", um die Dateien zu verfolgen, die tatsächlich ignoriert wurden. Es stellte sich heraus, dass es sich um einen Eintrag in der globalen Ignorierdatei handelte, den eine Anwendung unwissentlich für mich dort abgelegt hat.
Paul Knopf
2

Ich hatte ein ähnliches Problem. Ich kann keine DLL-Datei aus dem Paketverzeichnis zu meinem Git hinzufügen, dann habe ich die Datei gitignore_global.txt gefunden, da Sourcetree diese Datei automatisch als globale Git-Ignoriereinstellung hinzugefügt hat. Ich habe * .dll aus der Datei gitignore_global.txt entfernt und es funktioniert gut für mich.

Speicherort der Datei gitignore_global.txt wie unten

C: \ Users \ XXXX \ Documents \ gitignore_global.txt oder Sie können es auf der Registerkarte TOOL => OPTION => GIT des Quellbaums herausfinden und die globale Ignorierliste herausfinden

Niraj Trivedi
quelle
1

In meinem Fall gab es keine DLL-Referenzen in der Gitignore-Datei, und ich hatte keine globale Datei. Im Unterverzeichnis .git habe ich jedoch eine Datei mit dem Namen ms-persist.xml gefunden. Ich habe alle Instanzen von Visual Studio geschlossen und dann meine fehlenden DLLs manuell zu dieser Datei hinzugefügt. Als ich Visual Studio wieder öffnete, wurde angezeigt, dass die DLLs eingecheckt werden mussten. Ich habe sie eingecheckt und jetzt bin ich golden ...

Curtis
quelle
0

Sie haben .gitignoreirgendwo eine globale .gitignoreDatei oder weitere Dateien in Unterverzeichnissen - relativ zum Stammverzeichnis Ihres Projekts.

Unter Linux-Systemen und MacOS ist das globale Git-Ignorieren höchstwahrscheinlich bei Ihnen zu Hause ~/

~/.gitignore_global

Unter Windows befindet es sich wahrscheinlich in Ihrem Benutzerverzeichnis. Entweder Ihr lokaler Benutzer (was Sie durch Eingabe ECHO %USERPROFILE%oder whoamiüber die Befehlszeile herausfinden können .

Wenn es nicht da ist, dann ist sicherlich .gitconfigstattdessen ein vorhanden. Suchen Sie hier nach dem Speicherort des Gitignores (z. B. dem DocumentsOrdner des Benutzers ).

Bearbeiten : Verwenden Sie git config --list --show-origindiese Option , um Details zu den beitragenden Git-Einstellungen und den entsprechenden Dateispeicherorten abzurufen.

Lorenz Lo Sauer
quelle
0

Ich weiß, dass diese Frage sehr alt ist, aber ich füge sie für andere hinzu, die diese Frage möglicherweise in Zukunft besuchen werden. Sie können Ihre globale Ignorierdatei wie oben beschrieben ändern, dies wirkt sich jedoch auf ALLE Ihre Git-Repos aus. Wenn Sie stattdessen einen detaillierteren Ansatz wünschen, können Sie entweder bestimmte DLLs oder bestimmte Ordner in Ihren individuellen Projekt-Gitignores ausschließen. Dies überschreibt alle Einstellungen zum Ignorieren und erzwingt, dass die Dateien von git erkannt und verarbeitet werden. Ich denke, das ist ein besserer Ansatz.

.gitignore (für Ihr spezielles Projekt)

# Custom ignores
!*.dll
# or
!My.specific.dll

# rest of .gitignore
jp36
quelle