একটি নির্দিষ্ট গিট কমিট এ সমস্ত ফাইল তালিকাভুক্ত করা

একটি নির্দিষ্ট গিট কমিট এ সমস্ত ফাইল তালিকাভুক্ত করা
Shell

গিট কমিট ফাইল তালিকা বোঝা

গিটের সাথে কাজ করার সময়, এমন সময় আসে যখন আপনাকে একটি নির্দিষ্ট প্রতিশ্রুতিতে জড়িত সমস্ত ফাইলের তালিকা দেখতে হবে। এটি পরিবর্তন পর্যালোচনা, ডিবাগিং বা একটি নির্দিষ্ট প্রতিশ্রুতির সুযোগ বোঝার জন্য দরকারী হতে পারে। যাইহোক, নির্দিষ্ট কিছু কমান্ড ব্যবহার করে প্রয়োজনের চেয়ে বেশি তথ্য তৈরি করতে পারে, যেমন বিস্তারিত পার্থক্য।

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

আদেশ বর্ণনা
git diff-tree একটি কমিটের ট্রি স্ট্রাকচার দেখাতে ব্যবহৃত হয়, ভিন্ন তথ্য ছাড়াই একটি প্রদত্ত কমিটের পরিবর্তনগুলি প্রদর্শন করে।
--no-commit-id ফাইল তালিকাকে সরলীকরণ করে আউটপুট থেকে কমিট আইডি বাদ দিতে git diff-tree-এর সাথে ব্যবহার করা বিকল্প।
--name-only অতিরিক্ত বিবরণ ছাড়া শুধুমাত্র প্রভাবিত ফাইলের নাম প্রদর্শন করার বিকল্প।
-r নেস্টেড ডিরেক্টরি সহ কমিটের সমস্ত ফাইল পরিবর্তনগুলি তালিকাভুক্ত করা হয়েছে তা নিশ্চিত করার জন্য পুনরাবৃত্তিমূলক বিকল্প।
subprocess.run Python ফাংশন বহিরাগত কমান্ড চালানোর জন্য এবং একটি স্ক্রিপ্টের মধ্যে আরও প্রক্রিয়াকরণের জন্য তাদের আউটপুট ক্যাপচার করে।
stdout=subprocess.PIPE subprocess.run দ্বারা নির্বাহিত কমান্ডের স্ট্যান্ডার্ড আউটপুট ক্যাপচার করার বিকল্প।
stderr=subprocess.PIPE subprocess.run দ্বারা সঞ্চালিত কমান্ডের স্ট্যান্ডার্ড ত্রুটি ক্যাপচার করার বিকল্প, ত্রুটি পরিচালনার জন্য দরকারী।
check=True একটি ব্যতিক্রম উত্থাপন করার বিকল্প যদি subprocess.run দ্বারা সঞ্চালিত কমান্ড একটি নন-জিরো এক্সিট কোড প্রদান করে।

গিট কমিট ফাইল লিস্টিং স্ক্রিপ্টের বিস্তারিত ব্যাখ্যা

প্রদত্ত শেল স্ক্রিপ্টটি একটি নির্দিষ্ট গিট কমিটের সমস্ত ফাইল তালিকাভুক্ত করার জন্য একটি সরল সমাধান। এটি স্ক্রিপ্টে পাস করা প্রথম আর্গুমেন্ট থেকে কমিট হ্যাশ ক্যাপচার করে শুরু হয়। যদি কোন কমিট হ্যাশ প্রদান করা না হয়, এটি একটি ব্যবহার বার্তা প্রদর্শন করে এবং প্রস্থান করে। এই স্ক্রিপ্টে ব্যবহৃত প্রধান কমান্ড হল git diff-tree --no-commit-id --name-only -r. দ্য --no-commit-id বিকল্পটি আউটপুট থেকে কমিট আইডি বাদ দেয়, যখন --name-only বিকল্পটি নিশ্চিত করে যে শুধুমাত্র ফাইলের নামগুলি প্রদর্শিত হবে। দ্য -r বিকল্পটি কমান্ডটিকে পুনরাবৃত্তিমূলক করে তোলে, যার অর্থ এটি কমিট দ্বারা প্রভাবিত সমস্ত ডিরেক্টরিতে ফাইলগুলিকে তালিকাভুক্ত করবে। এই স্ক্রিপ্টটি এমন ব্যবহারকারীদের জন্য উপযোগী যাদের আউটপুটে কোনো অতিরিক্ত তথ্য বিশৃঙ্খল না হয়ে প্রদত্ত প্রতিশ্রুতিতে কোন ফাইলগুলি পরিবর্তন করা হয়েছে তা দেখতে একটি দ্রুত এবং সহজ উপায় প্রয়োজন।

