আপনি কীভাবে "গিট - বার থিম" ভান্ডার ব্যবহার করবেন?


320

আমাকে কেন্দ্রীয় গিট সংগ্রহস্থল তৈরি করতে হবে তবে আমি কিছুটা বিভ্রান্ত ...

আমি একটি খালি সংগ্রহস্থল তৈরি করেছি (আমার গিট সার্ভারে, মেশিন 2) এর সাথে:

$ mkdir test_repo
$ git --bare init

এখন আমার আমার স্থানীয় সংগ্রহস্থল (মেশিন 1) থেকে খালি সংগ্রহস্থল (মেশিন 2) এ ফাইলগুলি চাপতে হবে। আমার এসএসএইচ দ্বারা মেশিন 2 এ অ্যাক্সেস রয়েছে। বিষয়টি হ'ল আমি মনে করি আমি একটি খালি ভাণ্ডারের ধারণাটি বুঝতে পারি না ...

খালি সংগ্রহস্থলটিতে আমার কোডটি সংরক্ষণ করার সঠিক উপায় কী? আমি কীভাবে আমার স্থানীয় সংগ্রহশালা থেকে খালি সংগ্রহস্থলগুলিতে পরিবর্তন করতে পারি?

খালি সংগ্রহস্থল রাখার জন্য কেন্দ্রীয় সংগ্রহস্থল থাকার সঠিক উপায় কি?

আমি এই বিষয় নিয়ে কিছুটা বিভ্রান্ত। দয়া করে আমাকে এ সম্পর্কে একটি সূত্র দিন।

উত্তর:


391

প্রথমত, কেবল যাচাই করার জন্য, আপনাকে চালনার আগে তৈরি করা ডিরেক্টরিতে পরিবর্তন করতে হবে git init --bare। এছাড়াও, খালি রেপোজিটরিগুলি এক্সটেনশন দেওয়ার জন্য এটি প্রচলিত .git। সুতরাং আপনি করতে পারেন

git init --bare test_repo.git

গিট সংস্করণগুলির জন্য <1.8 আপনি করবেন

mkdir test_repo.git
cd test_repo.git
git --bare init

আপনার পরবর্তী প্রশ্নের উত্তর দেওয়ার জন্য, খালি সংগ্রহস্থলগুলিতে (সংজ্ঞায়িতভাবে) তাদের সাথে একটি কার্যকারী বৃক্ষ সংযুক্ত থাকে না, সুতরাং আপনি কোনও সাধারণ নন-বেয়ার স্টোরেজে যেমন (উদাহরণস্বরূপ git add <file>এবং তার পরবর্তী) হিসাবে সহজেই ফাইলগুলিতে সহজেই যুক্ত করতে পারবেন না git commit। )

আপনি প্রায় সর্বদা git pushঅন্য সংগ্রহস্থল থেকে এটি ব্যবহার করে (ব্যবহার করে ) একটি খালি সংগ্রহস্থল আপডেট করেন ।

মনে রাখবেন যে এক্ষেত্রে আপনাকে প্রথমে লোকদের আপনার ভান্ডারগুলিতে চাপ দেওয়ার অনুমতি দিতে হবে। ভিতরে যখন test_repo.git, না

git config receive.denyCurrentBranch ignore

সম্প্রদায় সম্পাদনা

git init --bare --shared=group

প্রসংশাভের মন্তব্য অনুসারে, আপনি যদি কোনও ব্যক্তিগত বাড়ির প্রকল্পের পরিবর্তে কাজের জায়গায় এটি করছেন তবে আপনি এটি চান।


7
আপনি যদি এই রেপোতে অন্য লোককে চাপ দেওয়ার পরিকল্পনা করেন তবে আপনি --sharedবিকল্পটিও যুক্ত করতে initপারেন। এটি স্বয়ংক্রিয়ভাবে ভাণ্ডারগুলিতে গ্রুপ লিখনের অনুমতিগুলি যুক্ত করে - লিংক
প্রসংশাথ

