2016-07-18 2 views
1

私には2つのコミットがあります。 This oneおよびthis one。私はOctokitを使用しています。2つの別々のコミットの「コンテンツ」がGH APIと同じであるのはなぜですか?

私は主に両方のコミットでファイルactiverecord/lib/active_record/associations.rbに関連する差分に興味があります。

あなたがここに見ることができるように私はコレクションにこれらのコミットの両方を持っている:それらシャスの両方が、私は上記の投稿のリンクにシャスに対応

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

注意を、との両方がよりすなわち、異なる(ユニークですお互い)。

しかし、これらのコミットのそれぞれについて、特に関心のあるパスに関連するコンテンツを取得すると、両方のコミットで同じ結果が得られます。

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" 

は、その後、私は二コミットのために同じことをして、私は次を得る:

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

注シャスは同じです。

c1c2の両方の内容も同じです。あなたはそれらを次のように見ることができます:

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 

私は簡潔さのためにcontentを切り捨てました。

どうしてですか?上部に投稿した両方のリンクを手動で見て、associations.rbコードまでスクロールすると、そのファイルに変更が加えられていることがわかります。

なぜ、contentは両方のコミットが同一であるのですか?

混乱しています。

編集1

ティムさんのコメントに応答して、多分コミットは桜採取し、彼らが実際に同一であり、私は2つの以上のコミット(this one & this one)を行っている、まだ結果は同じであると思われること:

[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

私はOctokitに慣れていないんだけど、おそらくあなたが同じコミットを指している2つの支店を持っていますか?あるいは、コミットがチェリーピックされたかもしれないので、あなたは2つのブランチ上で(ほとんど)同一の内容と思われます。 –

+0

@TimBiegeleisen彼らは同一であるように見えるかもしれませんが、そうではないことを証明するためにリンクを最初に含めました。どちらの場合も、同じ演習を2つのコミットでもう一度実行して、その点を説明します。参照するために質問を更新します。 – marcamillion

+0

これはOktokitの理解に欠けていることです。例えば、Gitは地球が太陽に旋回する可能性が低い同じSHA-1ハッシュで2つのコミットを作成しています。 –

答えて

2

GitHub API Documentationあなたがshaを使用しているのに対し、あなたは、refオプションで希望コミット/ブランチ/タグを参照しなければならないことを示唆しています。

したがって、正しいコードはこのようになります。

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

ZOMGの男....お金!どうもありがとう。あなたは、絶対に正しい。それはそれだった。簡単な修正。どうもありがとう! – marcamillion

+0

あなたもこのチャイムにチャイムすることができるかもしれませんか? http://stackoverflow.com/questions/38417195/can-i-get-the-diff-data-for-one-file-between-two-commits-via-the-gh-api – marcamillion

関連する問題