গিট

**গিট** (, ) হল একটি ডিস্ট্রিবিউটেড সংস্করণ নিয়ন্ত্রণ (*version control*) পদ্ধতি যা প্রধানত প্রোগ্রামিং প্রকল্পের উৎস কোডের পরিবর্তন সংরক্ষণে ব্যবহার করা হয়। এটি প্রোগ্রামারদের মধ্যে কাজের সমন্বয় করার উদ্দেশ্যে তৈরি হলেও যেকোন ধরনের কম্পিউটার ফাইলের পরিবর্তন রক্ষায় ব্যবহার করায় কোন বাধা নেই। গিটের লক্ষ্যসমূহ হল দ্রুতগতি, তথ্যের বিশুদ্ধতা, এবং ডিস্ট্রিবিউটেড জটিল বহুমাত্রিক প্রকল্পের সমর্থন।

লিনাস টরভাল্ড্‌স লিনাক্স কার্নেল প্রোগ্রামিংয়ে সুবিধার জন্য ২০০৫ সালে গিট তৈরি শুরু করেন, এবং অন্যান্য কার্নেল ডেভেলপাররা তাকে প্রারম্ভিক সহায়তা দেন। বর্তমানে এর তত্ত্বাবধায়ক হিসেবে রয়েছেন জুনিও হামানো।

কম্পিউটারে অবস্থিত প্রতিটি গিট ডিরেক্টরি একেকটি পুরোপুরি স্বয়ংসম্পূর্ণ রিপজিটরি (*repository*) বা সোর্সভাণ্ডার, এবং কোন ধরনের কেন্দ্রীয় সার্ভারের নিয়ন্ত্রণমুক্ত।

গ্নু জেনারেল পাবলিক লাইসেন্স, ২য় সংস্করণ (GPLv2) এর আওতায় ফ্রি এবং ওপেন সোর্স সফটওয়্যার হিসেবে গিট প্রকাশিত হয়।

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

টরভাল্ড‌্স যেসব বৈশিষ্ট্য আশা করছিলেন, তা তৎকালীন কোন ভার্শন কন্ট্রোল পদ্ধতিতেই উপস্থিত ছিল না। যেমন, সেসব পদ্ধতিতে সোর্স কোডে প্যাচ প্রয়োগ করতে প্রায় ৩০ সেকেন্ড সময় লাগত, উপরন্তু লিনাক্স কার্নেলের বিস্তৃত সোর্স কোডে এই সময়ের পরিমাণ আরও অণেক গুণ বেড়ে যেত। কিন্তু টরভাল্ড‌্স এক্ষেত্রে ৩ সেকেন্ডের বেশি সময় দিতে রাজি ছিলেন না। এছাড়া তিনি আরও কয়েকটি লক্ষ্য নির্ধারণ করেন:

* সিভিএস থেকে কি করা উচিত *নয়*, তা শেখা; কোন বিষয়ে সন্দেহ হলে সিভিএস যা করে তার ঠিক উল্টো পথ বাছাই করা
* ডিস্ট্রিবিউটেড কার্যপদ্ধতির সমর্থন
* তথ্যের বিকৃতি (অনৈচ্ছিক বা ইচ্ছাকৃত যেমনটাই হোক) ব্যাহত করার জন্য খুব কঠোর ব্যবস্থা রাখা

এসব লক্ষ্য পূরণ করার মত কোন ব্যবস্থা না পেয়ে, লিনাক্স কার্নেল ২.৬.১২-rc২ সংস্করণ প্রকাশের পর টরভাল্ড‌্স নিজেই এধরনের একটি সফটওয়্যার লিখতে বসেন।

২০০৫ এর ৩ এপ্রিল গিট ডেভলপ করা শুরু হয়। টরভাল্ড‌্স ৬ তারিখে প্রকল্পটি প্রকাশ করেন। ৭ এপ্রিল গিট স্ব-আশ্রিত হয় (অর্থাৎ গিটের সোর্স কোড গিট দ্বারাই সংরক্ষণ করা শুরু হয়)। ২০০৫ এর ১৬ জুন প্রকাশিত লিনাক্স কার্নেল ২.৬.১২ ছিল গিটের ব্যবস্থাপনাধীনে মুক্তিপ্রাপ্ত প্রথম সংস্করণ।

