2016-07-18 15 views
1

Ich habe zwei Commits. This one und this one. Ich benutze Octokit.Warum ist der "Inhalt" für zwei separate Commits identisch mit der GH-API?

Ich bin in erster Linie an den Diffs im Zusammenhang mit der Datei activerecord/lib/active_record/associations.rb in beiden Commits interessiert.

Ich habe diese beiden Commits in einer Sammlung, wie Sie hier sehen können:

[284] pry(main)> commits2.first.sha 
=> "c6e01f5b60c4864f0e92149d1e81077519f503d5" 
[285] pry(main)> commits2.second.sha 
=> "581f12b7b18a6e5205bfabb814f6e9997bf92be8" 

Hinweis beide dieser Schas an die Schas entsprechen in den Links, die ich oben geschrieben, und beide sind einzigartig (dh anders als gegenseitig).

Aber wenn ich den Inhalt für jeden dieser Commits, speziell in Bezug auf den Pfad, der mich interessiert, bekomme ich das gleiche Ergebnis für beide Commits.

pry(main)> repo 
=> "rails/rails" 
pry(main)> path 
=> "activerecord/lib/active_record/associations.rb" 
c1 = client.contents(repo, path: path, sha: commits2.first.sha) 
pry(main)> c1.sha 
=> "3729e22e6423348aa9282cd17b49c09793ca3a6f" 

Dann mache ich die gleiche Sache für die zweite begehen, erhalte ich folgendes: sind

pry(main)> c2 = client.contents(repo, path: path, sha: commits2.second.sha) 
pry(main)> c2.sha 
=> "3729e22e6423348aa9282cd17b49c09793ca3a6f" 

Beachten Sie die Schas identisch.

Der Inhalt für beide c1 und c2 sind ebenfalls identisch. Sie können sie unten sehen:

pry(main)> c1 
=> {:name=>"associations.rb", 
:path=>"activerecord/lib/active_record/associations.rb", 
:sha=>"3729e22e6423348aa9282cd17b49c09793ca3a6f", 
:size=>94931, 
:url=> 
    "https://api.github.com/repos/rails/rails/contents/activerecord/lib/active_record/associations.rb?ref=master", 
:html_url=> 
    "https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations.rb", 
:git_url=> 
    "https://api.github.com/repos/rails/rails/git/blobs/3729e22e6423348aa9282cd17b49c09793ca3a6f", 
:download_url=> 
    "https://raw.githubusercontent.com/rails/rails/master/activerecord/lib/active_record/associations.rb", 
:type=>"file", 
:content=> 
    "cmVxdWlyZSAnYWN0aXZlX3N1cHBvcnQvY29yZV9leHQvZW51bWVyYWJsZScK\ncmVxdWlyZSAnYWN0aXZlX3N1cHBvcnQvY29yZV9leHQvc3RyaW5nL2NvbnZl\ncnNpb25zJwpyZXF1aXJlICdhY3RpdmVfc3VwcG9ydC9jb3JlX2V4dC9tb2R1\nbGUvcmVtb3ZlX21ldGhvZCcKcmVxdWlyZSAnYWN0aXZlX3JlY29yZC9lcnJv\ncnMnCgptb2R1bGUgQWN0aXZlUmVjb3JkCiAgY2xhc3MgQXNzb2NpYXRpb25O\nb3RGb3VuZEVycm9yIDwgQ29uZmlndXJhdGlvbkVycm9yICM6bm9kb2M6CiAg\nICBkZWYgaW5pdGlhbGl6ZShyZWNvcmQgPSBua 

ich abgeschnitten den content für Brevity.

Warum passiert das? Wenn Sie die beiden Links, die ich oben veröffentlicht habe, manuell ansehen und nach unten zum Code associations.rb scrollen, werden beide Änderungen an dieser Datei angezeigt.

Warum also würde die content für BEIDE commits identisch sein?

So verwirrt: |

Edit 1

Als Reaktion auf Tims Kommentar, der vielleicht die Festschreibungen waren Kirsche gepflückt und sie sind in der Tat identisch, ich habe zwei mehr getan Commits (this one & this one), doch das Ergebnis scheint das gleiche zu sein :

[299] pry(main)> commits2.third.html_url 
=> "https://github.com/rails/rails/commit/1d2c6ee8f3f7e4b6881f30e6b53582738c2b3ace" 
[300] pry(main)> commits2.third.sha 
=> "1d2c6ee8f3f7e4b6881f30e6b53582738c2b3ace" 
[301] pry(main)> commits2.fourth.html_url 
=> "https://github.com/rails/rails/commit/3c01e01ded4e8e87d48e844881c88f6e47cebdf0" 
[302] pry(main)> commits2.fourth.sha 
=> "3c01e01ded4e8e87d48e844881c88f6e47cebdf0" 

pry(main)> c3 = client.contents(repo, path: path, sha: commits2.third.sha) 
pry(main)> c3.sha 
=> "3729e22e6423348aa9282cd17b49c09793ca3a6f" 

pry(main)> c4 = client.contents(repo, path: path, sha: commits2.fourth.sha) 
pry(main)> c4.sha 
=> "3729e22e6423348aa9282cd17b49c09793ca3a6f" 
+0

Ich bin nicht vertraut mit Octokit, aber vielleicht haben Sie zwei Zweige, die auf die gleiche verweisen begehen? Alternativ wurde vielleicht ein Commit ausgewählt, und so scheint Ihnen der Inhalt in zwei Zweigen (fast) identisch zu sein. –

+0

@TimBiegeleisen Es scheint, dass sie identisch sind, aber deshalb habe ich die Links anfangs eingefügt, um zu beweisen, dass sie es nicht sind. In jedem Fall habe ich die gleiche Übung mit zwei weiteren Commits wiederholt, um den Punkt zu verdeutlichen. Aktualisieren Sie die Frage, um zu sehen. – marcamillion

+0

Dies ist fast sicher ein Mangel in unserem Verständnis von Oktokit, anstatt zum Beispiel Git passiert, um zwei Commits mit dem gleichen SHA-1-Hash zu erstellen, die weniger wahrscheinlich ist als die Erde in die Sonne spiralförmig. –

Antwort

2

GitHub API Documentation schlägt vor, dass Sie auf die gewünschte commit/branch/Tag mit der ref Option beziehen müssen, während Sie sha verwenden.

daher der richtige Code wird dies:

c1 = client.contents(repo, path: path, ref: commits2.first.sha) 
c2 = client.contents(repo, path: path, ref: commits2.second.sha) 
+0

ZOMG Kumpel .... GELD! Vielen Dank. Du liegst absolut richtig. Das war's. Eine einfache Lösung. Vielen Dank! – marcamillion

+0

Gibt es eine Chance, dass Sie auch hier reinhören können? http://stackoverflow.com/questions/38417195/can-i-get-the-diff-data-for-one-file-between-two-commits-via-the-gh-api – marcamillion