मैं जीथब में दो शाखाओं के बीच एक एकल फ़ाइल के लिए एक अंतर कैसे उत्पन्न कर सकता हूं


111

मुझे एक एकल फ़ाइल के लिए एक अंतर उत्पन्न करने की आवश्यकता है जो दो संस्करणों के बीच अंतर दिखाएगा, जो वास्तव में जीथब में टैग हैं। मैं तो इस अंतर को ईमेल के माध्यम से किसी को भेजना चाहता हूं, इसलिए इस अंतर के लिए एक जीथब URL आदर्श होगा। जीथब तुलना दृश्य मुझे सभी परिवर्तित फ़ाइलों के लिए ऐसा करने की अनुमति देगा, लेकिन यह अच्छा नहीं है क्योंकि मेरे रेपो में हजारों फाइलें हैं।

मैं कमांड लाइन में इस प्रकार कर सकता हूं, लेकिन यह मदद नहीं करता है क्योंकि मुझे ईमेल के माध्यम से किसी को यह भेजने की आवश्यकता है:

git diff tag1 tag2 -- path/to/file

मुझे यहां चर्चा की गई कमांड लाइन संस्करण मिला: मैं स्थानीय शाखा और दूरस्थ शाखा के बीच निर्दिष्ट फ़ाइल में अंतर कैसे देख सकता हूं?

जवाबों:


90

GitHub केवल दो आवागमन के बीच अंतर दिखाने का तरीका उजागर करता है।

बशर्ते कि वे टैग वास्तव में कमिट्स की ओर इशारा करते हों, Url प्रारूप कुछ इस तरह होगा

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

एक उदाहरण के रूप में, https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 LibGit2Sharp परियोजना के दो संस्करणों के बीच के अंतर को दर्शाता है। इस अंतर में सभी संशोधित फाइलें शामिल हैं।

यदि आप एक url प्राप्त करना चाहते हैं जो एक विशिष्ट फ़ाइल को लक्षित करता है:

  • फ़ाइलें परिवर्तित टैब पर स्विच करें

बदली हुई-टैब

  • शो डिफ स्टैट्स बटन पर क्लिक करें (यह लिंक के रूप में संशोधित फाइलों की सूची प्रदर्शित करेगा)

शो-diff

  • क्लिपबोर्ड की प्रतिलिपि उस विशिष्ट फ़ाइल के लिंक पर रखें जिसके बाद आप हैं ... और टाडा! हो गया।

उदाहरण के लिए, ऊपर दिए गए अंतर को देखते हुए, लिंक https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11LazyFixtures.cs संस्करण v2.9.0 और संस्करण के बीच होने वाले परिवर्तनों को इंगित करेगा। v0.9.5।

अपडेट करें

आपकी टिप्पणी के बाद जो बताता है कि आपका अंतर वेब इंटरफ़ेस के माध्यम से प्रदान करने के लिए बहुत बड़ा है, अच्छी पुरानी कमांड लाइन टूलींग के बारे में कैसे पता चलेगा? आप किसी फ़ाइल में अंतर के आउटपुट को रीडायरेक्ट कर सकते हैं और फिर फ़ाइल को ईमेल अटैचमेंट के रूप में भेज सकते हैं।

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff

8
नमस्ते, ऐसा लगता है कि यह मेरे लिए काम नहीं करेगा क्योंकि मेरा अंतर बहुत बड़ा है। मैं "यह अंतर बड़ा है! हम केवल 2,500 फ़ाइलों के लिए स्थिति जानकारी दिखा रहे हैं।" इसलिए मुझे केवल डिफ स्टैट्स मिलते हैं और पूरे डिफेक्ट्स भी नहीं मिलते हैं, यहां तक ​​कि # डिफ लिंक्स के साथ भी।
प्लेनफ्लवॉर

1
हालाँकि मुझे लगता है कि आप सही हैं - यह करने का तरीका है। धन्यवाद
plainflavour

1
शाखाओं की तुलना करते समय सिंटैक्स हाइलाइट प्राप्त करने के लिए आप इस क्रोम एक्सटेंशन github.com/danielribeiro/github-diff-highlight-extension का भी उपयोग कर सकते हैं ।
डैनियल रिबेरो

3
@plainflavour एक और आसान टिप अगर आप फिर से इस मामले में दौड़ते हैं - जब भी आपके पास @nulltoken जैसा कोई URL दिखाई देता है, तो आप पूर्ण अंतर देखने के लिए URL के अंत में .diff भी जोड़ सकते हैं (यद्यपि सादे के रूप में भी। )। जैसे https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff स्रोत
dmccabe

1
मुझे शो डिफ स्टैट्स बटन नहीं दिख रहा है । क्या यह चला गया है? या मैं सिर्फ इसे नहीं देख रहा हूं?
dckc

7

जब निम्न समस्या लागू होती है तो यहां मेरा समाधान है।

यह तुलना बड़ी है! हम केवल सबसे हाल के 250 कमिट दिखा रहे हैं

उस फ़ाइल के कच्चे दृश्य की प्रतिलिपि बनाएँ जिसकी आप https://gist.github.com/ से तुलना करना चाहते हैं । दो विशिष्ट प्रतिबद्ध बिंदुओं का उपयोग करें जिनकी आप तुलना करना चाहते हैं। पुराने कमिट से शुरू करें।

जब आप 'संशोधन' पर क्लिक करते हैं तो https://gist.github.com/ का एक अच्छा साइड-बाय-साइड अंतर होता है।


3
धन्यवाद, यह वास्तव में मुझे gist.github.com/ncoghlan/1067805fe673b3735ac854e19574749// के लिए आवश्यक सुझाव था ! :)
ncoghlan