পাইথন স্ক্রিপ্ট একই লক্ষ্য অর্জনের জন্য আরও প্রোগ্রামেটিক পদ্ধতির প্রস্তাব করে। এটি ব্যবহার করে subprocess স্ক্রিপ্টের মধ্যে থেকে গিট কমান্ড চালানোর জন্য মডিউল। কাজ list_commit_files একটি আর্গুমেন্ট হিসাবে একটি কমিট হ্যাশ নেয় এবং কমান্ডটি কার্যকর করে git diff-tree --no-commit-id --name-only -r ব্যবহার subprocess.run. দ্য stdout=subprocess.PIPE এবং stderr=subprocess.PIPE বিকল্পগুলি যথাক্রমে কমান্ডের আদর্শ আউটপুট এবং ত্রুটি ক্যাপচার করে। দ্য check=True অপশন নিশ্চিত করে যে কমান্ড ব্যর্থ হলে একটি ব্যতিক্রম উত্থাপিত হয়। আউটপুটটি বাইট থেকে একটি স্ট্রিং-এ ডিকোড করা হয় এবং লাইনে বিভক্ত হয়, যা পরে মুদ্রিত হয়। এই স্ক্রিপ্টটি বৃহত্তর পাইথন প্রোগ্রামগুলিতে একীকরণের জন্য আদর্শ যেখানে আপনাকে একটি প্রতিশ্রুতিতে প্রোগ্রামে পরিবর্তন করা ফাইলগুলির তালিকা প্রক্রিয়া বা বিশ্লেষণ করতে হবে।

ভিন্ন তথ্য ছাড়াই একটি প্রতিশ্রুতিতে ফাইল তালিকাভুক্ত করার জন্য গিট ব্যবহার করা

শেল স্ক্রিপ্ট ব্যবহার করে

#!/bin/bash
# Script to list files in a given Git commit
commit_hash=$1
if [ -z "$commit_hash" ]; then
  echo "Usage: $0 <commit_hash>"
  exit 1
fi
git diff-tree --no-commit-id --name-only -r $commit_hash
exit 0

গিটে কমিট ফাইল এক্সট্র্যাক্ট করার জন্য প্রোগ্রাম্যাটিক অ্যাপ্রোচ

পাইথন স্ক্রিপ্ট ব্যবহার করা

