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

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

একটি গিট কমিট এ ফাইল দেখা

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

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

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

স্ক্রিপ্ট ফাংশন বিস্তারিত ব্যাখ্যা

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

পাইথন স্ক্রিপ্ট একটি অনুরূপ ফাংশন সম্পাদন করে কিন্তু পাইথন ব্যবহার করে subprocess চালানোর জন্য মডিউল git diff-tree আদেশ এটি কমান্ডের আউটপুট ক্যাপচার করে এবং কনসোলে প্রিন্ট করে। এই স্ক্রিপ্ট কমান্ড-লাইন আর্গুমেন্টের সঠিক সংখ্যার জন্য পরীক্ষা করে, প্রয়োজনে একটি ত্রুটি বার্তা প্রিন্ট করে এবং তারপর গিট কমান্ড চালানোর জন্য এগিয়ে যায়। দ্য subprocess.run কমান্ড এক্সিকিউশন পরিচালনা করার জন্য এখানে ফাংশন ব্যবহার করা হয়, স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয়ই ক্যাপচার করে। এই পদ্ধতিটি পাইথন ওয়ার্কফ্লোতে গিট অপারেশনগুলিকে একীভূত করার জন্য এবং পাইথন অ্যাপ্লিকেশনের মধ্যে আউটপুটের আরও প্রক্রিয়াকরণের প্রয়োজন হতে পারে এমন ক্ষেত্রে কার্যকর।

Node.js স্ক্রিপ্ট একই লক্ষ্য অর্জন করে কিন্তু ব্যবহার করে exec Node.js এর থেকে ফাংশন child_process মডিউল এটি একটি আর্গুমেন্ট হিসাবে একটি কমিট হ্যাশ নেয় এবং কার্যকর করে git diff-tree উপযুক্ত বিকল্প সহ কমান্ড। স্ক্রিপ্ট আউটপুট ক্যাপচার করে এবং এটি প্রিন্ট করে, এক্সিকিউশনের সময় যে কোনও ত্রুটি দেখা দেয়। এই স্ক্রিপ্টটি ডেভেলপারদের জন্য বিশেষভাবে সুবিধাজনক যারা JavaScript বা Node.js পরিবেশে কাজ করে এবং তাদের অ্যাপ্লিকেশন বা স্বয়ংক্রিয় ওয়ার্কফ্লোতে গিট অপারেশনগুলিকে অন্তর্ভুক্ত করতে হয়। প্রতিটি স্ক্রিপ্ট একটি গিট কমিটে ফাইল তালিকাভুক্ত করার একই সমস্যা সমাধানে বিভিন্ন প্রোগ্রামিং ভাষা এবং পরিবেশের বহুমুখীতার উদাহরণ দেয়।

গিট কমান্ড ব্যবহার করে একটি নির্দিষ্ট গিট কমিট-এ ফাইল তালিকাভুক্ত করা

শেল স্ক্রিপ্ট

#!/bin/bash
# This script lists all 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

পাইথনের সাথে একটি গিট কমিটে ফাইলগুলি প্রদর্শন করা হচ্ছে

পাইথন স্ক্রিপ্ট

import subprocess
import sys