3

उत्तर उन लोगों के लिए है, जो पिछले चेकइन के लिए GITHUB WEB पेज में एक फाइल के कोड परिवर्तन के इतिहास / डाउनलोड (केवल डाउनलोड नहीं) को देखना चाहते हैं।

उस फ़ाइल को github में जाएं, फिर HISTORY चुनें । यह नीचे की तरह चेकइन कमेंट्स लिंक की सूची के साथ पेज खोलेगा।

यहां छवि विवरण दर्ज करें इस पर क्लिक करने पर कोड में बदलाव दिखेगा। इतिहास पर क्लिक करने के बाद; आप संकुल स्तर पर क्लिक करके संकुल स्तर को देख सकते हैं।

ग्रहण में आप ईजीट प्लगइन का उपयोग करके इतिहास की तुलना कर सकते हैं और फ़ाइल पर "राइट क्लिक -> तुलना" कर सकते हैं। मैं ग्रहण में दो संशोधनों की तुलना कैसे कर सकता हूं?


1
बस अधिक स्पष्ट होने के लिए, आप 7 हेक्स-डिजिट "नाम" पर क्लिक करते हैं (जब आप उस पर मंडराते हैं तो कोई लेबल या टूल टिप नहीं है, यह दाहिने हाथ की तरफ है, बस "क्लिपबोर्ड पर कॉपी करें" के बगल में है) आइकन), और जो आपको उस पृष्ठ पर ले जाएगा जो उस प्रतिबद्ध संस्करण के बीच एक अंतर दिखाता है, और जो मैं मानता हूं वह पिछले संस्करण है।
जोनाथनज मोनिका सी सी

@ जोनाथन हाँ; यह सच है
कानागावेलु सुगुमार

अरे, मैंने उस स्क्रीन कैप्चर को पिछली बार देखा नहीं था। मुझे नहीं पता कि क्या यह मेरे लिए लोड नहीं था तब या अगर आपने इसे तब से जोड़ा है, लेकिन आपके उत्तर के लिए धन्यवाद! यह बहुत अच्छा है।
जोनाथनZ

5000 फ़ाइलों की एक कमेटी के लिए, यह मुझे सिंगल-फाइल अंतर में नहीं ले जाता है। से इस इतिहास , से कि फाइल करने के लिए डेल्टा ढूँढने की कोशिश इस विशाल प्रतिबद्ध
कार्ल वॉल्श

0

मैंने कमांड लाइन से GitHub पर दो कमिट्स के बीच एक अंतर खींचने के लिए एक सरल सुविधा स्क्रिप्ट को एक साथ रखने के लिए nulltoken के उत्तर का उपयोग किया ।

आप जिस्ट पर पूरी स्क्रिप्ट पा सकते हैं , लेकिन यहाँ अच्छे बिट्स हैं:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"

if [[ "$#" -eq 1 ]]; then
  if [[ "$1" =~ .*\.\..* ]]; then
    # Handle "git hubdiff fromcommit..tocommit"
    open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
  else
    # Handle "git hubdiff fromcommit"
    open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
  fi
elif [[ "$#" -eq 2 ]]; then
  # Handle "git hubdiff fromcommit tocommit"
  open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi

यह तर्कों के रूप में स्वीकार करता है, कमिट करता है, और कुछ भी जो इसके द्वारा हल किया जा सकता है git rev-parse। मैंने उपयोग किया open, जो केवल वेबपेज खोलने के लिए macOS पर काम करता है, इसलिए यदि आप एक अलग वातावरण पर हैं तो आप उसे ट्विक करना चाहेंगे।

Nulltoken के जवाब के साथ, अंतर में एक फ़ाइल को इंगित करने के लिए, आपको url बार में एंकर स्ट्रिंग दिखाई देने के लिए फ़ाइल के शीर्षक पर क्लिक करना होगा, जिसे आप तब कॉपी कर सकते हैं।


लंगर स्ट्रिंग पाने के लिए कोई भी तरीका जो वांछित फ़ाइल नहीं दिखाता है क्योंकि उनमें से बहुत सारे हैं?
19

@sgarg एंकर "diff- <md5 of the filename>" है - AFAIK का दस्तावेजीकरण नहीं - लेकिन इसने मुझे नाराज कर दिया और मैंने इसका अनुमान लगाया।
बेन वाल्डिंग

0

चूंकि यह अभी भी यहां संभव नहीं है इसलिए ब्राउज़र-आधारित अंतर-टूल विधि है। यह स्वचालन का लाभ नहीं उठाता है, लेकिन केवल क्रोम एक्सटेंशन स्थापित करने की क्षमता की आवश्यकता होती है:

  1. Chrome ब्राउज़र के लिए डिफ उपकरण स्थापित करें: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamngljlldkoonkombomb
  2. ओपन डिफ टूल ( http://iblogbox.com/devtools/diff/ )
  3. GitHub से BEFORE कमिट, टैग या ब्रांच पर जाएं, फ़ाइल खोलें, फिर Rawबटन पर क्लिक करके रॉ फाइल व्यू, सिलेक्ट-ऑल और कॉपी प्राप्त करें, फिर डिफ टूल्स में लेफ्ट-हैंड साइड टेक्स्ट बॉक्स में डालें।
  4. चरण 3 को दोहराएं लेकिन AFTER फ़ाइल के लिए और राइट-साइड-साइड बॉक्स में डिफ टूल्स में पेस्ट करें
  5. Compare Nowअपने अलग-अलग विज्ञापन पर क्लिक करें और प्रदर्शन करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.