गिट भिन्न बनाना - रास्ता दिखाना पूर्ण फ़ाइल पथ


104

कर पर git diff --statकुछ फ़ाइलों को भंडार आधार से पूर्ण पथ के साथ सूचीबद्ध हैं, लेकिन कुछ फ़ाइलों के रूप में सूचीबद्ध हैं:

.../short/path/to/filename.  

वह मार्ग से शुरू होता है ...और केवल छोटा रास्ता दिखाया जाता है।

मैं git diffआसानी से एक स्क्रिप्ट द्वारा संसाधित किया जा सके, इसके लिए सभी फाइलों के लिए पूर्ण फ़ाइल पथ को सूचीबद्ध करना चाहूंगा । क्या कोई रास्ता है git diffजिससे मैं हमेशा पूरा रास्ता दिखा सकूँ

जवाबों:


108

git diffकमांड इसके लिए वैकल्पिक मान लेता है --stat:

--stat[=<width>[,<name-width>[,<count>]]]
       Generate a diffstat. You can override the default output width for
       80-column terminal by --stat=<width>. The width of the filename
       part can be controlled by giving another width to it separated by a
       comma. By giving a third parameter <count>, you can limit the
       output to the first <count> lines, followed by ...  if there are
       more.

       These parameters can also be set individually with
       --stat-width=<width>, --stat-name-width=<name-width> and
       --stat-count=<count>.

(स्क्रिप्टिंग के लिए आप git diff-treeसीधे उपयोग करना चाह सकते हैं क्योंकि यह "प्लंबिंग" कमांड का अधिक है, हालांकि मुझे संदेह है कि आप किसी भी तरह से ठीक होंगे। ध्यान दें कि आपको --statउपयोग करते समय समान पाठ की आवश्यकता है git diff-treegit diff"पोर्सिलेन" का उपयोग करने के बीच आवश्यक अंतर। "फ्रंट एंड, और git diff-treeप्लंबिंग कमांड, यह है कि git diffविकल्प के लिए आपकी कॉन्फ़िगर की गई सेटिंग्स को देखता है जैसे diff.renamesकि यह तय करना कि रीनेम डिटेक्शन करना है या नहीं। ठीक है, प्लस फ्रंट इंडक git diffके बराबर होगा git diff-indexयदि आप इंडेक्स के साथ कमिट की तुलना कर रहे हैं। , उदाहरण के लिए। दूसरे शब्दों में, git diff आपके कॉन्फ़िगरेशन को पढ़ता है और स्वचालित रूप से सही प्लंबिंग को आमंत्रित करता है


6
git diff --numstat समान वृक्ष के समान है
cmcginty

1
ध्यान दें कि पिछले भाग (+++ / ---) की चौड़ाई को सीमित करने के लिए आप एक अलग --stat-graph-width=...स्विच का उपयोग कर सकते हैं । ध्यान दें कि उच्च सेट करना --stat-graph-width=और --stat-name-width=पर्याप्त नहीं है, आपको --stat-width=दोनों को कवर करने के लिए पर्याप्त बड़ा सेट करना होगा ।
जकूब.ग

@ jakub.g: अच्छी बात है। गिट स्रोत में थोड़ी खुदाई के आधार पर, यह 1.7.10 git के साथ चला गया।
अपराह्न

4
क्या इसका वैश्वीकरण करने का कोई तरीका है? हर बार इसे टाइप करना पागलपन है।
रुडी

@Rudie: alas, no: एक कॉन्फ़िगरेशन चर है जिसका diff.statGraphWidthउपयोग आप --stat-graph-widthमान सेट करने के लिए कर सकते हैं , लेकिन अन्य आपके टर्मिनल चौड़ाई के लिए डिफ़ॉल्ट हैं। : (तो, वैकल्पिक उत्तर "हां, बस अपने टर्मिनल विंडो 1000 स्तंभ जितनी चौड़ाई बनाने के" :-))
torek

22

स्क्रिप्ट प्रोसेसिंग के लिए, निम्नलिखित में से किसी एक का उपयोग करना बेहतर हो सकता है:

# list just the file names
git diff --name-only
path/to/modified/file
path/to/renamed/file


# list the names and change statuses:
git diff --name-status
M       path/to/modified/file
R100    path/to/existing/file   path/to/renamed/file


# list a diffstat-like output (+ed lines, -ed lines, file name):
git diff --numstat
1       0       path/to/modified/file
0       0       path/to/{existing => renamed}/file

