2010-03-08 12 views
249

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

दूसरे शब्दों में: गिट एक फ़ाइल को ट्रैक कर रहा है?

+0

मुझे लगता है कि बिंदु यह है कि फ़ाइल को ट्रैक या अनचाहे के रूप में तय करने का मानदंड क्या है। खोजने के लिए किसी प्रकार का ट्रैक किया गया फ़ाइल संग्रह होना चाहिए। – smwikipedia

उत्तर

311

कोशिश:

git ls-files --error-unmatch <file name> 

, अगर फ़ाइल

+0

कम से कम मेरे पुराने (1.6।0) गिट का संस्करण, आपको त्रुटि प्राप्त करने के लिए फ़ाइल नाम से पहले '--error-unmatch' विकल्प ** डालना होगा। किसी भी तरह विकल्प केवल फाइलनामों पर लागू होता है जो इसका अनुसरण करते हैं। –

+0

दरअसल, समस्या यह प्रतीत होती है कि जीएनयू गेटोपट विकल्प परमिट सक्षम नहीं है, और जब फ़ाइल नाम के बाद दिखाई दे रहा है (या '--' के बाद) '--error-unmatch' को केवल एक अन्य के रूप में माना जाता है (इंडेक्स में नहीं) फ़ाइल नाम, और इसका कोई प्रभाव नहीं है। –

+17

'गिट एलएस-फाइलें | grep '? उदाहरण: 'गिट एलएस-फाइलें | grep Main.h' – gaussblurinc

11

फ़ाइल पर git status चलाने का प्रयास करें। यह एक त्रुटि प्रिंट होगा अगर यह Git द्वारा ट्रैक नहीं है

PS$> git status foo.txt 
error: pathspec 'foo.txt' did not match any file(s) known to git. 
+0

वाह। मैं इसे एक निर्देशिका पर चला रहा होगा और ऐसा लगता है कि यह पूरे रेपो की जांच कर रहा था। धन्यवाद। –

+4

दरअसल, अगर मैं 'गिट स्थिति ट्रैकडफाइल' चलाता हूं तो मुझे बाहर निकलने वाला कोड 1 मिलता है (अपेक्षित 0 उपयोगी होने के लिए) लेकिन यह मुझे आउटपुट में "त्रुटि:" नहीं देता है। मैं स्ट्रिंग आउटपुट की तुलना में बाहर निकलने वाले कोड को पार्स करना चाहता हूं। –

+39

मुझे लगता है कि अगर मैं अपनी गिट काम करने वाली प्रतिलिपि में मौजूद फ़ाइल पर गिट स्थिति चलाता हूं लेकिन मुझे .gitignore द्वारा बहिष्कृत किया गया है, तो कोई त्रुटि नहीं उठाई जाती है। (यानी यह उत्तर नहीं करेगा।) – JellicleCat

15

संपादित

आप बैश से Git का उपयोग करने के --porcelain विकल्प git status को वहाँ की जरूरत है:

--porcelain

Give the output in a stable, easy-to-parse format for scripts. Currently this is identical to --short output, but is guaranteed not to change in the future, making it safe for scripts.

आउटपुट की तरह दिखता है यह:

> git status --porcelain 
M starthudson.sh 
?? bla 

या आप एक समय में केवल एक फ़ाइल करते हैं:

> git status --porcelain bla 
?? bla 

मूल

कार्य करें:

git status 

आप रिपोर्ट बताते हुए फ़ाइलें अद्यतन और कौन-से थे जो देखेंगे अनचाहे हैं।

आप bla.sh देख सकते हैं पर नज़र रखी है और संशोधित और newbla ट्रैक न होने वाला:

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# 
#  modified: bla.sh 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  newbla 
no changes added to commit (use "git add" and/or "git commit -a") 
+0

क्षमा करें मुझे स्पष्ट होना चाहिए था। स्थिति ठीक है लेकिन मैं पार्स आउटपुट की तुलना में एक्जिट कोड की जांच करूंगा। –

+0