২০০৫ এর ২৬ জুলাই টরভাল্ড‌্স গিটের তত্ত্বাবধায়নের দায়িত্ব প্রকল্পটির অন্যতম অবদানকারী জুনিও হামানোকে দিয়ে দেন। হামানো ২০০৫ সালের ২১ ডিসেম্বর গিট ১.০ সংস্করণ প্রকাশ করেন। এখনও তিনি গিটের তত্ত্বাবধায়নের দায়িত্বে রয়েছেন।

### নাম
ব্রিটিশ ইংরেজি অপভাষায় গিট বলতে *বিরক্তিকর লোক* বোঝায়। টরভালড‌্স শ্লেষ্মাত্বকভাবে নামটির সম্পর্কে বলেছেন, "আমি মহা অহংকারী লোক, তাই সব প্রজেক্টের নাম নিজের নামেই দিই, প্রথমে 'লিনাক্স', এবার 'গিট'."। গিটের ম্যান পেজ বর্ণনা করে এভাবে: "দ্য স্টুপিড কনটেন্ট ট্র্যাকার"। সোর্স কোডের রিডমি ফাইল আরও বিস্তারিতভাবে বলে:

উল্লেখ্য, এখানে "global information tracker" এবং "goddamn idiotic truckload of sh*t" বাক্যদুটি সংক্ষিপ্ত রূপ "git" হতে পারে।

### প্রকাশনা সমূহ
প্রকাশনা সংস্করণ সংখ্যা পেতে : 

```command
git --version
```


প্রকাশনার তালিকা নিম্নরূপ : 

## বৈশিষ্ট্য
গিটের নকশার অনুপ্রেরণা ছিল বিটকিপার এবং মোনোটোন। গিট প্রথমদিকে তৈরি করা হয়েছিল নিজস্ব ফ্রন্ট-এন্ড বিহীন ভার্সন-কন্ট্রোল ইঞ্জিন হিসাবে। তবে প্রকল্পটি পরে স্বয়ংসম্পূর্ণ হয়ে উঠেছে, এবং কোন বাহ্যিক ফ্রন্ট-এন্ড ছাড়াই ব্যবহার করা যায়। টরভাল্ড‌্স ইচ্ছা করেই সংস্করণ-নিয়ন্ত্রণ প্রকল্পসমূহের প্রচলিত বিধিমালা এড়িয়ে গেছেন, ফলে গিট একটি অনন্য নকশা অর্জন করেছে।

লিনাক্স কার্নেল তৈরির অভিজ্ঞতাকে টরভাল্ড‌্স গিটে প্রয়োগ করেছেন, যা প্রকল্পটির প্রধান কিছু বৈশিষ্ট্য এবং অনন্যতার উৎস। গিটের মৌলিক কিছু বৈশিষ্ট্য হল:

* অরৈখিক বহুমাত্রিক ডেভলপমেন্ট প্রণালীর সমর্থন
* ডিস্ট্রিবিউটেড কার্যপ্রণালী
* বিদ্যমান প্রোটোকল ও যোগাযোগ পদ্ধতির সমর্থন
* বৃহদাকার প্রকল্পের দ্রুতগতির কর্মক্ষম ব্যবস্থাপনা
* প্রকল্পের ইতিহাসের ক্রিপ্টোগ্রাফিক নিশ্চয়তা
* টুলকিট-নির্ভর নকশা কাঠামো
* সম্প্রসারণযোগ্য মার্জ (সম্মিলন) পদ্ধতি
* স্বয়ংক্রিয় বর্জ্য ব্যবস্থাপনা
* স্বয়ংক্রিয় অবজেক্ট সংকোচন
* প্রকল্পের ফাইলসমূহ ডিরেক্টরি স্ন্যাপশট প্রক্রিয়ায় সংরক্ষণ