-zविकल्प के साथ संयोजित होने पर ये प्रत्येक मजबूत स्क्रिप्ट प्रोसेसिंग के लिए अधिक उपयोगी हो जाते हैं , जो NULकि फील्ड टर्मिनेटर के रूप में उपयोग होता है।


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

1
सभी आउट्पू के सापेक्ष पथ वापस आ जाएंगे git rev-parse --show-toplevel। मूल समस्या छोटे रास्तों की बात कर रही थी, जो कि विशेष रूप से लंबे फ़ाइलनामों के लिए या कम मूल्य के लिए, अंतर में समस्या है --stat-name-width। ऊपर दिए गए आदेश पथ को छोटा नहीं करेंगे, लेकिन अनुरोध के अनुसार "पूर्ण" पथ दिखाएंगे, हालांकि यह अभी भी रिपॉजिटरी रूट के सापेक्ष है।
cmbuckley

18

बैश उपयोगकर्ताओं के लिए, आप $COLUMNSउपलब्ध टर्मिनल चौड़ाई को स्वचालित रूप से भरने के लिए चर का उपयोग कर सकते हैं :

git diff --stat=$COLUMNS

बहुत लंबे पथ नाम अभी भी काटे जा सकते हैं; इस स्थिति में, आप +++ / --- भाग की चौड़ाई को कम कर सकते हैं --stat-graph-width, उदाहरण के लिए यह इसे टर्मिनल चौड़ाई के 1/5 तक सीमित करता है:

git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))

अधिक सामान्य समाधान के लिए, आप tput colsटर्मिनल चौड़ाई निर्धारित करने के लिए आउटपुट का उपयोग कर सकते हैं ।


2
क्या वैश्वीकरण का कोई तरीका है --stat=$COLUMNS,$COLUMNS? हर बार इसे टाइप करना पागलपन है।
रुडी

@Rudie export COLUMNSआपके ~/.bashrcऔर आपके ~/.gitconfigअंडर [alias]में जोड़ते हैं, जोड़ते हैंsmart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
user151841

@ user151841 यह केवल बदलता है diff। मैं चाहता हूं कि यह मर्ज और पुल आदि के लिए भी काम करे। (मैन्युअल रूप से वहाँ भी नहीं कर सकते।) मुझे नहीं लगता कि GIT इसका समर्थन करता है।
Rudie

@ रुडी वेल, पुल या मर्ज पूरा होने के बाद, आप पिछले और नए हैश के बीच अंतर कर सकते हैं।
user151841

2
@ user151841 ज़रूर, लेकिन विलय पहले से ही एक सारांश है। मापदंडों / विन्यास के बिना। यह बहुत अच्छा होगा यदि सभी 'स्टेट सारांश' एक ही विन्यास का उपयोग करें।
रुडी

4

वहाँ एक विकल्प है --name-only: git diff --name-only। विकल्प को अन्य git कमांड जैसे showऔर के द्वारा भी सपोर्ट किया जाता है stash

पथ विकल्प के साथ छोटा नहीं होता है।


0

मैंने निम्नलिखित git उपनाम बनाया है:

diffstat = ! "gitdiffstat() {  git diff --stat=$(tput cols) ${1:-master} ; }; gitdiffstat"

यह tput colsकमांड से कॉलम की गिनती को पढ़ता है । यह विरुद्ध में अंतर करने के लिए चूक करता है master, लेकिन आप वैकल्पिक रूप से किसी अन्य शाखा को निर्दिष्ट कर सकते हैं।

$ git diffstat
 .gitalias | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

0

एक सरल समाधान मुझे यह करने के लिए मिला था: (केवल * निक्स पर काम करता है, सॉरी नो ऑक्स)

git diff --stat=$COLUMNS --relative | head -n -1 | cut -c 2- | xargs -d '\n' -P4 printf "$(pwd)/%s\n"

यह संस्करण दोनों के लिए काम करता है, लेकिन यह ओएक्सएक्स पर बहुत अच्छा नहीं लगता है।

git diff --stat=$COLUMNS --relative | sed -e '$ d' | cut -c 2- | xargs -n4 -I{} echo "$(pwd)/{}"

-1

मैंने पाया कि डिस-स्टैट का व्यवहार जीआईटी 1.7.10 के आसपास कहीं बदल गया है, जहां पहले यह डिफ़ॉल्ट रूप से एक निश्चित चौड़ाई में फ़ाइल पथ को छोटा करेगा - यह अब प्रदर्शित करता है जितना कि आपके टर्मिनल विंडो की अनुमति देगा। यदि आप इस समस्या का सामना कर रहे हैं, तो सुनिश्चित करें कि आप 1.8.0 या नए में अपग्रेड करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.