2010-11-22 19 views
12

svn के साथ मेरे पसंदीदा वर्कफ़्लो में से एक है दो शाखाओं, या शाखा और ट्रंक के बीच शुद्ध अंतर देखने के लिए तुलनात्मक फ़ोल्डर तुलना सुविधा से परे उपयोग करना। क्या एक ही भंडार के मैन्युअल रूप से एकाधिक क्लोन बनाने के बिना गिट में ऐसा करने का कोई तरीका है?गिट शाखाओं की निर्देशिका तुलना

जैसा कि मैं इस सवाल से पूछता हूं, यह मेरे लिए होता है कि मैं एक स्क्रिप्ट लिख सकता हूं जो वर्तमान रेपो को अस्थायी निर्देशिका में क्लोन कर देगा, वांछित शाखा को चेकआउट करेगा, और फिर दो निर्देशिकाओं के साथ BCompare.exe को तर्क के रूप में कॉल करेगा। फ़ोल्डर तुलना दृश्य

BCompare.exe path/to/folder1 path/to/folder2 

क्या यह ध्वनि उचित है? तुलना करने के बाद मैं अतिरिक्त क्लोन को हटाने में सक्षम हूं?

+0

"क्या मैं अतिरिक्त क्लोन को हटाने में सक्षम हूं ...?" तुम क्यों नहीं – Cascabel

+0

अच्छा, आदर्श रूप में, मैं पृष्ठभूमि में तुलना से परे लॉन्च करना चाहता हूं ताकि मैं लॉग देखने के लिए उसी टर्मिनल में गिट का उपयोग जारी रख सकूं, इसके साथ, मुझे यकीन नहीं है कि मेरे पास क्या पता चल जाएगा अस्थायी क्लोन को हटाने के लिए तुलना से परे बंद और सुरक्षित है। –

उत्तर

2

ऐसा लगता है कि आप पहले से ही सही उत्तर निकाल चुके हैं - git clone और git checkout का उपयोग करने के लिए निर्देशिका स्थापित करने के लिए BCompare.exe चलाएं। नीचे लिपि एक अच्छा प्रारंभिक बिंदु हो सकता है।

#!/bin/sh 
(        # execute in a subshell so you can continue 
           # working in the current shell 
    set -o xtrace    # bash setting that echos each command before it's executed 
    > /tmp/auto_bcompare_log # truncate existing log file 
    BRANCH="$1"    # get branch argument from command line 
    TEMPDIR=`mktemp -d`  # get a temp directory 
    CWD=`pwd`     # remember the current directory 
    git clone $CWD $TEMPDIR 
    cd $TEMPDIR 
    git checkout $BRANCH 
    cd $CWD 
    BCompare.exe $CWD $TEMPDIR 
    rm -rf $TEMPDIR 
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect 
               # stdout/stderr/stdin 
+0

यह मेरे लिए कम या ज्यादा काम किया।मैंने लॉगिंग सामान निकाला क्योंकि मैं इसे कमांड लाइन पर देख रहा था, इसलिए यह msysgit के साथ काम करेगा, और मैंने इसे उपनाम बना दिया। इसके बारे में अच्छी बात यह है कि आप रेपो की किसी भी निर्देशिका में कर सकते हैं और यह स्वचालित रूप से काम करता है। मैंने() का उपयोग नहीं करने का विकल्प चुना क्योंकि मैं हमेशा पृष्ठभूमि में इसे चलाने और इसे चलाने के लिए उपयोग कर सकता हूं। उपनाम स्वयं अगली टिप्पणी में है। –

+0

गिट कॉन्फ़िगरेशन --global alias.ddiff '! Sh -c "TWD =/ddifftmp; mkdir $ TWD; CWD =' pwd'; गिट क्लोन $ CWD/.git $ TWD; सीडी $ TWD; गिट चेकआउट $ 1; सीडी $ सीडब्ल्यूडी; बीसीओएमपी.एक्सई $ TWD $ सीडब्ल्यूडी; आरएम-आरएफ $ TWD; ' –

0

बस git diff जिन शाखाओं की आप तुलना करना चाहते हैं, उनके नाम या हैंश के साथ बस इतना आसान है। असल में, आप किसी भी दो कामों की तुलना अपने हैंश से कर सकते हैं।

+0

और यदि मुझे गिट diff की इनलाइन तुलना और मनमाने ढंग से फ़ाइल ऑर्डरिंग की मजबूर रैखिकता पसंद नहीं है तो मैं एसओएल हूं? मुझे पता है कि मैं भी difftool b1 b2' git कर सकता हूं लेकिन यह मुझे फ़ोल्डर तुलना दृश्य नहीं देता है। –

+0

हम्म, क्षमा करें, मुझे आपका प्रश्न नहीं मिला, मैंने सोचा कि आप बस दो कामों की तुलना करने की कोशिश कर रहे थे। आप अलग-अलग उपकरण का उपयोग कर रहे हैं जो मुझे लगता है, सही है? दुर्भाग्य से, मैं उससे परिचित नहीं हूं। – ustun

+1

@drhorrible: तो आपका प्रश्न वास्तव में यह विशिष्ट "फ़ोल्डर तुलना दृश्य" कैसे प्राप्त करें, न केवल दो शाखाओं के बीच अंतर को कैसे देखें। थोड़ा सा स्पष्ट बनाने के लिए संपादित करना चाहते हैं। – Cascabel

27

यह (फ़ाइल-दर-फ़ाइल के बजाय निर्देशिकाओं की तुलना) जल्द ही उपलब्ध होना चाहिए:
[ANNOUNCE] Git 1.7.11.rc1 देखें:

"git difftool" "--dir-diff" बाहरी diff उपकरण अंडे देने के लिए विकल्प सीखा है कि एक फ़ाइल जोड़ी प्रति बार एक बार बाहरी उपकरण का उदाहरण चलाने के बजाय दो अस्थायी निर्देशिकाओं, को पॉप्युलेट करने के बाद दो निर्देशिका पदानुक्रमों की तुलना करें।

देखें "Patch difftool: teach difftool to handle directory diffs", इस fork of git से:

जब 'difftool' प्रतिबद्ध एक से अधिक फ़ाइल को संशोधित कि की एक श्रृंखला की तुलना करने को कहा जाता है, इसके लिए diff उपकरण का एक अलग इंस्टेंस को खोलता है प्रत्येक फ़ाइल जो बदल गई।

नया '--dir-diff' विकल्प सभी संशोधित फ़ाइलों को एक अस्थायी स्थान पर प्रतिलिपि बनाता है और diff टूल के एक उदाहरण में निर्देशिका निर्देशिका को चलाता है।

+0

यदि मैं एक से अधिक बार अपवित्र कर सकता हूं तो यह सही होगा और स्वीकार्य उत्तर होना चाहिए। – joneshf

+0

ओएमजी यह मेरी जिंदगी बदलता है! – stdcall

संबंधित मुद्दे