### তথ্য কাঠামো

* **স্ট্যাশ** : একরকম অস্থায়ী সঞ্চয় স্থান যেখানে আমাদের স্থানীয় অসমাপ্ত কোড পরিবর্তনগুলো নিবন্ধের পূর্বে রাখা যায়। 
* **ওয়ার্কস্পেস**  : আমাদের কোড পরিবর্তন স্থান । এখানে অনুসৃত , অননুসৃত ফাইল এবং একটি গিট্ ডিরেক্টরি থাকে।  
* **ইন্ডেক্স/স্টেজ** : নিবন্ধের জন্যে কোড পরিবর্তনগুলো এখানে রাখা হয় ।
* **স্থানীয় সঞ্চয়স্থান** : নিবন্ধের পরবর্তীতে স্টেজের সমস্ত ফাইল এখানে রাখা হয়। 
* **মূল সঞ্চয়স্থান** : পুল , পুশ বা ফেচ এর মাধ্যমে স্থানীয় সঞ্চয়স্থানের সাথে দূরবর্তী মূল সঞ্চয়স্থানকে সমন্বিত করা যায়।

## কম্যান্ড সমূহ

### স্থাপনাকালীন
নিবন্ধের সময় ব্যাবহারকারীর নাম জুড়তে : 
```console
git config --global user.name "[your name]"
```
নিবন্ধের সময় ব্যাবহারকারীর ইমেইল আইডি জুড়তে : 
```console
git config --global user.email "[your email address]"
```


### স্থানীয় সঞ্চয় তৈরিতে
বিশেষ নামের সাথে একটি স্থানীয় সঞ্চয়স্থান তৈরিতে : 
```console
git init [name]
```
মূল সঞ্চয়স্থানের একটি প্রতিরূপ তৈরিতে : 
```console
git clone [url]
```


### পরিবর্তন ব্যাবস্থাপনায়
বর্তমান ওয়ার্কস্পেসে সমস্ত ফাইলের স্থিতি জানতে :
```console
git status
```
স্টেজ না করা ফাইল পরিবর্তনগুলো দেখতে :
```console
git diff
```
ওয়ার্কস্পেস থেকে স্টেজে পাঠাতে :
```console
git add [file]
```
স্টেজ থেকে পরিবর্তনগুলো সরাতে :
```console
git reset [file]
```
স্টেজ এবং মূল সংস্করণের পরিবর্তনগুলো জানতে  :
```console
git diff --commit
```
স্থানীয় সঞ্চয়স্থানে স্টেজের সমস্ত পরিবর্তন নিবন্ধন করতে : 
```console
git commit -m "[commit message]"
```
স্থানীয় সঞ্চয়স্থানের  সমস্ত শাখা দেখতে :
```console
git brunch
```
নতুন শাখা তৈরিতে : 
```console
git brunch [name]
```
ওয়ার্কস্পেসে কোনো শাখা চেকআউট করতে  : 
```console
git checkout [name]
```
কোনো শাখাকে বর্তমান শাখায় সংযোজন করতে  : 
```console
git merge [name]
```
কোনো শাখাকে মুছে ফেলতে : 
```console
git branch -d [name]
```


### ফাইল সমন্বয় মূলক
স্থানীয় সঞ্চয় ও স্টেজ থেকে ফাইল মুছে ফেলতে : 
```console
git rm [filename]
```
স্থানীয় সঞ্চয় ও স্টেজ থেকে ফাইল স্থানান্তর করতে  :
```console
git mv [filename-orig] [filename-new]
```


### ইতিহাস মূলক
নিবন্ধ ইতিহাস দেখতে :
```console
git log
```
কোনো ফাইলের নিবন্ধ ইতিহাস দেখতে : 
```console
git log  --follow [file]
```
শাখা গঠন ইতিহাস দেখতে : 
```console
git log --graph --oneline --decorate --all
```
দুটি শাখার  মধ্যে পার্থক্য দেখতে : 
```console
git diff [brunch1]...[brunch2]
```
কোনো নিবন্ধের বিস্তারিত তথ্য দেখতে 
```console
git show [commit]
```