17
আমি মনে করি এই তিনটি লাইনই কেবল এটির তুলনায় একই প্রভাব ফেলবে: git --bare init test_repo.git অন্তত আমার বর্তমান গিট সংস্করণ (1.8.2.2) দিয়ে
ফ্রান মারজোয়া

1
আপনি যদি খালি এবং নন-বেয়ার रिप াকের
জিজ্ঞাসাগুলি /

গাছ না থাকলে গিট কীভাবে জিনিসগুলি খুঁজে পাবে? আমি ভেবেছিলাম গিট অবজেক্ট
স্টোরটিতে

@ একান্টওয়ার্ড: গিট কোথাও কমিট এবং শাখার সমস্ত তথ্য সঞ্চয় করে। একটি কমিট সম্ভবত ফাইলগুলির পূর্ববর্তী সংস্করণ এবং নতুন সংস্করণের মধ্যে একটি পার্থক্য f কার্যকারী গাছটি একটি নির্দিষ্ট সময়ে তার আসল সামগ্রীর স্ন্যাপশট। যাইহোক, একটি কার্যক্ষম গাছ সহ আপনি কমিট এবং শাখাগুলির মধ্যে পিছনে পিছনে যেতে পারেন। আপনি চাইলে একটি ভিন্ন কার্যকারী গাছের উপরও চেকআউট করতে পারেন।
ব্যবহারকারী 276648

246

আমি এই উত্তরটি যুক্ত করছি কারণ এখানে আসার পরে (একই প্রশ্নটি নিয়ে), উত্তরের কোনও উত্তরই পুরোপুরি ব্যবহারযোগ্য রিমোট (খালি) রেপোতে কিছুই না যাওয়ার জন্য প্রয়োজনীয় সমস্ত প্রয়োজনীয় পদক্ষেপের বর্ণনা দেয় describe

দ্রষ্টব্য: এই উদাহরণটি খালি রেপোটির অবস্থানের জন্য স্থানীয় পাথগুলি ব্যবহার করে তবে অন্যান্য গিট প্রোটোকল (যেমন ওপি দ্বারা নির্দেশিত এসএসএইচ) ঠিক ঠিক কাজ করা উচিত।

গিটের সাথে কম পরিচিতদের জন্য আমি কয়েকটি নোট যুক্ত করার চেষ্টা করেছি।

1. খালি রেপো শুরু করুন ...

> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/

এটি একটি ফোল্ডার তৈরি করে (repo.git) এবং গিট রেপো উপস্থাপন করে এমন গিট ফাইলগুলির সাথে এটি পপুলেট করে। যেমনটি দাঁড়িয়েছে, এই রেপো অকেজো - এটির কোন কমিট নেই এবং আরও গুরুত্বপূর্ণভাবে, কোন শাখা নেই । যদিও আপনি এই রেপোটিকে ক্লোন করতে পারেন, আপনি এটি থেকে টানতে পারবেন না।

এর পরে, আমাদের একটি কার্যকারী ফোল্ডার তৈরি করতে হবে। আপনার বিদ্যমান ফাইল রয়েছে কিনা তার উপর নির্ভর করে এটি করার কয়েকটি উপায় রয়েছে।

2A। খালি রেপো ক্লোন করে একটি নতুন ওয়ার্কিং ফোল্ডার (কোনও বিদ্যমান ফাইল নেই) তৈরি করুন

git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.

এই কমান্ডটি কেবল তখনই কাজ করবে যদি /path/to/workনা থাকে বা খালি ফোল্ডার হয়। সতর্কবার্তাটি নোট করুন - এই পর্যায়ে আপনার কাছে এখনও দরকারী কিছু নেই। আপনি cd /path/to/workএবং চালানো হলে git status, আপনি কিছু পাবেন:

On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

