গিট লগ অন্বেষণ: বিস্তারিত ফাইল পরিবর্তনের ইতিহাস

গিট লগ অন্বেষণ: বিস্তারিত ফাইল পরিবর্তনের ইতিহাস
Shell

স্বতন্ত্র ফাইলগুলির জন্য গিট লগ উন্মোচন করা হচ্ছে

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

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

আদেশ বর্ণনা
--follow একটি ফাইলের নাম পরিবর্তন করা হলেও তার ইতিহাস ট্র্যাক করা হয়েছে তা নিশ্চিত করে।
--pretty=format লগ আউটপুট বিন্যাস কাস্টমাইজ করে।
awk প্যাটার্ন স্ক্যানিং এবং প্রক্রিয়াকরণের জন্য ব্যবহৃত একটি স্ক্রিপ্টিং ভাষা।
os.popen পাইথন স্ক্রিপ্টের মধ্যে থেকে একটি শেল কমান্ড কার্যকর করে এবং আউটপুট প্রদান করে।
split() একটি স্ট্রিংকে একটি তালিকায় বিভক্ত করে যেখানে প্রতিটি শব্দ একটি তালিকা আইটেম।
sys.argv একটি পাইথন স্ক্রিপ্টে পাঠানো কমান্ড-লাইন আর্গুমেন্টের তালিকা।
print() স্ট্যান্ডার্ড আউটপুটে ডেটা আউটপুট করে।

স্ক্রিপ্ট কার্যকারিতা বিস্তারিত ব্যাখ্যা

প্রদত্ত স্ক্রিপ্টগুলি ব্যবহারকারীদের গিট ব্যবহার করে একটি নির্দিষ্ট ফাইলে পরিবর্তনের বিশদ ইতিহাস দেখতে সহায়তা করার জন্য ডিজাইন করা হয়েছে। শেল স্ক্রিপ্ট একটি ফাইলের নাম প্রদান করা হয়েছে কিনা তা পরীক্ষা করে শুরু হয়; যদি না হয়, এটি একটি ব্যবহার বার্তা প্রদর্শন করে এবং প্রস্থান করে। যখন একটি ফাইলের নাম প্রদান করা হয়, তখন এটি একটি ভেরিয়েবলে এটিকে বরাদ্দ করে এবং তারপর ফাইলটির নাম পরিবর্তন করা হলেও ফাইলের ইতিহাস ট্র্যাক করতে **--অনুসরণ** বিকল্পের সাথে একটি **গিট লগ** কমান্ড চালায়। **--pretty=format** অপশনটি লগ আউটপুট কাস্টমাইজ করতে ব্যবহৃত হয়, কমিট হ্যাশ, লেখক, তারিখ এবং কমিট মেসেজ দেখায়। স্ক্রিপ্ট তারপর লাইন দ্বারা লগ আউটপুট লাইন মাধ্যমে পড়া. যদি লাইনে ফাইলের নাম থাকে, তাহলে এটি কমিট হ্যাশ বের করে এবং ফাইলের বিষয়বস্তু যেমন কমিটে ছিল সেভাবে প্রদর্শন করতে **git show** কমান্ড ব্যবহার করে।

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

বিস্তারিত ফাইল পরিবর্তন দেখতে গিট লগ ব্যবহার করে

বিস্তারিত গিট লগ বিশ্লেষণের জন্য শেল স্ক্রিপ্ট

# Shell script to view file change history with details
#!/bin/bash

# Check if a filename is provided
if [ -z "$1" ]; then
  echo "Usage: $0 <filename>"
  exit 1
fi

filename=$1

# Display the commit history and diff for each commit
git log --follow --pretty=format:"%h - %an, %ar : %s" --name-status $filename | while read line; do
  if [[ $line == *".*" ]]; then
    commit=$(echo $line | awk '{print $1}')
    git show $commit:$filename
  else
    echo $line
  fi
done

পাইথনের সাথে স্বয়ংক্রিয় গিট লগ

পাইথন স্ক্রিপ্ট এক্সট্র্যাক্ট করতে এবং গিট লগের বিবরণ প্রদর্শন করে

import os
import sys

def get_git_log(filename):
    log_command = f"git log --follow --pretty=format:'%h - %an, %ar : %s' --name-status {filename}"
    logs = os.popen(log_command).read().strip().split('\n')
    for log in logs:
        if filename in log:
            commit = log.split()[0]
            diff_command = f"git show {commit}:{filename}"
            diff = os.popen(diff_command).read().strip()
            print(diff)
        else:
            print(log)

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py <filename>")
        sys.exit(1)
    filename = sys.argv[1]
    get_git_log(filename)

Git-এ ফাইলের ইতিহাস দেখার জন্য উন্নত কৌশল

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

কমিট ইতিহাসের আরও গ্রাফিকাল উপস্থাপনার জন্য, যেমন সরঞ্জাম gitk বা git log --graph নিয়োগ করা যেতে পারে। এই কমান্ডগুলি একটি গ্রাফ হিসাবে প্রতিশ্রুতি ইতিহাসকে কল্পনা করে, যার ফলে শাখা এবং একত্রীকরণ কার্যক্রম বোঝা সহজ হয়। অতিরিক্তভাবে, আইডিইগুলির সাথে গিটকে একীভূত করা বা সোর্সট্রি, গিটক্র্যাকেন বা গিটহাব ডেস্কটপের মতো জিইউআই সরঞ্জামগুলি ব্যবহার করা কমিট ইতিহাস এবং পরিবর্তনগুলি অন্বেষণ করার জন্য একটি স্বজ্ঞাত ইন্টারফেস সরবরাহ করতে পারে। এই সরঞ্জামগুলিতে প্রায়শই ব্লেম ভিউ, বিশদ পার্থক্য এবং ইতিহাসের গ্রাফের মতো বৈশিষ্ট্যগুলি অন্তর্ভুক্ত থাকে, যা গিট-এর শক্তিশালী সংস্করণ নিয়ন্ত্রণ ক্ষমতাগুলির ব্যবহারযোগ্যতা এবং অ্যাক্সেসযোগ্যতাকে আরও বাড়িয়ে তোলে।

