Machen Sie git, um automatisch generierte Dateien zu verfolgen, aber ignorieren von diff

8

Ich habe ein Repository mit Quellcode (meist *.php , *.js ) und Dokumentationsdateien (meist *.md , *.html , *.svg ), die automatisch aus Annotationen generiert werden. Die gesamte Dokumentation befindet sich in einem separaten Unterverzeichnis ( ./doc ) im Repository.

Auf der einen Seite möchte ich, dass die Dokumentation über git verfolgt wird, und ich möchte, dass sie an den Server übergeben / gepusht wird, wenn sie sich ändert, weil es leicht zu durchblättern ist -Datum Dokumentation, die von GitHub schön angezeigt wird.

Auf der anderen Seite ist es sehr ärgerlich, die automatisch generierten Dateien während einer Ausgabe des Befehls git diff zu sehen. Wenn z. B. eine Zeile Quellcode zwischen zwei Commits geändert wird, gibt %%_Code% nicht nur diese einzelne Zeile aus, sondern auch die gesamte automatisch generierte Dokumentation, da sich die gesamte automatisch generierte Dokumentation geändert hat.

Gibt es eine Möglichkeit, git dazu zu bringen, die Dokumentation zu verfolgen, aber standardmäßig von git diff auszuschließen? Ich wäre auch in Ordnung für mich, wenn git alle Dokumentationsdateien als Blobs betrachten würde. Dann würde zumindest diff nur behaupten, dass sich die Dateien geändert haben, aber nicht die gesamte Dokumentation Zeile-für-Zeile anzeigen.

    
user2690527 28.06.2015, 12:58
quelle

2 Antworten

1

Ich habe zunächst eine Lösung vorgeschlagen, die eine lokale Änderung beinhaltet (Aktualisierung des Indexes ( git update-index ) von doc/ files, um kein diff zu erkennen)

%Vor%

Aber das OP kommentiert es richtig:

  

Nach --assume-unchanged werden die Dateien nicht in ein Commit einbezogen, bis ich die Änderung am Index über --no-assume-unchanged rückgängig mache.
  Daher muss ich sicherstellen, dass beide direkt vor und nach jedem git diff aufgerufen werden.

     

Ich habe nach einer Lösung gesucht, die eher "permanent" ist. Eine Lösung, die für jeden Benutzer funktioniert, der das Repository ohne besondere Aufmerksamkeit auscheckt und das auch in Github funktioniert.
  Im Moment kann ich die "show history / difference" -Funktion von Github nicht wirklich nutzen, da Github nach der Verarbeitung einer bestimmten Anzahl von Dateien aufhört, die Unterschiede anzuzeigen, und leider nur den irrelevanten Teil der Änderungen in der automatisch generierten Dokumentation zeigt, aber nicht in den eigentlich wichtigen Dateien

Ich stimme zu.
Dann ist eine weitere Option, all diese doc/ -Dateien in ihrem eigenen Repo zu isolieren:

Auf diese Weise (nach dem Update eines Git-Submoduls --init) können Sie in Ihrem Hauptrepo arbeiten und Dokumente erstellen, wann immer Sie wollen: Ein git-diff zeigt nur das diff des Haupt-Repo, nicht die anderen in (das Submodul) doc/ .

Aber wenn Sie Ihren Hauptrepo pushen, müssen Sie zunächst doc/ (das Submodul) hinzufügen, committen und einschieben, bevor Sie das Hauptrepo hinzufügen, festschreiben und schieben.
Das liegt daran, dass doc/ vom Hauptrepository als gitlink (ein SHA1) angesehen wird. spezieller Eintrag im Index ), der sich ändert, wenn Sie in doc/ festschreiben, und der vom Hauptrepo referenziert es.

    
VonC 28.06.2015, 13:10
quelle
7
  

Ich wäre auch in Ordnung für mich, wenn git die gesamte Dokumentation in Betracht ziehen würde   Dateien als Blobs.

Sie können Attribute dafür verwenden. Erstellen Sie einfach eine Datei doc/.gitattributes , die * -diff enthält, und alles unter diesem Pfad wird als Binärdatei für Diffs behandelt. Siehe man gitattributes für Details.

Sie können git diff --text verwenden, um das zu überschreiben, wenn Sie ihre Diffs sehen möchten.

    
Josh Stone 10.09.2015 20:35
quelle