কিন্তু এটি একটি মিথ্যা। আপনি প্রকৃতপক্ষে শাখায় নেই master(কারণ git branchকিছুই প্রত্যাবর্তন করে না) এবং এখনও পর্যন্ত কোনও কমিট নেই।

এর পরে, ওয়ার্কিং ফোল্ডারে কিছু ফাইল অনুলিপি / সরান / তৈরি করুন, সেগুলিকে গিটে যুক্ত করুন এবং প্রথম প্রতিশ্রুতি তৈরি করুন।

> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email adelphus@example.com
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
 1 file changed, 1 insertion(+)
 create mode 100644 afile.txt

git configকমান্ডগুলি কেবল তখনই প্রয়োজন যদি আপনি ইতিমধ্যে গিটকে না বলে থাকেন তবে আপনি কে। নোট করুন যে আপনি যদি এখন চালনা করেন তবে আপনি এখন তালিকাবদ্ধ শাখা git branchদেখতে পাবেন master। এখন চালান git status:

On branch master
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working directory clean

এটি বিভ্রান্তিকর - আপস্ট्रीमটি "যায়নি", এটি এখনও তৈরি করা হয়নি এবং git branch --unset-upstreamসাহায্য করবে না। তবে এটি ঠিক আছে, এখন আমাদের প্রথম প্রতিশ্রুতি আছে, আমরা ধাক্কা দিতে পারি এবং খালি রেপোতে মাস্টার তৈরি করা হবে।

> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
 * [new branch]      master -> master

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

> git pull
Already up-to-date.
> git push origin master
Everything up-to-date

2b। বিদ্যমান ফাইলগুলি থেকে একটি কার্যকারী ফোল্ডার তৈরি করুন যদি আপনার কাছে ইতিমধ্যে এতে ফাইলগুলির সাথে একটি ফোল্ডার থাকে (যাতে আপনি এটিতে ক্লোন করতে পারবেন না), আপনি একটি নতুন গিট রেপো শুরু করতে পারেন, প্রথম প্রতিশ্রুতি যুক্ত করতে পারেন এবং তারপরে এটি খালি রেপোতে লিঙ্ক করতে পারেন।

> cd /path/to/work_with_stuff
> git init 
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"

[master (root-commit) 614ab02] added stuff
 20 files changed, 1431 insertions(+)
 create mode 100644 stuff.txt
...

এই মুহুর্তে আমাদের প্রথম প্রতিশ্রুতিবদ্ধ এবং একটি স্থানীয় মাস্টার শাখা রয়েছে যা আমাদের একটি দূরবর্তী-ট্র্যাক আপ স্ট্রিম শাখায় পরিণত করতে হবে।

> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

-u(নতুন) ট্র্যাকড আপ স্ট্রিম শাখা সেট করতে গিট পুশের উপর পতাকাটি নোট করুন । ঠিক আগের মতোই, এখন আমাদের সম্পূর্ণরূপে কার্যকরী বেয়ার রেপো রয়েছে যা মাস্টার শাখায় অন্য কোথাও ক্লোন করা যায় পাশাপাশি স্থানীয় ওয়ার্কিং কপি যা টানতে এবং ধাক্কা দিতে পারে।

এগুলি কিছুটির কাছে সুস্পষ্ট বলে মনে হতে পারে তবে গিটটি আমাকে সেরা সময়ে বিভ্রান্ত করে তোলে (এটির ত্রুটি এবং স্থিতির বার্তাগুলিতে সত্যিই কিছুটা পুনরায় কাজ করা প্রয়োজন) - আশা করি, এটি অন্যকে সহায়তা করবে।


4
মজাদার. আমার উত্তর চেয়ে অবশ্যই আরও বিস্তারিত। +1
ভোনসি

13
এই উত্তরটি আমার সমস্যার সমাধান করে এবং এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, আশা করি আরও বেশি সংখ্যক মানুষ এটিতে ভোট দিতে পারে।
ইনিক্স