### সমন্বয় মূলক
দূরবর্তী সঞ্চয় থেকে স্থানীয় সঞ্চয়ে নামিয়ে আনতে :
```console
git pull
```
দূরবর্তী সঞ্চয়ে স্থানীয় সঞ্চয় পরিবর্তিনগুলো তুলতে  :
```console
git push
```
স্থানীয় সঞ্চয় থেকে ওয়ার্কস্পেসে সংযোজন করতে :
```console
git merge
```
দূরবর্তী সঞ্চয় থেকে স্থানীয় সঞ্চয়ে শাখাকে পুনরুদ্ধার করে কিন্তু ওয়ার্কস্পেসে সংযোজন করে না :
```console
git fetch [branch]
```


### নিবন্ধ সংক্রান্ত
স্থানীয় সঞ্চয়ে নির্দিষ্ট নিবন্ধ অব্দি সমস্ত নিবন্ধ ফিরিয়ে নিতে : 
```console
git reset [commit]
```
স্টেজ এবং ওয়ার্কস্পেসে নির্দিষ্ট নিবন্ধ অব্দি সমস্ত নিবন্ধ ফিরিয়ে নিতে : 
```console
git reset --hard [commit]
```


### আড়াল সংক্রান্ত
অস্থায়ীভাবে ওয়ার্কস্পেসের পরিবর্তনগুলো আড়াল করতে 
```console
git stash
```
সর্বশেষ আড়াল করা ফাইলগুলোকে পুনরুদ্ধার করতে :
```console
git stash pop
```
আড়াল করা ফাইল তালিকা পেতে 
```console
git stash list
```
সর্বশেষ আড়াল করা ফাইলগুলোকে সরিয়ে ফেলতে :
```console
git stash drop
```


## বাস্তবায়ন

গিট মূলত লিনাক্সে ডেভলপ করা হয়, তবে অধিকাংশ প্রচলিত অপারেটিং সিস্টেম সমর্থন করে।

প্রথম দিকে উইন্ডোজের জন্য তৈরি গিট প্যাকেজটি ছিল প্রকৃতপক্ষে মিনজিডব্লিউ (MinGW) এবং এমসিস২.০ (সিগউইন এর একটি ফর্ক) এর সমন্বয়ে গঠিত একটি গ্নু/লিনাক্স এমুলেশন ফ্রেমওয়ার্ক। বর্তমানে উইন্ডোজের জন্য ন্যাটিভ ৬৪- এবং ৩২-বিটের গিট প্যাকেজ সরবরাহ করা হয় (যদিও এর সঙ্গেও আগের মতই বিভিন্ন সহায়ক গ্নু প্রোগ্রাম অন্তর্ভুক্ত করা থাকে)।

জেগিট (JGit) জাভায় বাস্তবায়িত গিট লাইব্রেরি যা যেকোন জাভা অ্যাপ্লিকেশনে যুক্ত করা যায়। এটি গেরিট এবং ইগিট প্রকল্পদুটির সাহায্যে গঠিত।

গো-গিট হল বিশুদ্ধ গো ভাষায় লিখিত গিটের একটি রূপ। এটি বর্তমানে গিট রিপজিটরির এসকিউএল ইন্টারফেস হিসেবে ব্যবহার করা যায় এবং গিট কর্মপ্রণালী এনক্রিপ্ট করতে পারে।

পাইথন ২ এবং ৩ শাখার জন্য ডালউইচ নামে গিট সংস্করণ বাস্তবায়িত হয়েছে।

গিটের আনসি সি সফটওয়্যার লাইব্রেরি রূপ হিসেবে তৈরি হয়েছে লিবগিট২ (libgit2), যা একাধিক প্লাটফর্মের জন্য বিল্ড করা যায়, এবং রুবি, পাইথন, হাস্কেল সহ আরও কিছু ভাষায় ব্যবহার করার সুবিধা (binding) রয়েছে।

জেএস-গিট হচ্ছে জাভাস্ক্রিপ্টে লেখা গিটের অংশবিশেষের বাস্তবায়ন।

