ठीक है, यह पता लगाने के बाद कि आपको जो चाहिए वह प्रत्येक फ़ाइल के लिए नवीनतम प्रतिबद्ध संदेश है, यहां आप क्या कर सकते हैं।
सबसे पहले, अपने भंडार में फ़ाइलों की सूची प्राप्त करें।
1) शाखा के fetch the reference object है कि आप के लिए फ़ाइलों को सूचीबद्ध करना चाहते हैं: ऐसा करने के लिए, आप की जरूरत है
GET https://api.github.com/repos/:owner/:repo/git/refs/heads/:branch
आप शायद मास्टर शाखा चाहते हैं, इसलिए इस अनुरोध को आप करेंगे का एक उदाहरण है बनाने:
https://api.github.com/repos/izuzak/pmrpc/git/refs/heads/master
प्रतिक्रिया आप इस तरह दिखेगा मिल जाएगा:
{
"ref": "refs/heads/master",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/refs/heads/master",
"object": {
"sha": "fd6973f430a3367ad718ff049f1b075843913d6f",
"type": "commit",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/commits/fd6973f430a3367ad718ff049f1b075843913d6f"
}
}
2) fetch the commit object संदर्भ बिंदु के लिए, प्रतिक्रिया पिछले चरण में प्राप्त की object.url
संपत्ति का उपयोग कर कि:
GET https://api.github.com/repos/izuzak/pmrpc/git/commits/fd6973f430a3367ad718ff049f1b075843913d6f
प्रतिक्रिया आपको मिल जाएगा इस तरह दिखेगा:
{
"sha": "fd6973f430a3367ad718ff049f1b075843913d6f",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/commits/fd6973f430a3367ad718ff049f1b075843913d6f",
"html_url": "https://github.com/izuzak/pmrpc/commits/fd6973f430a3367ad718ff049f1b075843913d6f",
"author": {
"name": "Ivan Zuzak",
"email": "[email protected]",
"date": "2013-04-09T08:55:45Z"
},
"committer": {
"name": "Ivan Zuzak",
"email": "[email protected]",
"date": "2013-04-09T08:55:45Z"
},
"tree": {
"sha": "f5f5de80f67dd794ffbd4abb855fb7d1a573660e",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/trees/f5f5de80f67dd794ffbd4abb855fb7d1a573660e"
},
"message": "fix typos",
"parents": [
{
"sha": "d3617ae56dda793131e743b2ff394984bbab6ca3",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/commits/d3617ae56dda793131e743b2ff394984bbab6ca3",
"html_url": "https://github.com/izuzak/pmrpc/commits/d3617ae56dda793131e743b2ff394984bbab6ca3"
}
]
}
3) पिछले चरण में प्राप्त प्रतिबद्ध वस्तु के fetch the tree object। पिछले चरण के जवाब में प्रदान की tree.url
लिंक का पालन करके यह कर देगा:
GET https://api.github.com/repos/izuzak/pmrpc/git/trees/f5f5de80f67dd794ffbd4abb855fb7d1a573660e
प्रतिक्रिया इस तरह दिखेगा:
{
"sha": "f5f5de80f67dd794ffbd4abb855fb7d1a573660e",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/trees/f5f5de80f67dd794ffbd4abb855fb7d1a573660e",
"tree": [
{
"mode": "100644",
"type": "blob",
"sha": "726f21a4adec8c24c2fab6cf5b455d094a8b21bf",
"path": "LICENSE.markdown",
"size": 568,
"url": "https://api.github.com/repos/izuzak/pmrpc/git/blobs/726f21a4adec8c24c2fab6cf5b455d094a8b21bf"
},
{
"mode": "100644",
"type": "blob",
"sha": "eb94760b81441b34a73d1b085d9f153ae48b0e63",
"path": "README.markdown",
"size": 5772,
"url": "https://api.github.com/repos/izuzak/pmrpc/git/blobs/eb94760b81441b34a73d1b085d9f153ae48b0e63"
},
{
"mode": "040000",
"type": "tree",
"sha": "2e72b217b8644ce6874cda03387a7ab2d8eee55e",
"path": "examples",
"url": "https://api.github.com/repos/izuzak/pmrpc/git/trees/2e72b217b8644ce6874cda03387a7ab2d8eee55e"
},
{
"mode": "100644",
"type": "blob",
"sha": "64b0dbe4981759c0f9640c8e882c97c7324fc798",
"path": "pmrpc.js",
"size": 24546,
"url": "https://api.github.com/repos/izuzak/pmrpc/git/blobs/64b0dbe4981759c0f9640c8e882c97c7324fc798"
}
]
}
इन सभी फ़ाइलों और भंडार में फ़ोल्डर हैं। ध्यान दें कि फ़ोल्डरों के लिए आपको फ़ोल्डर में फ़ाइलों की सूची प्राप्त करने के लिए फ़ोल्डर पेड़ ऑब्जेक्ट को रिकर्सिव रूप से लाने की आवश्यकता होगी। उपर्युक्त प्रतिक्रिया में, examples
एक फ़ोल्डर है जिसे आप प्रकार की संपत्ति के वृक्ष मूल्य से देख सकते हैं। ,
GET https://api.github.com/repos/izuzak/pmrpc/git/trees/2e72b217b8644ce6874cda03387a7ab2d8eee55e
एक वैकल्पिक दृष्टिकोण सिर्फ एक अनुरोध के साथ (सभी फ़ोल्डर में) सभी फाइलों की सूची प्राप्त करने के लिए है recursive=1
पैरामीटर का उपयोग कर: तो, आप फ़ोल्डर के साथ प्रदान की यूआरएल पर एक और GET अनुरोध में होगा , जैसा कि here वर्णित है। मेरा सुझाव है कि आप इस दृष्टिकोण का उपयोग करें क्योंकि इसे केवल एक ही HTTP अनुरोध की आवश्यकता है।
इसके बाद, अब आप रेपो में फ़ाइलों और फ़ोल्डरों की सूची है, आप get the last commit फ़ाइलें/फ़ोल्डर में से प्रत्येक के लिए बदल जाएगा। ऐसा करने के लिए, इस अनुरोध को
GET https://api.github.com/repos/:user/:repo/commits?path=FILE_OR_FOLDER_PATH
तो, उदाहरण के लिए, इस ऊपर उल्लेख किया examples
फ़ोल्डर के लिए प्रतिबद्ध लाने के लिए एक अनुरोध है:
GET https://api.github.com/repos/izuzak/pmrpc/commits?path=examples
प्रतिक्रिया आपको मिल जाएगा की एक सूची है वस्तु के लिए प्रतिबद्ध है, और आप सिर्फ इतना है कि सूची में पहले वस्तु पर गौर करना चाहिए (आपके द्वारा पिछली बार फ़ाइल के लिए प्रतिबद्ध में रुचि रखते हैं) और commit.message
संपत्ति को पुनः प्राप्त संदेश आपको चाहिए:
[
{
"sha": "3437f015257683a86e3b973b3279754df9ac2b24",
"commit": {
"author": { ... },
"committer": { ... },
"message": "change mode",
"tree": { ... },
"url": "https://api.github.com/repos/izuzak/pmrpc/git/commits/3437f015257683a86e3b973b3279754df9ac2b24",
"comment_count": 0
},
...
},
{
...
}
]
इस मामले में, नवीनतम के लिए संदेश के लिए प्रतिबद्ध है कि फ़ोल्डर examples
है बदल "परिवर्तन मोड।"
तो, मूल रूप से, आप फ़ाइलों की सूची लाने में 3 HTTP अनुरोध बनाने की जरूरत है, और फिर प्रत्येक फ़ाइल और फ़ोल्डर के लिए 1 HTTP अनुरोध। बुरी खबर यह है कि यदि आपके पास बहुत सारी फाइलें हैं - तो आप बहुत सारे HTTP अनुरोध करेंगे। अच्छी खबर यह है कि आप प्रतिक्रियाओं को कैश कर सकते हैं ताकि आप अगर कुछ भी नहीं बदला (अधिक जानकारी के लिए here देखें) अनुरोध करने की जरूरत नहीं है है। इसके अलावा, आप एक बार में सभी के लिए प्रतिबद्ध संदेशों फ़ेच नहीं किया जाएगा, तो आप उन्हें उपयोगकर्ता के रूप में फ़ोल्डर्स के माध्यम से नेविगेट लायेगा (बस GitHub पर के रूप में आप फ़ोल्डरों पर क्लिक करें रूप में)। इस प्रकार आप आसानी से 5000 अनुरोधों की सीमा के भीतर रहने में सक्षम होना चाहिए।
आशा है कि इससे मदद मिलती है! और अगर आपको ऐसा करने का आसान तरीका मिल जाए तो मुझे बताएं :)। मुझे नहीं पता कि यह केवल 1-2 अनुरोधों के साथ इसे प्राप्त करने का एक तरीका है, जो शायद आपको अपेक्षित है।
मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि आप क्या हासिल करना चाहते हैं। क्या आप (1) फ़ाइल के लिए नवीनतम टिप्पणी प्राप्त करना चाहते हैं, इससे कोई फर्क नहीं पड़ता कि यह टिप्पणी किससे संबद्ध है? या आप फ़ाइल के लिए नवीनतम प्रतिबद्धता में नवीनतम टिप्पणी प्राप्त करना चाहते हैं? अंतर यह है कि एक फ़ाइल में कई प्रतिबद्धताओं से संबंधित टिप्पणियां हो सकती हैं, और नवीनतम टिप्पणी नवीनतम प्रतिबद्धता में नहीं हो सकती है क्योंकि कोई पिछली प्रतिबद्धता में फ़ाइल पर टिप्पणी कर सकता है। तो, आप इनमें से कौन सा विकल्प चाहते हैं? –
मुझे विकल्प 1 चाहिए, कृपया :) जैसा कि यह आपको गिटहब पर वेब दृश्य में दिखाता है। –
यह आपको दिखाता है कि गिटहब पर वेब दृश्य में? क्या आप मुझे एक उदाहरण के रूप में एक सटीक यूआरएल दे सकते हैं? जब आप गिटहब पर किसी प्रोजेक्ट साइट पर जाते हैं, तो यह आपको फ़ाइलों के लिए प्रतिबद्ध संदेश दिखाता है (उदाहरण के लिए जब आप https://github.com/github/developer.github.com पर जाते हैं तो फ़ाइलों की सूची), प्रतिबद्ध टिप्पणियां नहीं । संदेश प्रतिबद्ध करें और टिप्पणियां दो अलग-अलग चीजें हैं। अगर मैं आपको गलत समझता हूं तो मैं क्षमा चाहता हूं, सिर्फ यह स्पष्ट करना चाहता हूं कि आपको वास्तव में क्या चाहिए। :) –