2011-12-15 3 views
9

git pull द्वारा अपडेट की जाने वाली फ़ाइलों की सूची कैसे प्राप्त की जा सकती है (या बस अपडेट की गई थी) ताकि मैं उन्हें पार्स कर सकूं और एक स्क्रिप्ट में उचित कार्रवाई कर सकूं?शाखा नाम जानने या ट्रैक करने के बिना 'गिट पुल' द्वारा अपडेट किए जाने वाले फ़ाइलों की सूची कैसे प्राप्त करें?

this similar looking question को स्वीकार कर लिया जवाब मुझे पता चला है कि मैं

git fetch && git log master..origin/master 

साथ प्रतिबद्ध की एक सूची प्राप्त कर सकते हैं, लेकिन यह मेरे लिए अच्छा नहीं है क्योंकि मैं फ़ाइलों की एक सूची की जरूरत है, और मेरी स्क्रिप्ट कल्पना नहीं कर सकते कि शाखा master है या वर्तमान शाखा origin/master पर नज़र रख रही है।

एक छोटे से प्रयोग के माध्यम से

(और @ जोनाथन की टिप्पणी), मैं ने पाया है कि

git fetch && git diff master origin/master --name-only 

लगभग वहाँ है, लेकिन अब मैं वर्तमान शाखा और क्या यह इतना है कि ट्रैकिंग है पाने के लिए एक रास्ता खोजने की जरूरत है मैं इस (अजगर) की तरह कुछ पर अमल कर सकते हैं:

"git fetch && git diff %s %s --stat" % (this_branch, tracked_branch) 

मैं के रूप में अब मैं सिर्फ सच में कैसे वर्तमान शाखा और क्या यह ट्रैकिंग है पाने के लिए पता करने की जरूरत लगता है कि मैं वहाँ जिस तरह से ज्यादातर हूँ,, लेकिन मैंने एक व्यापक संदर्भ दिया है उम्मीद है कि किसी को इस के हल के लिए एक बहुत ही सरल तरीका जानता है में टी (git incoming --files अच्छा होगा;)

+2

मशीन की खपत के लिए, '--name-only' शायद' कि --stat' बेहतर है। '| को बाहर नहीं निकालने के अलावा 72 ++ - अंत में, यह इलिप्स के साथ फ़ाइल नामों को छोटा नहीं करेगा। सुनिश्चित नहीं है कि इससे आपको वास्तविक समस्या में मदद मिलती है, लेकिन मैं बस इसे इंगित करता हूं। – Jonathan

+0

यह निश्चित रूप से मदद करता है, धन्यवाद :) मैं सवाल अपडेट करूंगा। – meshy

+0

@ जोनाथन: मशीन खपत के लिए, यदि आप अलग-अलग आकार जानना चाहते हैं, तो आप '--numstat'' --stat' का उपयोग नहीं करते हैं। – Cascabel

उत्तर

9

मान लिया जाये कि आप रिमोट (मेरे उदाहरण में, मूल) का नाम जानते हैं तो आप बस जा सकते हैं:

git fetch && git diff --name-only ..origin 

templates/shows/showBase.html 
templates/shows/showList.html 
templates/shows/showListEntry.htm 

या यदि आप अलग-अलग करता में सॉर्ट करने के लिए चाहता था, आप whatchanged इस्तेमाल कर सकते हैं:

git fetch && git whatchanged --name-only ..origin 

commit fcb1b56d564fe85615ecd6befcd82f6fda5699ae 
Author: Grambo <[email protected]> 
Date: Mon Dec 12 23:36:38 2011 +0000 

    Hooked "I've Seen This" button up to "Review Show" dialog 

templates/shows/showBase.html 
templates/shows/showList.html 
templates/shows/showListEntry.htm 

commit xasdasdsada...... 
+0

'गिट fetch && git diff --name-only ..origin' बिल्कुल वही है जो मुझे चाहिए :) मुझे पूरा यकीन है कि रिमोट हमेशा शाखा के बावजूद" मूल "होगा क्योंकि सबकुछ सीधे बिटबकेट से क्लोन हो जाता है। धन्यवाद, स्वीकार्य :) – meshy

+1

'whatchanged --name-only' 'लॉग-नाम-केवल' के बराबर है (यदि कोई अंतर है, तो मुझे यह नहीं पता)। – Cascabel

+0

मैंने अपने स्थानीय भंडार पर कमांड चलाया, जबकि मैं मास्टर शाखा में हूं और रिमोट रिपोजिटरी पर मास्टर एक संस्करण आगे है। लेकिन मुझे यह त्रुटि मिलती है - 'घातक: संदिग्ध तर्क' ..origin ': काम करने वाले पेड़ में अज्ञात संशोधन या पथ नहीं। संशोधनों से पथ को अलग करने के लिए '-' का उपयोग करें, जैसे: 'गिट [ ...] - [ ...]' –

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