কোনও ফাইলকে গিট ট্র্যাক করা হয়েছে কিনা তা কীভাবে বলবেন (শেল প্রস্থান কোড দ্বারা)?


357

কোনও gitকমান্ড চালিয়ে এবং এর প্রস্থান কোডটি পরীক্ষা করে কোনও ফাইলকে ট্র্যাক করা হচ্ছে কিনা তা বলার উপায় আছে ?

অন্য কথায়: গিট একটি ফাইল ট্র্যাক করছে?


আমি মনে করি মুল বক্তব্যটি হ'ল ট্র্যাকড বা তালিবদ্ধ না হওয়া হিসাবে কোনও ফাইল সিদ্ধান্ত নেওয়ার মানদণ্ড কী। অনুসন্ধানের জন্য ট্র্যাক করা ফাইলের এক ধরণের সংগ্রহ থাকতে হবে।
smwikedia 26'11

উত্তর:


443

চেষ্টা করে দেখুন:

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

ফাইল ট্র্যাক না করা থাকলে 1 দিয়ে প্রস্থান করবে


কমপক্ষে আমার পুরানো (১.6.০) সংস্করণের গিটের সাথে, ত্রুটি পাওয়ার জন্য আপনার ফাইলনামের আগে--error-unmatch বিকল্পটি রাখা দরকার । কোনওভাবে বিকল্পটি কেবল ফাইলের নামগুলিতে প্রয়োগ করা হয় যা এটি অনুসরণ করে।
অ্যালেক্স দুপুয়

প্রকৃতপক্ষে, সমস্যাটি মনে হয় যে GNU getopt বিকল্পের অনুমতি দেওয়া সক্রিয় করা নেই, এবং কোনও ফাইলের নাম (বা পরে --) উপস্থিত হওয়ার পরে --error-unmatchএকে অন্য একটি (সূচীতে নয়) ফাইলনাম হিসাবে গণ্য করা হয় এবং এর কোনও প্রভাব নেই।
অ্যালেক্স দুপুয়

29
git ls-files | grep <PATTERN>? উদাহরণ:git ls-files | grep Main.h
গাউসব্লুরিনিক

1
[একটি নিখুঁত উপায়] ফাইলে একটি ছোট পরিবর্তন করুন (একটি স্থান যুক্ত / সরান)। এবং 'গিট স্ট্যাটাস' টাইপ করার সময় ফাইলটি তালিকাভুক্ত হচ্ছে কিনা তা দেখুন। একটি নির্বোধ উপায়, তবে সময় সাশ্রয় করতে পারে।
সাহসী নিনজা 4'16

তবে আমি এটি "গিট অ্যাড-এ & অ্যান্ড গিট কমিট-এম" ব্লাহ "কমান্ড দিয়ে যুক্ত করেছি এবং প্রতিশ্রুতিবদ্ধ করছি Even এমনকি" গিট
এলএস

66

আপনি যদি ত্রুটি বার্তাগুলি সহ আপনার কনসোলকে বিশৃঙ্খলা করতে না চান তবে আপনি চালাতেও পারেন

git ls-files file_name

এবং তারপরে ফলাফলটি পরীক্ষা করুন। যদি গিট কিছু না দেয় তবে ফাইলটি ট্র্যাক করা যায় না। যদি এটি ট্র্যাক করা হয়, গিট ফাইলের পথটি ফিরিয়ে দেবে।

আপনি যদি এটি কোনও স্ক্রিপ্টে সংযুক্ত করতে চান তবে এটি কার্যকর হবে, উদাহরণস্বরূপ পাওয়ারশেল:

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

আমার মনে file_nameহয় একটি সঠিক ম্যাচ হওয়া উচিত (পুরো পাথ + ফাইলের নাম) তবে ওয়াইল্ডকার্ডের সাথে এটি ব্যবহার করা যেতে পারে:git ls-files *foo.rb
ডিসিহিম্প ২

16

সম্পাদনা

আপনার যদি বাশ থেকে গিট ব্যবহার করতে হয় তবে এতে --porcelainবিকল্প রয়েছে git status:

--porcelain

স্ক্রিপ্টগুলির জন্য আউটপুটটিকে একটি স্থিতিশীল, সহজে-পার্সে ফর্ম্যাটটিতে দিন। বর্তমানে এটি - শর্ট আউটপুটের অনুরূপ, তবে এটি স্ক্রিপ্টগুলির জন্য নিরাপদ করে ভবিষ্যতে পরিবর্তন না করার গ্যারান্টিযুক্ত।

