কেন্দ্রীয় সংগ্রহস্থল হিসাবে গিট ব্যবহার করা


12

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

তবে আমার ডেভলপমেন্ট মেশিনগুলির মধ্যে একটিতে একটি স্ট্যাটিক আইপি রয়েছে। আমার মস্তিষ্ক সিভিএস মোডে আটকে আছে, তাই আমি সেই যন্ত্রটিকে 'সেন্ট্রাল' সার্ভার হিসাবে রাখার জন্য গিট সেট করার চেষ্টা করেছি, যা অন্যরা সবাই এনে দেয়।

এই ধরণের কাজ। আমার কাছে একগুচ্ছ মেশিন এসি রয়েছে যা 'মাস্টার' এম থেকে গিট টান করে তারা ডেটা ফেরত পাঠাতে গিট পুশ করে।

মাস্টারের বিকাশ করলে সমস্যা আসে The প্রথমত, আমি কীভাবে কেন্দ্রীয় রেপোটি না করে সাম্প্রতিকতম সংস্করণ সরবরাহ করতে পারি তা বুঝতে পারি না

git reset --hard HEAD

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

আমার মানসিক মডেল সম্পর্কে কিছুটা বন্ধ। সাহায্য?


আপনি যখন "মাস্টার" বলছেন, আপনি কি মাস্টার সংগ্রহশালার বিষয়ে বা মাস্টার শাখা সম্পর্কে কথা বলছেন?
innaM

মাস্টার সংগ্রহশালা
অ্যালেক্স ফেনম্যান

1
গিট প্রসঙ্গে "মাস্টার" সাধারণত ডিফল্ট শাখার নাম।
ইন্নাম

এটি সম্ভবত এসও
কেন লিউ

উত্তর:


28

আপনি চান যে আপনার কেন্দ্রীয় ভান্ডার খালি থাকে। বলুন যে এটিতে বাস করা মেশিনটির নাম দেওয়া হয়েছে static:

$ ssh static git init --bare /git/myproject.git

এই খালি সংগ্রহস্থলটি একটি কেন্দ্রীয় উপস্থাপক বিন্দু: এটি বিকাশের দিকে নয় এবং কাছ থেকে টানানোর জন্য।

কেন্দ্রীয় সংগ্রহস্থলের ক্লোনগুলিতে আপনার উন্নয়ন করুন:

$ cd ~/src
$ git clone static:/git/myproject.git

আপনি চালু থাকলেও static, ক্লোনটিতে কাজ করুন :

$ git clone /git/myproject.git

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

উদাহরণ স্বরূপ:

$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."

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

সম্ভবত আপনি সেই রাতে বাড়িতে গিয়ে একটি নতুন বৈশিষ্ট্য যুক্ত করেছেন। পরের দিন সকালে, আপনি

$ git checkout master
$ git pull

কেন্দ্রীয় ভান্ডারে রয়েছে তা প্রতিফলিত করতে আপনার স্থানীয় মাস্টারকে আপডেট করতে।

তবে এখন বলুন যে আপনি ফু বাগটি ঠিক করেছেন এবং এটি আপনার মাস্টার শাখায় অন্তর্ভুক্ত করতে প্রস্তুত। প্রথমে আপনি গত রাত থেকে পরিবর্তনের সাথে এটি সংহত করতে চান:

$ git checkout fix-bug-in-foo
$ git rebase master

rebaseকমান্ড আপনার সংগ্রহস্থলের বর্ণন করে দেন-যেন গত রাতে নতুন বৈশিষ্ট্য উপরে foo বিন্যাস বাগ সংশোধন। (এটি এক ধরণের পছন্দ svn update, তবে আরও নমনীয় এবং শক্তিশালী))

এখন এটি আপনার কেন্দ্রীয় গুরুকে পেতে:

$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master

আমরা মাস্টারকে বিশেষ হিসাবে বিবেচনা করছি, তবে এটি কেবল প্রচলিত। গিট সংগ্রহস্থলের মাধ্যমে আপনি খুব staticসহজেই বিভিন্ন ভাণ্ডারের বিভিন্ন শাখায় কাজ ভাগ করতে পারেন।


দুর্দান্ত উত্তর, হাতে থাকা সমস্ত বিষয় নখ করুন।
ড্যান লোয়েনেহার্জ

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

আপনি যদি 1.6.4.x গিটটি চালাচ্ছেন তবে এটি git init --bareঅন্য কোনও যুক্তি সহ নয়। সেট করা থাকলে এটি বর্তমান চলমান ডিরেক্টরি বা GIT_DIR এনভায়রনমেন্ট সেটিংটি ব্যবহার করবে। আমি বিশ্বাস করি এটির জন্য ডিরেক্টরি আর্গুমেন্ট নিতে আপনার 1.6.5.x গিট প্রয়োজন need
ড্যারেন হল