11
এই জাতীয় উত্তরের জন্য আপনার অর্থ নেওয়া উচিত
আর্থার তারাসভ

2
একজন নতুন গিট ব্যবহারকারী হিসাবে, এই উত্তরটি আমার পক্ষে অবিশ্বাস্যভাবে সহায়ক ছিল, এটি লেখার জন্য ধন্যবাদ!
পাশেরউইঞ্জুই

1
এটি একটি উজ্জ্বল উত্তর। আমাদের ইউনিটকে অনেক সাহায্য করবে।
wobsoriano

33

এক এক করে আপনার প্রশ্নের উত্তর দেওয়া:

বেয়ার রিপোজিটরি হ'ল এটির কোনও কার্যকারী গাছ নেই । এর অর্থ এটির পুরো বিষয়বস্তু আপনার .gitডিরেক্টরিতে যা রয়েছে।

আপনি শুধুমাত্র পারেন commitদ্বারা সংগ্রহস্থলের বেয়ার pushআপনার স্থানীয় ক্লোন থেকে এটি ing। এটির কোনও কার্যকারী গাছ নেই, সুতরাং এতে কোনও ফাইল সংশোধিত হয়নি, কোনও পরিবর্তন নেই।

কেন্দ্রীয় সংগ্রহস্থল রাখার একমাত্র উপায় হ'ল bareসংগ্রহস্থল রাখা।


22

আপনি গিটকে আপনার জন্য ডিরেক্টরি তৈরি করতেও বলতে পারেন:

git init --bare test_repo.git

20

সাধারণ অনুশীলনটি হ'ল কেন্দ্রীয় ভান্ডার যা আপনি খালি রেপো হিসাবে চাপছেন।

আপনার যদি এসভিএন পটভূমি থাকে তবে আপনি একটি গিট বেয়ার রেপোতে একটি এসভিএন রেপো সম্পর্কিত করতে পারেন। এটির মূল ফর্মটিতে রেপোতে ফাইল নেই। যদিও আপনার স্থানীয় রেপোগুলিতে আপনার "কোড" তৈরি করার সাথে সাথে ফাইলগুলি থাকবে।

আপনাকে আপনার স্থানীয় রেপো থেকে খালি রেপোতে একটি রিমোট যুক্ত করতে হবে এবং এতে আপনার "কোড" টিপতে হবে।

এটি এমন কিছু হবে:

git remote add central <url> # url will be ssh based for you
git push --all central

ব্যবহার করে git remote add central <url>, এসএসএইচ এর ক্ষেত্রেও কি এই পথটি অন্তর্ভুক্ত হবে? যেমনgit remote add central ssh://user@server/home/user/repo.git
হ্যাঁ ব্যারি

17

এটি যথেষ্ট হওয়া উচিত:

git remote add origin <url-of-bare-repo>
git push --all origin

আরও বিশদ জানতে " জিআইটি: আমি আমার বেয়ার রেপো কীভাবে আপডেট করব? "।
মন্তব্য:

  • আপনি originখালি রেপো রিমোট রেফারেন্সের জন্য ' ' এর চেয়ে আলাদা নাম ব্যবহার করতে পারেন ।
  • এটি আপনার ট্যাগগুলিকে ধাক্কা দেবে না, এর জন্য আপনার আলাদা প্রয়োজন git push --tags origin

5

আপনার ধাক্কা দেওয়া কোডটি আসলে প্রতিশ্রুতিবদ্ধ হয়েছে তা যাচাই করে খুব সুন্দর।

স্পষ্টভাবে - সম্পর্কিত সম্পর্কিত বিকল্পটি ব্যবহার করে পাথ নির্ধারণ করে আপনি একটি খালি সংগ্রহস্থলটিতে একটি লগ পরিবর্তন করতে পারেন।

$ cd test_repo
$ git log --relative=/

এটি আপনাকে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি দেখাবে যেমন এটি একটি নিয়মিত গিট রেপো।