Git-এ ফাইলের ইতিহাস দেখার বিষয়ে সাধারণ প্রশ্ন ও উত্তর

  1. আমি কিভাবে গিটে একটি ফাইলের কমিট ইতিহাস দেখতে পারি?
  2. ব্যবহার git log -- [filename] একটি নির্দিষ্ট ফাইলের কমিট ইতিহাস দেখতে কমান্ড।
  3. আমি কিভাবে একটি ফাইলের জন্য প্রতিটি প্রতিশ্রুতিতে করা পরিবর্তনগুলি দেখতে পারি?
  4. ব্যবহার git log -p -- [filename] প্রতিটি কমিটের জন্য প্যাচ (ডিফ) তথ্য দেখতে কমান্ড।
  5. কি করে git blame আদেশ করবেন?
  6. দ্য git blame কমান্ডটি একটি ফাইলের প্রতিটি লাইনের সংশোধন এবং লেখক সর্বশেষ পরিবর্তন দেখায়।
  7. আমি কিভাবে একটি গ্রাফ হিসাবে প্রতিশ্রুতি ইতিহাস দেখতে পারি?
  8. ব্যবহার git log --graph একটি গ্রাফ হিসাবে প্রতিশ্রুতি ইতিহাস কল্পনা করতে কমান্ড.
  9. গিট ইতিহাস দেখার জন্য গ্রাফিকাল টুল আছে কি?
  10. হ্যাঁ, যেমন সরঞ্জাম SourceTree, GitKraken, এবং GitHub Desktop গিট ইতিহাস দেখার জন্য গ্রাফিকাল ইন্টারফেস প্রদান করে।
  11. নাম পরিবর্তন করা হয়েছে এমন একটি ফাইলের পরিবর্তনগুলি কীভাবে ট্র্যাক করব?
  12. ব্যবহার git log --follow -- [filename] নাম পরিবর্তন জুড়ে ইতিহাস ট্র্যাক করার কমান্ড।
  13. আমি কি একটি IDE এর মধ্যে একটি ফাইলের ইতিহাস দেখতে পারি?
  14. হ্যাঁ, ভিজ্যুয়াল স্টুডিও কোড এবং ইন্টেলিজে আইডিইএর মতো অনেক আইডিই-তে বিল্ট-ইন গিট ইতিহাস দেখার ক্ষমতা রয়েছে।

গিট ফাইল ইতিহাস বিশ্লেষণের জন্য ব্যাপক কৌশল

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

কমিট ইতিহাসের আরও গ্রাফিকাল উপস্থাপনার জন্য, যেমন সরঞ্জাম gitk বা git log --graph নিয়োগ করা যেতে পারে। এই কমান্ডগুলি একটি গ্রাফ হিসাবে প্রতিশ্রুতি ইতিহাসকে কল্পনা করে, যার ফলে শাখা এবং একত্রীকরণ কার্যক্রম বোঝা সহজ হয়। অতিরিক্তভাবে, আইডিইগুলির সাথে গিটকে একীভূত করা বা সোর্সট্রি, গিটক্র্যাকেন বা গিটহাব ডেস্কটপের মতো জিইউআই সরঞ্জামগুলি ব্যবহার করা কমিট ইতিহাস এবং পরিবর্তনগুলি অন্বেষণ করার জন্য একটি স্বজ্ঞাত ইন্টারফেস সরবরাহ করতে পারে। এই সরঞ্জামগুলিতে প্রায়শই ব্লেম ভিউ, বিশদ পার্থক্য এবং ইতিহাসের গ্রাফের মতো বৈশিষ্ট্যগুলি অন্তর্ভুক্ত থাকে, যা গিট-এর শক্তিশালী সংস্করণ নিয়ন্ত্রণ ক্ষমতাগুলির ব্যবহারযোগ্যতা এবং অ্যাক্সেসযোগ্যতাকে আরও বাড়িয়ে তোলে।

টেকনিক আপ মোড়ানো

কার্যকর সংস্করণ নিয়ন্ত্রণের জন্য Git-এ একটি ফাইলের বিস্তারিত ইতিহাস বোঝা অত্যন্ত গুরুত্বপূর্ণ। মত কমান্ড ব্যবহার করে git log, git blame, এবং git diff, গ্রাফিকাল সরঞ্জাম সহ, আপনি আপনার কোডবেসের বিবর্তনের গভীর অন্তর্দৃষ্টি পেতে পারেন। এই কৌশলগুলি নির্দিষ্ট পরিবর্তনগুলি সনাক্ত করতে, লেখকত্ব ট্র্যাক করতে এবং প্রতিশ্রুতির ইতিহাসকে ভিজ্যুয়ালাইজ করতে সাহায্য করে, গিটকে ডেভেলপারদের জন্য একটি অপরিহার্য হাতিয়ার করে তোলে।