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.