5

মার্ক লংএয়ার এবং রোবপ্রোগ উত্তরের উপর ভিত্তি করে:

যদি গিট সংস্করণ> = 1.8

git init --bare --shared=group .git
git config receive.denyCurrentBranch ignore

বা:

যদি গিট সংস্করণ <1.8

mkdir .git
cd .git
git init --bare --shared=group 
git config receive.denyCurrentBranch ignore

এই কনফিগারেশন কমান্ড: আপনার সদ্য তৈরি করা .git ডিরেক্টরিতে এটি প্রয়োগ করে কীভাবে শেষ হয়?
গ্রিনআসজেড

আমি নিশ্চিত না আমি আপনার প্রশ্নটি বুঝতে পেরেছি? আপনি আরও সুনির্দিষ্ট হতে পারেন? যেহেতু আপনার গিট সংগ্রহস্থল শুরু হয়েছে, আপনি 'গিট কনফিগারেশন' কমান্ড দিয়ে যতটা চান কনফিগার করতে পারেন ..
জ্যাক '

@ গ্রীনআসজেড এটি কারণ আপনি এখনও গিট সংগ্রহস্থলের ফোল্ডারের ভিতরে রয়েছেন তাই এটি এটি প্রয়োগ করে (গিট কনফিগারেশনের ডিফল্টটি --local বিকল্পের মতো)।
ব্লু কোডার

2

--Bare পতাকা একটি সংগ্রহস্থল তৈরি করে যার কার্যক্ষম ডিরেক্টরি নেই। খালি সংগ্রহস্থল হ'ল কেন্দ্রীয় সংগ্রহশালা এবং মার্জিং ত্রুটি এড়াতে আপনি কোডগুলি এখানে সম্পাদনা (সঞ্চয়) করতে পারবেন না।

উদাহরণস্বরূপ, আপনি যখন নিজের স্থানীয় সংগ্রহস্থল (মেশিন 1) এ একটি ফাইল যুক্ত করেন এবং এটিকে খালি সংগ্রহস্থলে রাখেন, আপনি খালি সংগ্রহস্থলে ফাইলটি দেখতে পাবেন না কারণ এটি সর্বদা 'খালি' থাকে। তবে, আপনি সত্যিই কিছু সংগ্রহস্থলের দিকে ঠেলাচ্ছেন এবং আপনার সার্ভারে (মেশিন 2) অন্য কোনও সংগ্রহস্থল ক্লোনিং করে আপনি এটি অনির্দিষ্টভাবে দেখতে পাচ্ছেন।

মেশিন 1-এ স্থানীয় সংগ্রহস্থল এবং মেশিন 2-তে 'অনুলিপি' সংগ্রহস্থল উভয়ই নন বেয়ার। খালি এবং নন-বেয়ার স্টোরের মধ্যে সম্পর্ক

ব্লগ এটি বুঝতে আপনাকে সহায়তা করবে। https://www.atlassian.com/git/tutorials/setting-up-a-repository


0

আপনার স্থানীয় সংগ্রহস্থল আরম্ভ করার জন্য আপনি নিম্নলিখিত কমান্ডগুলি প্রয়োগ করতে পারেন

mkdir newProject
cd newProject
touch .gitignore
git init
git add .
git commit -m "Initial Commit"
git remote add origin user@host:~/path_on_server/newProject.git
git push origin master

আপনার স্থানীয় সংগ্রহস্থল থেকে আপনার প্রকল্পে কাজ করা উচিত এবং সার্ভারটি কেন্দ্রীয় সংগ্রহস্থল হিসাবে ব্যবহার করা উচিত।

আপনি এই নিবন্ধটি অনুসরণ করতে পারেন যা গিট সংগ্রহস্থল তৈরি এবং রক্ষণাবেক্ষণের প্রতিটি দিক ব্যাখ্যা করে। গিটার ফর বিগেনার্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.