আউটপুট এর মতো দেখাচ্ছে:

> 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 চীনামাটির
বাসনটির সংস্করণটি

@ ব্যবহারকারী465139 এটি সঠিক ... আপনার গিট ১.7.০ বা তার থেকেও নতুন দরকার (ততক্ষণে পোরসিলাইন বিকল্পটি যোগ করা হয়নি)।
mason81

13

git statusফাইল চালানোর চেষ্টা করুন। গিট দ্বারা ট্র্যাক না করা থাকলে এটি একটি ত্রুটি মুদ্রণ করবে

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

কি দারুন. আমি অবশ্যই এটি একটি ডিরেক্টরিতে চালিত করেছিলাম এবং এটি পুরো রেপো পরীক্ষা করে দেখায় এমন আচরণ করে। ধন্যবাদ।
ডেল ফরেস্টার

4
প্রকৃতপক্ষে, আমি git status trackedfileচালিয়ে গেলে আমি প্রস্থান কোড 1 পাই (আশা করি 0 কার্যকর হবে) তবে এটি আমাকে আউটপুটে "ত্রুটি:" দেয় না। আমি স্ট্রিং আউটপুট চেয়ে একটি প্রস্থান কোড পার্স করব।
ডেল ফরেস্টার

43
আমি দেখতে পেয়েছি যে আমি যদি আমার গিট ওয়ার্কিং কপির মধ্যে উপস্থিত একটি ফাইলের উপরে গিট স্থিতি চালনা করি তবে কোনও ত্রুটি উত্থাপিত হয় না যা .gitignore দ্বারা বাদ পড়ে। (
অর্থাত্

দয়া করে নোট করুন যে ফাইলটি যদি উপেক্ষা তালিকার তালিকায় থাকে তবে ফাইলটিতে এটি ভাল কাজ করে না.gitignore
রবিন হু

8
যে কাজ করে না। ফাইলটি না থাকলেও এটি সর্বদা একই জিনিস প্রিন্ট করে। $ git status notthere:On branch master nothing to commit, working directory clean
ক্লো

6

আমি কোনও গিট কমান্ড সম্পর্কে জানি না যা "খারাপ" প্রস্থান কোড দেয় তবে এটি করার সহজ উপায় বলে মনে হয় এটি একটি গিট কমান্ড ব্যবহার করা যা কোনও ফাইলকে ট্র্যাক করে না এমন আউটপুট দেয় না যেমন, গিট-লগ বা গিট-এলএস-ফাইল। এইভাবে আপনাকে কোনও পার্সিং করতে হবে না, আপনি গ্রেপের মতো অন্য একটি সহজ ইউটিলিটি দিয়ে এটি চালাতে পারেন কোনও আউটপুট রয়েছে কিনা তা দেখার জন্য।

উদাহরণ স্বরূপ,

git-ls-file test_file.c | গ্রেপ

ফাইলটি ট্র্যাক করা থাকলে একটি শূন্য কোড সহ প্রস্থান করবে, তবে যদি ফাইলটি ট্র্যাক না করা হয় তবে তার একটির প্রস্থান কোড।


3

আমি আপনাকে একটি কাস্টম ওরফে পরামর্শ দিচ্ছি .gitconfig

আপনাকে করতে হবে:

1) গিট কমান্ড সহ:

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

2

ব্যবহার করে git logএই সম্পর্কে তথ্য দিতে হবে। যদি গিটটিতে ফাইলটি ট্র্যাক করা হয় তবে কমান্ডটি কিছু ফলাফল (লগ) দেখায়। অন্যথায় এটি খালি।

উদাহরণস্বরূপ, যদি ফাইলটি গিট ট্র্যাক করা হয়,

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#

1

শুধু আমার দুটি সেন্ট:

git ls-files | grep -x relative/path

যেখানে স্বতঃ-সমাপ্তি শেলের মধ্যে relative/pathচাপ দিয়ে সহজেই নির্ধারণ করা যায় tab| wc -l 1 বা 0 আউটপুট পেতে অতিরিক্ত যুক্ত করুন ।


পথের উপর নির্ভর করে (উদাহরণস্বরূপ যদি এটিতে কোনও বিন্দু থাকে), আপনার grepবিকল্প যুক্ত করা উচিত --fixed-strings
এন্ড্লোস স্ক্লাইফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.