4
আমি এখন পর্যন্ত যে কাজটি করছি তার পক্ষে এটি এখন পর্যন্ত সেরা গিট ওয়ার্কফ্লো ব্যাখ্যা।
গ্রেগ গ্রাহাম

7

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


6

এই উত্তরটি গ্যাবাকনের উত্তরের মতো, তবে ইতিমধ্যে একটি স্থানীয় রেপো সেটআপ রয়েছে এমন একটি দৃষ্টিভঙ্গি নিয়েছে এবং কেন্দ্রীয় রিপো হিসাবে বিবেচিত এমন একটি রিমোট মাস্টার তৈরি করতে চান। এটি কেবল একটি ভিন্ন পদ্ধতির থেকে বিশদ যুক্ত করছে।

আমি আমার ডট-কনফিগার ফাইলগুলি সঞ্চয় করতে গিট ব্যবহার করি। আমি একটি 'কেন্দ্রীয় রেপো' বিবেচনা করি তা থেকে আমি টান এবং টান। একাধিক কম্পিউটারের মাধ্যমে আমার সমস্ত ডট ফাইলগুলি পুনরায় সেট করা বেশ সুবিধাজনক।

$ ssh example.com
$ mkdir dotconf.git && cd dotconf.git
$ git init --bare
$ exit

এটি রেপো সাইটে একটি খালি খালি রেপো তৈরি করেছে।

এখন যদি স্থানীয়ভাবে আমার কাছে ইতিমধ্যে একটি বিদ্যমান রেপো থাকে তবে আমি এটিকে দূরবর্তী সাইটে ঠেলাতে পারি।

$ cd ~/src/dotconf

স্থানীয় ডিরেক্টরিতে chdir।

$ git remote add origin ssh://example.com/~/dotconf.git

রিমোট রেপোটিকে উত্স হিসাবে যুক্ত করুন, সুতরাং চাপ / টান সেই রেপোতে কাজ করবে।

$ git push origin master

আমার মাস্টারটিকে উত্সে ঠেলাও (যেমন গিট রিমোটের মাধ্যমে আগে লেবেলযুক্ত)। এখন যে রিমোট রেপো আমার 'সেন্ট্রাল রেপো' হিসাবে বিবেচনা করা হয়। আমার সমস্ত গিট পুশ / পুল উত্সের সাথে ইন্টারঅ্যাক্ট করবে।

আমি যদি অন্য কোনও হোস্টে যাই তবে আমি সহজেই ক্লোনটি পেরিয়ে একটি নতুন জায়গায় রেপো করতে পারি।

$ git clone ssh://example.com/~/dotconf.git

আমি যদি রিমোট সার্ভারে ডেভলপমেন্ট করতে চাই, তবে আমি প্রথমে ক্লোন করে ফেলেছি, তারপরে খালি রেপোতে চাপ / টানুন back

$ cd ~/src
$ git clone ~/dotconf.git
$ cd ~/src/dotconf
  * do coding *
$ git push
  * check in from another location *
$ git pull

আপনাকে সম্ভবত সেট করতে হবে git config --add branch.master.remote originযাতে git pullঅভিযোগ করা হয় না যে আপনি যথেষ্ট নির্দিষ্ট নন। অন্য বিকল্পটি হল আপনার মাস্টার শাখাটিকে --trackদূরবর্তী উত্সে সেট করা। আপনার একাধিক শাখা থাকলে দরকারী।


1

আমি আজ এই একই সমস্যা নিয়ে গবেষণা করছিলাম। এই ব্লগ পোস্টটি নিয়ে বিষয়টি নিয়ে অনেক আলোচনা হয়েছে, তবে মান্নী যা বলেছিলেন তা করার বিষয়ে সর্বাধিক অভিমত is কিছু অন্যান্য সম্ভাবনার জন্য ডেভিড ফরাসীর পোস্টে একটি মন্তব্য দেখুন, আপনি ভুল করে কোনও সূচিত্রে কাজ করা গাছের কাজ বা অনিয়মিত কাজকর্ম রয়েছে এমন ভান্ডারটিতে চাপ দেওয়ার পরে কী করবেন তা সহ। "গিট রিসেট -সোফট হেড work" আপনার কাজকে বিরক্ত না করে ধাক্কা দেওয়া পরিবর্তনটি ফিরিয়ে আনবে।


1
ব্লগ পোস্টের একটি সমস্যা সূচকটির কার্যকারিতা বাদ দিচ্ছে। গিট সত্ত্বেও গিটের সাথে কীভাবে কাজ করবেন তা বোঝাতে এখানে একটি ভাল নিবন্ধ রয়েছে - osteele.com/archives/2008/05/my-git-work ফ্লো - ওয়ার্কফ্লো চিত্রটি অন্তর্ভুক্ত করা হয়েছে।
ড্যারেন হল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.