Ich habe die Dokumentation dazu mehrmals gelesen und verstehe die Unterschiede zwischen diesen verschiedenen Befehlen immer noch nicht vollständig. Vielleicht bin ich es nur, aber die Dokumentation könnte klarer sein:
http://git-scm.com/docs/gitignore
https://help.github.com/articles/ignoring-files
Darüber hinaus scheinen viele Kommentare zu diesem Thema die Wörter "indexiert", "engagiert", "verfolgt" etwas locker zu verwenden, was die Unterschiede zwischen diesen drei weniger deutlich macht.
Mein derzeitiges (zugegebenermaßen begrenztes) Verständnis:
Übereinstimmende Dateien werden in
.gitignore
Zukunft nicht mehr verfolgt. (Obwohl sie möglicherweise zuvor verfolgt wurden.) Dies bedeutet, dass sie niemals in einer zukünftigengit status
Liste als geändert angezeigt werden . Zukünftige Änderungen werden jedoch weiterhin mit Remote-Repos synchronisiert . Mit anderen Worten, die Dateien sind immer noch "indiziert", aber sie werden nicht "verfolgt". Da sich eine.gitignore
Datei im Projektverzeichnis befindet, kann die Datei selbst versioniert werden.Übereinstimmende Dateien
.git/info/exclude
werden ebenfalls nicht "verfolgt". Darüber hinaus werden diese Dateien niemals remote synchronisiert und daher von keinem anderen Benutzer in irgendeiner Form gesehen. Diese Dateien sollten Dateien sein, die für den Editor oder den Workflow eines einzelnen Benutzers spezifisch sind. Da es sich im.git
Verzeichnis befindet, kann dieexclude
Datei selbst nicht versioniert werden.Dateien, die darauf
assume-unchanged
ausgeführt wurden, werden auch nicht ingit status
oder angezeigtgit diff
. Dies scheint insofern ähnlich zu seinexclude
, als diese Dateien weder "indiziert" noch "verfolgt" werden. Die letzte Version der Datei, die zuvor festgeschrieben wurde,assume-unchanged
bleibt jedoch für alle Benutzer im Repo sichtbar.
Meine Fragen:
Ist die obige Interpretation korrekt? Bitte korrigieren Sie mich.
Wenn eine Datei bereits in einem Commit war, was ist der funktionale Unterschied zwischen dem Abgleichen
.exclude
und dem Ausführenassume-unchanged
darauf? Warum sollte man einen Ansatz einem anderen vorziehen?Mein grundlegender Anwendungsfall ist, dass ich vermeiden möchte, Unterschiede in kompilierten Dateien zu sortieren, diese kompilierten Dateien jedoch weiterhin mit den Quelldateien synchronisieren möchte. Wird eine
gitignore
D-Datei noch gepusht? Wenn nicht, wie wird die endgültige Bereitstellung der kompilierten Dateien verwaltet?
Vielen Dank im Voraus für jede Hilfe.
marking
und es wurde "machen". Alles was es bedeutet ist, dass es ein Flag gibt, das git pro Datei behält, und dieses Flag kann mit diesem Installationsbefehl gesetzt und zurückgesetzt werden.Zusätzlich zu Junio Hamano der Antwort , Git 2.3.0 ( im Februar 2015) jetzt entfernt von der
gitignore
DokumentationSiehe Commit 936d2c9 von Michael J Gruber (
mjg
) :quelle
Hoffentlich werden nicht zu viele Informationsquellen nachverfolgt, indiziert und lose gebunden, da sie alle unterschiedlich und aussagekräftig sind.
git add
einen Befehl oder einen gleichwertigen Befehl für die Datei. Die Datei wird nachverfolgt und kann auch festgeschrieben werden.Nun an die Grenze meines eigenen Wissens. Ich bin mir bei dieser Definition nicht sicher, aber das ist mein Verständnis. froh darüber korrigiert zu werden:
Der Index wird auch als Cache oder Staging-Bereich bezeichnet.
Weiter zu Ihrer Hauptfrage. .git / info / exclude ist dasselbe wie .gitignore, nur eine niedrigere Priorität und nicht im Repository (also nicht festgeschrieben und freigegeben). Beides wirkt sich nicht auf bereits verfolgte Dateien aus. Beide betreffen Dateien, die derzeit nicht verfolgt werden. Aktualisieren von .gitignore nach
git add
odergit commit
zu spät; git verfolgt die Datei bereits und .gitignore hat keinen Einfluss darauf.Angenommen, unverändert betrifft nur nachverfolgte Dateien und ist daher vollständig von .gitignore getrennt. Es kann vorübergehend so tun, als ob die Datei nicht verfolgt und ignoriert wird (aber es muss und kann auch nichts anderes als normales Verhalten tun). Wie in anderen Antworten erwähnt, wird dies nicht zum Ignorieren von Änderungen an Dateien verwendet, sondern nur zum potenziellen Vermeiden von Dateisystemoperationen auf langsamen Dateisystemen.
Betreff: Punkt 3: Sie sollten git keine kompilierten Dateien hinzufügen. Kompilieren Sie Ihre Dateien in ein anderes Verzeichnis, in dem sich Ihre Quelle befindet, und ignorieren Sie das gesamte Verzeichnis. Bündeln Sie Ihre kompilierten Dateien in einer Bibliothek und fügen Sie sie einem Artefakt-Repository hinzu, aber fügen Sie sie nicht in git ein.
quelle
Ich denke, der Unterschied zwischen .gitignore und Annahme-unverändert ist
.gitignore kann mit anderen Personen im Team geteilt werden, muss jedoch für jedes Mitglied einzeln konfiguriert werden.
Angenommen, unverändert sind verfolgte Dateien. Es ist sehr nützlich, wenn eine Datei Konfigurationsinformationen enthält, diese jedoch vom Team geändert werden können. Wenn eine Datei als unverändert angenommen, aber von anderen Personen geändert und in das Remote-Repository verschoben wird, erinnert git daran, wenn versucht wird, von der Remote zu ziehen.
quelle