'गिट स्थिति --porcelain' आपका मित्र है यदि आपको स्क्रिप्ट द्वारा आउटपुट को पार्स करने की ज़रूरत है, तो लिंक किए गए दस्तावेज़ पर एक नज़र डालें, यह कुछ अन्य उपयोगी विकल्प दिखाता है – stefanB

+0

हायही, बहुत पुरानी गिट के साथ काम नहीं करता है: 'गिट स्टेटस - एडसेलिन त्रुटि: अज्ञात विकल्प 'पोर्सिलीन' संस्करण 1.6.0 है :-) –

6

मैं किसी भी Git आदेश है कि एक "बुरा" बाहर निकलें कोड देता है के बारे में पता नहीं है, लेकिन यह एक आसान तरीका की तरह लगता है ऐसा करने के लिए एक गिट कमांड का उपयोग करना होगा जो किसी फ़ाइल के लिए आउटपुट नहीं देता है, जिसे ट्रैक नहीं किया जाता है, जैसे कि गिट-लॉग या गिट-एलएस-फाइलें। इस तरह आपको वास्तव में कोई पार्सिंग नहीं करना है, आप इसे किसी अन्य आउटपुट के माध्यम से चलाने के लिए grep जैसे किसी अन्य सरल उपयोगिता के माध्यम से इसे चला सकते हैं।

उदाहरण के लिए,

git-ls-files test_file.c | grep .

अगर फाइल ट्रैक न होने वाला एक शून्य कोड यदि फ़ाइल ट्रैक किया जाता है, लेकिन एक के बाहर निकलने के कोड के साथ बाहर निकल जाएगा।

31

आपको त्रुटि संदेश के साथ अपने कंसोल अप अस्त-व्यस्त करे नहीं करना चाहते हैं ट्रैक न होने वाला 1 के साथ बाहर निकल जाएगा आप भी चला सकते हैं

git ls-files file_name 

और फिर परिणाम की जांच करें। अगर गिट कुछ भी नहीं देता है, तो फ़ाइल को ट्रैक नहीं किया जाता है। यदि यह ट्रैक किया गया है, तो गिट फ़ाइल पथ वापस कर देगा।

इस काम में आता है, तो आप एक स्क्रिप्ट में यह गठबंधन करने के लिए चाहते हैं, उदाहरण PowerShell के लिए:

$gitResult = (git ls-files $_) | out-string 
if ($gitResult.length -ne 0) 
{ 
    ## do stuff with the tracked file 
} 
1

बस मेरे दो सेंट:

git ls-files | grep -x relative/path

जहां relative/path आसानी से निर्धारित किया जा सकता स्वत: पूर्णता खोल के भीतर tab दबाकर। 1 या 0 आउटपुट प्राप्त करने के लिए अतिरिक्त | wc -l जोड़ें।

0

git log का उपयोग करके इस बारे में जानकारी दी जाएगी। अगर फ़ाइल गिट में ट्रैक की जाती है तो कमांड कुछ परिणाम दिखाता है (लॉग)। अन्यथा यह खाली है।

उदाहरण के लिए यदि फ़ाइल Git पर नज़र रखी है,

[email protected]:~/project-repo-directory# git log src/../somefile.js 
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc 
Author: User <[email protected]> 
Date: Mon Feb 20 07:45:04 2017 -0600 

    fix eslint indentation errors 
.... 
.... 

फ़ाइल पर नज़र रखी Git नहीं है, तो

[email protected]:~/project-repo-directory# git log src/../somefile.js 
[email protected]:~/project-repo-directory# 
3

मैं एक कस्टम का सुझाव उर्फ ​​ आप .gitconfig पर।

1) Git आदेश के साथ:

git config --global alias.check-file <command> 

2) संपादन ~/.gitconfig और उर्फ ​​खंड पर इस पंक्ति जोड़ें:

आप ऐसा करने के लिए जिस तरह से करने के लिए है

[alias] 
    check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f" 

एक बार आदेश का शुभारंभ किया (1) या सहेजी गई फ़ाइल (2), आपके वर्कस्पेस पर आप इसका परीक्षण कर सकते हैं:

$ git check-file 
$ Filename missing 

$ git check-file README.md 
$ File tracked 

$ git check-file foo 
$ File not tracked 
संबंधित मुद्दे