def list_files_in_commit(commit_hash):
    try:
        result = subprocess.run(['git', 'diff-tree', '--no-commit-id', '--name-only', '-r', commit_hash],
                                stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        if result.returncode != 0:
            print(f"Error: {result.stderr.strip()}")
        else:
            print(result.stdout.strip())
    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python list_files_in_commit.py <commit_hash>")
    else:
        list_files_in_commit(sys.argv[1])

Node.js ব্যবহার করে গিট কমিট থেকে ফাইল বের করা

Node.js স্ক্রিপ্ট

const { exec } = require('child_process');

function listFilesInCommit(commitHash) {
  exec(`git diff-tree --no-commit-id --name-only -r ${commitHash}`, (error, stdout, stderr) => {
    if (error) {
      console.error(`Error: ${stderr}`);
      return;
    }
    console.log(stdout.trim());
  });
}

const commitHash = process.argv[2];

if (!commitHash) {
  console.log('Usage: node listFilesInCommit.js <commitHash>');
} else {
  listFilesInCommit(commitHash);
}

গিট কমিট এ ফাইল তালিকাভুক্ত করার জন্য উন্নত কৌশল

মৌলিক গিট কমান্ডগুলি ব্যবহার করার বাইরে, একটি নির্দিষ্ট প্রতিশ্রুতিতে ফাইলগুলি তালিকাভুক্ত করার জন্য অন্যান্য উন্নত কৌশল এবং সরঞ্জাম রয়েছে। এমনই একটি হাতিয়ার git log বিভিন্ন বিকল্পের সাথে মিলিত। ব্যবহার করে git log সঙ্গে --name-only এবং --pretty=format: বিকল্প, আপনি আরও কাস্টমাইজড উপায়ে ফাইল তালিকাভুক্ত করতে আউটপুট ফর্ম্যাট করতে পারেন। উদাহরণ স্বরূপ, git log --name-only --pretty=format:"%h %s" -1 [commit_hash] ফাইলের নাম অনুসরণ করে কমিট হ্যাশ এবং বিষয় দেখাবে। এই পদ্ধতিটি আরও নমনীয় আউটপুটের অনুমতি দেয় এবং প্রতিবেদন তৈরি করতে বা অন্যান্য সরঞ্জামগুলির সাথে একীভূত করার জন্য কার্যকর হতে পারে।

আরেকটি পদ্ধতি বিভিন্ন প্রোগ্রামিং ভাষার জন্য উপলব্ধ গিট লাইব্রেরি ব্যবহার করছে, যেমন libgit2 সি এর জন্য, pygit2 পাইথনের জন্য, এবং nodegit Node.js এর জন্য। এই লাইব্রেরিগুলি গিট রিপোজিটরিগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য একটি প্রোগ্রাম্যাটিক উপায় সরবরাহ করে এবং একটি কমিট প্রোগ্রামে ফাইলগুলিকে তালিকাভুক্ত করতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, সঙ্গে pygit2, আপনি একটি কমিট অবজেক্ট অ্যাক্সেস করতে পারেন এবং ফাইলগুলির তালিকা পেতে তার গাছের উপর পুনরাবৃত্তি করতে পারেন। এই পদ্ধতিটি উপকারী যখন আপনাকে সরাসরি অ্যাপ্লিকেশান বা স্ক্রিপ্টগুলিতে গিট কার্যকারিতা সংহত করতে হবে যার জন্য সাধারণ কমান্ড-লাইন আউটপুটের চেয়ে আরও জটিল যুক্তি বা হ্যান্ডলিং প্রয়োজন।

একটি গিট কমিট ফাইল তালিকা সম্পর্কে সাধারণ প্রশ্ন

  1. গিট কমান্ড ব্যবহার করে আমি কীভাবে একটি নির্দিষ্ট কমিটের সমস্ত ফাইল তালিকাভুক্ত করব?
  2. তুমি ব্যবহার করতে পার git diff-tree --no-commit-id --name-only -r [commit_hash] একটি প্রতিশ্রুতিতে সমস্ত ফাইল তালিকাভুক্ত করতে।
  3. Git এ --name-only অপশনের উদ্দেশ্য কি?
  4. দ্য --name-only Git-এর বিকল্পটি প্রকৃত পার্থক্য প্রদর্শন না করে শুধুমাত্র পরিবর্তিত ফাইলের নাম দেখায়।
  5. কমান্ড লাইন ব্যবহার না করে আমি কিভাবে একটি প্রতিশ্রুতিতে ফাইলগুলি তালিকাভুক্ত করতে পারি?
  6. আপনি যেমন গিট লাইব্রেরি ব্যবহার করতে পারেন pygit2 পাইথনের জন্য বা nodegit Node.js-এর জন্য একটি কমিটের ফাইলগুলির তালিকা প্রোগ্রামেটিকভাবে অ্যাক্সেস করতে।
  7. একটি প্রতিশ্রুতিতে ফাইল তালিকাভুক্ত করার সময় আমি কি আউটপুট বিন্যাস কাস্টমাইজ করতে পারি?
  8. হ্যাঁ, আপনি ব্যবহার করতে পারেন git log মত অপশন সহ --pretty=format: একটি প্রতিশ্রুতিতে ফাইল তালিকাভুক্ত করার সময় আউটপুট বিন্যাস কাস্টমাইজ করতে।
  9. গিট শো এবং গিট ডিফ-ট্রির মধ্যে পার্থক্য কী?
  10. git show ডিফ সহ কমিট তথ্য প্রদর্শন করে, যখন git diff-tree প্রতিশ্রুতি দ্বারা প্রভাবিত ফাইলগুলির শুধুমাত্র নাম দেখানোর জন্য ব্যবহার করা যেতে পারে।
  11. একটি গ্রাফিক্যাল গিট ক্লায়েন্ট ব্যবহার করে একটি প্রতিশ্রুতিতে ফাইলগুলি তালিকাভুক্ত করা কি সম্ভব?
  12. হ্যাঁ, বেশিরভাগ গ্রাফিকাল গিট ক্লায়েন্ট তাদের ব্যবহারকারী ইন্টারফেসের মাধ্যমে একটি প্রতিশ্রুতিতে ফাইলগুলির তালিকা দেখার একটি উপায় সরবরাহ করে।
  13. আমি কিভাবে আমার অ্যাপ্লিকেশনে গিট কার্যকারিতা একত্রিত করতে পারি?
  14. আপনি যেমন গিট লাইব্রেরি ব্যবহার করতে পারেন libgit2, pygit2, বা nodegit আপনার অ্যাপ্লিকেশনে সরাসরি গিট কার্যকারিতা সংহত করতে।
  15. গিট কমিট এ ফাইল তালিকাভুক্ত করার জন্য অন্য কোন টুল বা কমান্ড আছে কি?
  16. এছাড়া git diff-tree, তুমি ব্যবহার করতে পার git log এবং বিভিন্ন গিট লাইব্রেরি একটি প্রতিশ্রুতিতে ফাইল তালিকাভুক্ত করতে।

অন্বেষণ আপ মোড়ানো

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