Es ist möglich, eine Liste der geänderten Dateien zwischen zwei Commits zu erhalten. So etwas wie comparison between two commits in Web-Version, aber mit GitHub Api.GitHub API - wie 2 Commits zu vergleichen
Antwort
Die offizielle Vergleich API begehen ist Compare two commits:
GET /repos/:owner/:repo/compare/:base...:head
Beide
:base
und:head
können entweder Zweig Namen sein: Repo oder Zweignamen in anderen Repositories im gleichen Netzwerk wie:repo
. Für den letzteren Fall, verwenden Sie das Formatuser:branch
:
GET /repos/:owner/:repo/compare/user1:branchname...user2:branchname
Beachten Sie, dass Sie Tags als auch nutzen können.
Zum Beispiel:
https://api.github.com/repos/git/git/compare/v2.2.0-rc1...v2.2.0-rc2
Beachten Sie die '...
', nicht '..
' zwischen den beiden Tags.
Und Sie müssen zuerst das älteste Tag haben, dann das neuere Tag.
, die einen Status gibt:
ABER
"files": [
{
"sha": "bbcd538c8e72b8c175046e27cc8f907076331401",
"filename": "file1.txt",
"status": "added",
"additions": 103,
"deletions": 21,
"changes": 124,
"blob_url": "https://github.com/octocat/Hello-World/blob/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt",
"raw_url": "https://github.com/octocat/Hello-World/raw/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt",
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/file1.txt?ref=6dcb09b5b57875f334f61aebed695e2e4193db5e",
"patch": "@@ -132,7 +132,7 @@ module Test @@ -1000,7 +1000,7 @@ module Test"
}
]
:
Die Antwort beinhaltet eine
"status": "behind", "ahead_by": 1, "behind_by": 2, "total_commits": 1,
Und für jede verpflichten, Informationen über die Dateien Vergleich von bis zu 250 Commits. Wenn Sie mit einem größeren Festschreibungsbereich arbeiten, können Sie die Commit List API verwenden, um alle Festlegungen in dem Bereich aufzuzählen.
Für Vergleiche mit extrem großen Diffs erhalten Sie möglicherweise eine Fehlerreaktion, die darauf hinweist, dass der Vergleich zu lange gedauert hat. Sie können diesen Fehler normalerweise beheben, indem Sie einen kleineren Festschreibungsbereich verwenden.
Untersuchung Antworten mit der offiziellen API kommt, kann man eine kaum erwähnt Weg finden diffs von Github zu bekommen. Versuchen Sie folgendes:
wget -H 'Accept: application/vnd.github.v3.diff' \
http://github.com/github/linguist/compare/96d29b76...a20631af.diff
wget -H 'Accept: application/vnd.github.v3.diff' \
http://github.com/github/linguist/compare/a20631af...96d29b76.diff
Dies ist der Link als Beispiel zur Verfügung gestellt, mit .diff
angehängt. Und der umgekehrte Unterschied von demselben.
Die angegebene Kopfzeile stellt sicher, dass die Anfrage von der Github v3 API gehandhabt wird. Das ist derzeit die Standardeinstellung, kann sich aber in Zukunft ändern. Siehe Media Types.
Warum zwei Downloads?
Github dient nur lineare Diffs von älteren zu neueren Versionen. Wenn das angeforderte Diff tatsächlich linear ist und von einer älteren zu einer neueren Version, ist der zweite Download leer.
Wenn das angeforderte Diff linear ist, aber von einer neueren zu einer älteren Version, ist der erste Download leer. Stattdessen ist das ganze Diff im zweiten Download. Je nachdem, was man erreichen möchte, kann man es normalerweise auf die neuere Version anwenden oder es auf die ältere Version umkehren (patch -R
).
Wenn zwischen dem Paar angeforderter Commits keine lineare Beziehung besteht, werden beide Downloads mit Inhalten ungleich null beantwortet. Eine von der common anchestor zum ersten Commit und eine andere, umgekehrte von diesem gemeinsamen anchestor zum anderen commit. Wenn man eine Differenz normal und die andere umgekehrt anwendet, ergibt sich, was die Ausgabe von git diff 96d29b76..a20631af
auch ergibt.
Soweit ich sagen kann, unterliegen diese Roh-Diffs nicht den API-Beschränkungen von Github. Anfragen nach 540 Commits mit 1002 Dateiänderungen verliefen einwandfrei.
Hinweis: Man kann auch .patch
statt .diff
anhängen. Dann erhält man immer noch eine große Datei, aber eine Reihe von individuellen Patches für jedes Commit in dieser Datei.
- 1. Kann Commits/Pushs zu Github automatisiert werden?
- 2. Kann Commits nicht zu GitHub schieben
- 3. Github commits und Pull-Anfragen
- 4. Löschen eines Commits in GitHub
- 5. Wie bekomme ich alle öffentlichen Github-Commits eines Benutzers?
- 6. möchte mehrere Commits in GitHub Squash
- 7. PMD Xpath, wie zu vergleichen 2 @Image?
- 8. Wie 2 Strings alphabetisch zu vergleichen
- 9. Signieren eines Pushed unsigned Commits für GitHub
- 10. Github Repo zeigt die letzten Commits nicht
- 11. Github API-Integration in einer App
- 12. GitHub - Push-Commits entfernen, ohne das lokale Repository zu beeinflussen
- 13. Ist es möglich, den Commits-Verlauf für eine Datei in github api zu erhalten?
- 14. Git - Vergleichen Commits auf verschiedenen Zweigen
- 15. Wie synchronisiert man unsynchrone Commits im GitHub Windows Client?
- 16. Wie können Sie unsynchrone Commits in GitHub für Windows entfernen?
- 17. Git: Commits In der Geschichte, die waren 2 Commits früher
- 18. Wie bekomme ich die Anzahl der Commits zwischen 2 Git-Tags mit octokit.net?
- 19. bekommen alle GitHub Benutzer über Github-api
- 20. Protokollverletzung mit Github api
- 21. API-Schlüsselverschlüsselung für Github?
- 22. Wie klone ich ein gesamtes GitHub-Repository (commits, issues, wiki, everything) an eine GitHub-Organisation
- 23. Github zeigt (Entwicklung) Zweig hinter Master von x commits
- 24. Wie verwende ich GitHub V3 API, um Commit Count für ein Repo zu erhalten?
- 25. Wie nach Code in GitHub mit GitHub API suchen?
- 26. GitHub API populäre Repos
- 27. vergleichen 2 Satz Objektwert
- 28. Github API und Access-Control-Allow-Origin
- 29. Vergleichen Sie 2 Entitäten
- 30. GitHub vergleichen Ansicht für aktuelle Versionen der Filialen
Ich weiß das, aber: base und: head können Zweignamen sein, aber ich möchte nicht 2 Zweige Köpfe vergleichen. Ich möchte 2 spezifische Commits als Web-Beispiel vergleichen, das ich gab. – Unlink
@Unlink dann bietet die API das nicht. Was Sie versuchen können, ist das Erstellen von Verzweigungen für diese Commits, aber das würde immer noch alle Commits zwischen den beiden vergleichen (Sie könnten jedoch Ihre beiden Commits isolieren) – VonC
Und was, wenn ein Tag auf dieser Grundlage erstellt, kann es helfen? – Unlink