import subprocess
import sys
def list_commit_files(commit_hash):
    try:
        result = subprocess.run(['git', 'diff-tree', '--no-commit-id', '--name-only', '-r', commit_hash],
                               stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
        files = result.stdout.decode('utf-8').splitlines()
        for file in files:
            print(file)
    except subprocess.CalledProcessError as e:
        print(f"Error: {e.stderr.decode('utf-8')}", file=sys.stderr)
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py <commit_hash>")
        sys.exit(1)
    commit_hash = sys.argv[1]
    list_commit_files(commit_hash)

ভিন্ন তথ্য ছাড়াই একটি প্রতিশ্রুতিতে ফাইল তালিকাভুক্ত করার জন্য গিট ব্যবহার করা

শেল স্ক্রিপ্ট ব্যবহার করে

#!/bin/bash
# Script to list files in a given Git commit
commit_hash=$1
if [ -z "$commit_hash" ]; then
  echo "Usage: $0 <commit_hash>"
  exit 1
fi
git diff-tree --no-commit-id --name-only -r $commit_hash
exit 0

গিটে কমিট ফাইল এক্সট্র্যাক্ট করার জন্য প্রোগ্রাম্যাটিক অ্যাপ্রোচ

পাইথন স্ক্রিপ্ট ব্যবহার করে

import subprocess
import sys
def list_commit_files(commit_hash):
    try:
        result = subprocess.run(['git', 'diff-tree', '--no-commit-id', '--name-only', '-r', commit_hash],
                               stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
        files = result.stdout.decode('utf-8').splitlines()
        for file in files:
            print(file)
    except subprocess.CalledProcessError as e:
        print(f"Error: {e.stderr.decode('utf-8')}", file=sys.stderr)
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py <commit_hash>")
        sys.exit(1)
    commit_hash = sys.argv[1]
    list_commit_files(commit_hash)

গিট কমিট-এ ফাইল তালিকাভুক্ত করার বিকল্প পদ্ধতি

ব্যবহারের বাইরে git diff-tree, গিট কমিট-এ ফাইল তালিকাভুক্ত করার অন্যান্য পদ্ধতি রয়েছে, যার প্রত্যেকটির নিজস্ব ব্যবহারের ক্ষেত্রে এবং সুবিধা রয়েছে। যেমন একটি পদ্ধতি হল git ls-tree আদেশ এই কমান্ডটি একটি ট্রি অবজেক্টের বিষয়বস্তু তালিকাভুক্ত করতে পারে, যা গিটে একটি কমিটের সাথে মিলে যায়। কমিট হ্যাশ এবং নির্দিষ্ট করে --name-only বিকল্প, আপনি ফাইল নামের একটি সরল তালিকা পুনরুদ্ধার করতে পারেন। এই পদ্ধতিটি একটি কমিটের গঠন অন্বেষণ এবং নির্দিষ্ট সময়ে একটি নির্দিষ্ট সময়ে রিপোজিটরির মধ্যে ফাইলগুলির শ্রেণিবিন্যাস সংস্থা বোঝার জন্য বিশেষভাবে কার্যকর।

আরেকটি পদ্ধতির ব্যবহার জড়িত git show অবাঞ্ছিত তথ্য ফিল্টার করার জন্য নির্দিষ্ট বিকল্প সহ কমান্ড। উদাহরণস্বরূপ, --pretty="" সাথে মিলিত বিকল্প --name-only আউটপুটকে শুধুমাত্র ফাইলের নামগুলিতে সীমাবদ্ধ করতে পারে। যদিও git show সাধারণত বিস্তারিত কমিট তথ্য প্রদর্শনের জন্য ব্যবহৃত হয়, এই বিকল্পগুলি অতিরিক্ত বিবরণ ছাড়াই ফাইল তালিকাভুক্ত করার প্রয়োজন মেটাতে এর আউটপুট তৈরি করতে পারে। অতিরিক্তভাবে, গ্রাফিকাল ইন্টারফেস এবং গিট জিইউআই প্রায়শই একটি প্রতিশ্রুতিতে ফাইলগুলিকে তালিকাভুক্ত করার জন্য অন্তর্নির্মিত কার্যকারিতা প্রদান করে, কমান্ড লাইন ব্যবহার না করে কমিট এবং তাদের বিষয়বস্তুগুলি অন্বেষণ করার আরও ব্যবহারকারী-বান্ধব উপায় অফার করে।

একটি গিট কমিট ফাইল তালিকা সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্ন

  1. আমি কীভাবে ডিফগুলি না দেখিয়ে একটি কমিটের ফাইলগুলি তালিকাভুক্ত করতে পারি?
  2. আপনি ব্যবহার করতে পারেন git diff-tree --no-commit-id --name-only -r ডিফ না দেখিয়ে ফাইল তালিকা করার কমান্ড।
  3. এর উদ্দেশ্য কি --name-only গিট কমান্ডের বিকল্প?
  4. দ্য --name-only বিকল্পটি আউটপুটকে শুধুমাত্র প্রভাবিত ফাইলের নামের মধ্যে সীমাবদ্ধ করে, কোনো অতিরিক্ত বিবরণ বাদ দিয়ে।
  5. আমি ব্যবহার করতে পারেন git ls-tree একটি কমিট ফাইল তালিকা?
  6. হ্যাঁ, git ls-tree একটি ট্রি অবজেক্টের বিষয়বস্তু তালিকাভুক্ত করতে ব্যবহার করা যেতে পারে, যেমন একটি কমিট, কমিট হ্যাশ নির্দিষ্ট করে এবং --name-only বিকল্প
  7. একটি গ্রাফিকাল ইন্টারফেস ব্যবহার করে একটি প্রতিশ্রুতিতে ফাইল তালিকাভুক্ত করার একটি উপায় আছে কি?
  8. অনেক গিট জিইউআই এবং গ্রাফিক্যাল ইন্টারফেসে একটি প্রতিশ্রুতিতে ফাইলগুলিকে তালিকাভুক্ত করার জন্য অন্তর্নির্মিত কার্যকারিতা রয়েছে, যা কমিট বিষয়বস্তুগুলি অন্বেষণ করার আরও ব্যবহারকারী-বান্ধব উপায় প্রদান করে।
  9. কি করে --no-commit-id বিকল্প করতে git diff-tree?
  10. দ্য --no-commit-id বিকল্পটি আউটপুট থেকে কমিট আইডি বাদ দেয়, ফাইলের তালিকাকে সরল করে।
  11. আমি কিভাবে পাইথন স্ক্রিপ্টে গিট কমান্ডগুলিকে সংহত করতে পারি?
  12. আপনি ব্যবহার করতে পারেন subprocess Python এ মডিউল গিট কমান্ড চালাতে এবং পরবর্তী প্রক্রিয়াকরণের জন্য তাদের আউটপুট ক্যাপচার করতে।
  13. কি করে check=True অপশনে করতে হবে subprocess.run ফাংশন?
  14. দ্য check=True অপশনটি একটি ব্যতিক্রম উত্থাপন করে যদি কমান্ডটি দ্বারা নির্বাহ করা হয় subprocess.run একটি অ-শূন্য প্রস্থান কোড প্রদান করে, ত্রুটি পরিচালনা নিশ্চিত করে।
  15. এই গিট কমান্ড ব্যবহার করার সাথে যুক্ত কোন ঝুঁকি আছে?
  16. এই গিট কমান্ডগুলি সাধারণত ফাইলগুলি তালিকাভুক্ত করার জন্য ব্যবহার করা নিরাপদ, তবে অনিচ্ছাকৃত ফলাফল এড়াতে সঠিক কমিট হ্যাশ নির্দিষ্ট করা হয়েছে তা নিশ্চিত করা গুরুত্বপূর্ণ।

একটি গিট প্রতিশ্রুতিতে ফাইলগুলি তালিকাভুক্ত করার বিষয়ে চূড়ান্ত চিন্তাভাবনা

একটি নির্দিষ্ট গিট কমিটের সমস্ত ফাইল তালিকাভুক্ত করা পরিবর্তনের সুযোগ বোঝার জন্য অপরিহার্য। মত কমান্ড ব্যবহার করে git diff-tree এবং git ls-tree, অথবা শেল এবং পাইথন স্ক্রিপ্টের মাধ্যমে অটোমেশন প্রয়োগ করে, আপনি ফাইলগুলির একটি পরিষ্কার এবং সংক্ষিপ্ত তালিকা অর্জন করতে পারেন। এই পদ্ধতিগুলি পর্যালোচনা প্রক্রিয়াটিকে স্ট্রিমলাইন করতে সাহায্য করে, পরিবর্তনগুলিকে ট্র্যাক করা এবং সংগ্রহস্থলগুলিকে কার্যকরভাবে পরিচালনা করা সহজ করে তোলে।