## গিট সার্ভার
যেহেতু গিট একটি বিতরণকৃত সংস্করণ-নিয়ন্ত্রণ সিস্টেম, এটি বাক্সের বাইরে একটি সার্ভার হিসাবে ব্যবহার করা যেতে পারে। এতে git daemon নামে একটি অন্তর্নির্মিত কমান্ড রয়েছে যা GIT প্রোটোকলে চলমান একটি সাধারণ TCP সার্ভার শুরু করে। ডেডিকেটেড গিট এইচটিটিপি সার্ভারগুলি অ্যাক্সেস নিয়ন্ত্রণ যোগ করে, ওয়েব ইন্টারফেসের মাধ্যমে একটি গিট রিপোজিটরির বিষয়বস্তু প্রদর্শন করে এবং একাধিক সংগ্রহস্থল পরিচালনা করে (অন্যান্য বৈশিষ্ট্যগুলির মধ্যে) সহায়তা করে। ইতোমধ্যে বিদ্যমান গিট রিপোজিটরিগুলিকে ক্লোন করা যেতে পারে এবং অন্যদের দ্বারা সেন্ট্রালাইজড রেপো হিসাবে ব্যবহার করার জন্য শেয়ার করা যেতে পারে। সফ্টওয়্যার ইনস্টল করে এবং ব্যবহারকারীকে লগ ইন করার অনুমতি দিয়ে এটি দূরবর্তী শেল থেকেও অ্যাক্সেস করা যেতে পারে ।

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

## প্রচলন
থাম্ব|একটি স্ক্রিনশর্ট
এক্লিপ্স ফাউন্ডেশন ২০১৪ সালের বার্ষিক গণজরিপের প্রতিবেদনে প্রকাশ করে যে, জরিপে অংশগ্রহণকারী পেশাদার প্রোগ্রামারদের মধ্যে সর্বাধিক ৪২.৯% গিটের ব্যবহারকারী, অর্থাৎ গিট সর্বাধিক ব্যবহৃত সংস্করণ-নিয়ন্ত্রণ ব্যবস্থা। মুক্ত-সোর্স ডিরেক্টরি ওপেন হাবও অনুরূপ প্রতিবেদন প্রকাশ করেছে। স্ট্যাক ওভারফ্লো ২০১৫ সালে থেকে তাদের বার্ষিক জরিপে ভার্সন-কন্ট্রোল সফটওয়্যার অন্তর্ভুক্ত করছে। গিট এক্ষেত্রে নিয়মিত অগ্রগণ্য স্থানে রয়েছে, এবং ২০১৮ তে ৮৭.২% এর মত গুরুতর সমর্থনও পেয়েছে। যুক্তরাজ্যের আইটি পেশার চাকরি সেবার ওয়েবসাইট itjobswatch.co.uk এর প্রতিবেদনে দেখা যায়, ২০১৬ সালে যুক্তরাজ্যে প্রোগ্রামিং পেশায় স্থায়ী চাকুরির ২৯.২৭% বিজ্ঞপ্তিতে গিট অভিজ্ঞতা চাওয়া হয়েছে এবং তার নিকটতম প্রতিদ্বন্দ্বী ছিল ১২.১৭% বিজ্ঞপ্তিতে মাইক্রোসফট টীম ফাউন্ডেশন সার্ভার।

## আরও দেখুন
* গিটহাব

## তথ্যসূত্র

## বহি:সংয‌োগ

* 
* 

বিষয়শ্রেণী:ফ্রি সংস্করণ নিয়ন্ত্রণ সফটওয়্যার
বিষয়শ্রেণী:মুক্ত সফটওয়্যার

বিষয়শ্রেণী:স্ব-আশ্রিত সফটওয়্যার
বিষয়শ্রেণী:লিনাস টরভাল্ড্‌স
বিষয়শ্রেণী:জিপিএল লাইসেন্সবাহী সফটওয়্যার
বিষয়শ্রেণী:২০০৫-এর সফটওয়্যার