क्या यह बताने का कोई तरीका है कि क्या किसी git
कमांड को चलाकर किसी फाइल को ट्रैक किया जा रहा है और उसका एक्जिट कोड चेक किया जा रहा है ?
दूसरे शब्दों में: git किसी फ़ाइल को ट्रैक कर रहा है?
क्या यह बताने का कोई तरीका है कि क्या किसी git
कमांड को चलाकर किसी फाइल को ट्रैक किया जा रहा है और उसका एक्जिट कोड चेक किया जा रहा है ?
दूसरे शब्दों में: git किसी फ़ाइल को ट्रैक कर रहा है?
जवाबों:
प्रयत्न:
git ls-files --error-unmatch <file name>
यदि फ़ाइल ट्रैक नहीं है तो 1 से बाहर निकल जाएगा
--error-unmatch
विकल्प डालना होगा । किसी भी तरह का विकल्प केवल उन फ़ाइलनामों पर लागू होता है जो इसका पालन करते हैं।
--
) के बाद प्रदर्शित होने पर --error-unmatch
इसे केवल एक अन्य (सूचकांक में नहीं) फ़ाइल नाम के रूप में माना जाता है, और इसका कोई प्रभाव नहीं होता है।
git ls-files | grep <PATTERN>
? उदाहरण:git ls-files | grep Main.h
यदि आप त्रुटि संदेशों के साथ अपने कंसोल को अव्यवस्थित नहीं करना चाहते हैं, तो आप भी चला सकते हैं
git ls-files file_name
और फिर परिणाम की जांच करें। यदि गिट कुछ नहीं देता है, तो फ़ाइल को ट्रैक नहीं किया जाता है। यदि इसे ट्रैक किया जाता है, तो git फ़ाइल पथ को वापस कर देगा।
यह काम में आता है यदि आप इसे स्क्रिप्ट में जोड़ना चाहते हैं, उदाहरण के लिए PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_name
एक सटीक मिलान (पूर्ण पथ + फ़ाइल नाम) होना चाहिए, लेकिन वाइल्डकार्ड के साथ इस्तेमाल किया जा सकता है:git ls-files *foo.rb
संपादित करें
यदि आपको bash से git का उपयोग करने की आवश्यकता --porcelain
है तो git status
निम्न विकल्प है :
--चीनी मिटटी
स्क्रिप्ट के लिए एक स्थिर, आसान-से-पार्स प्रारूप में आउटपुट दें। वर्तमान में यह --short आउटपुट के समान है, लेकिन भविष्य में इसे नहीं बदलने की गारंटी है, जिससे यह स्क्रिप्ट के लिए सुरक्षित है।
आउटपुट इस तरह दिखता है:
> 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")
git status --porcelain
क्या आपका दोस्त है अगर आपको स्क्रिप्ट द्वारा आउटपुट पार्स करने की आवश्यकता है, तो लिंक पर एक नज़र
git status --porcelain error: unknown option
चीनी मिट्टी के बरतन संस्करण 1.6.0 :-) है
git status
फ़ाइल पर चलने का प्रयास करें । यदि यह git द्वारा ट्रैक नहीं किया गया है तो यह एक त्रुटि प्रिंट करेगा
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile
हूं तो मुझे एक्ज़िट कोड 1 (उपयोगी होने की उम्मीद 0) मिलता है, लेकिन यह मुझे आउटपुट में "त्रुटि:" नहीं देता है। मैं स्ट्रिंग आउटपुट के बजाय एक निकास कोड पार्स करूंगा।
.gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
मुझे ऐसे किसी git कमांड के बारे में नहीं पता है जो "खराब" निकास कोड देता है, लेकिन ऐसा लगता है कि ऐसा करने का एक आसान तरीका यह है कि यह git कमांड का उपयोग करेगा जो ट्रैक नहीं की गई फ़ाइल के लिए कोई आउटपुट देता है, जैसे कि git-log या git-ls-files। इस तरह से आपको वास्तव में कोई पार्स करने की ज़रूरत नहीं है, आप इसे एक और सरल उपयोगिता के माध्यम से चला सकते हैं जैसे grep यह देखने के लिए कि क्या कोई आउटपुट था।
उदाहरण के लिए,
git-ls-files test_file.c | जीआरपी
यदि फ़ाइल को ट्रैक किया जाता है तो एक शून्य कोड के साथ बाहर निकल जाएगा, लेकिन यदि फ़ाइल को ट्रैक नहीं किया जाता है तो किसी का निकास कोड।
मैं आप पर एक कस्टम उपनाम का सुझाव देता हूं .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
उपयोग करने git log
से इस बारे में जानकारी मिलेगी। यदि फ़ाइल को git में ट्रैक किया जाता है तो कमांड कुछ परिणाम (लॉग) दिखाता है। और यह खाली है।
उदाहरण के लिए यदि फ़ाइल को ट्रैक किया जाता है,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
यदि फ़ाइल को ट्रैक नहीं किया जाता है,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
केवल मेरे दो सेंट्स:
git ls-files | grep -x relative/path
जहाँ एक स्वत: पूर्ण शेल के भीतर relative/path
दबाकर आसानी से निर्धारित किया जा सकता है tab
। | wc -l
1 या 0 आउटपुट प्राप्त करने के लिए अतिरिक्त जोड़ें ।
grep
विकल्प जोड़ना चाहिए --fixed-strings
।