git - কিভাবে একটি অ bare গিট রিপোজিটরি ধাক্কা?




git-push git-non-bare-repository (4)

আপনি করতে পারেন:

$git config --bool core.bare true

এটি বেয়ার বা সেন্ট্রাল রিপোজিটরিতে করা যেতে পারে যাতে এটি অযৌক্তিক সংগ্রহস্থল থেকে ধাক্কা দেওয়া কোনও ফাইল গ্রহণ করে। আপনি যদি অযৌক্তিক সংগ্রহস্থলের মধ্যে এটি করেন তবে আমরা কোনও ফাইলকে খালি খালি সংগ্রহস্থল থেকে ধাক্কা দিতে পারি না।

আপনি যদি পিসিতে কেন্দ্রীয় এবং অযৌক্তিক রেপো তৈরি করে জিআইটি অনুশীলন করছেন তবে এটি কিছু পিসিতে push করা ফাইলগুলি দেখাবে না তবে এটি push করা হয়েছে। আপনি চলমান দ্বারা এটি পরীক্ষা করতে পারেন।

কেন্দ্রীয় repo মধ্যে $git log

আপনি GitHub এ ধাক্কা ছাড়া অন্যথায় এটি ফাইল দেখাতে হবে।

আমি সাধারণত ssh (পর্দা এবং ভিম) এর মাধ্যমে রিমোট সার্ভারে কাজ করি, যেখানে আমার একটি জিট রিপোজিটরি রয়েছে। কখনও কখনও আমি অনলাইনে নই, তাই আমার ল্যাপটপে একটি পৃথক সংগ্রহস্থান (আমার দূরবর্তী থেকে ক্লোন) আছে।

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

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


আমি আপনার সার্ভারে একটি বেয়ার-রিপোজিটরি এবং স্থানীয় কাজ (অ-বেয়ার) রেপো থাকতে পরামর্শ দেব। আপনি ল্যাপটপ থেকে সার্ভার বেন রেপোতে পরিবর্তনগুলি ধাক্কা দিতে পারেন এবং তারপরে সে বেয়ার রিপো থেকে সার্ভারের কাজ করা রেপোতে টানতে পারেন। কারণ আমি এটি বলছি কারণ সার্ভারে আপনার সম্পূর্ণ / অসম্পূর্ণ শাখা থাকতে পারে যা আপনি ল্যাপটপে প্রতিলিপি করতে চান।

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


receive.denyCurrentBranch updateInstead

এই বিকল্পগুলি Git 2.3 এ যোগ করা হয়েছে , এবং এটি পরিষ্কার হলে এটি সার্ভারটিকে তার কার্যক্ষেত্রের গাছটি আপডেট করে।

সুতরাং যদি আপনি নিশ্চিত হন যে আপনি স্থানীয়ভাবে পৌছানোর আগে সর্বদা সংঘটিত হন এবং সার্ভারে একটি পরিচ্ছন্ন কাজকারী গাছ রাখুন (যা আপনি একত্রীকরণের বিরোধগুলি এড়ানোর জন্য যা করতে চান), তাহলে এই বিকল্পটি একটি ভাল সমাধান।

নমুনা ব্যবহার:

git init server
cd server
touch a
git add .
git commit -m 0
git config --local receive.denyCurrentBranch updateInstead

cd ..
git clone server local
cd local
touch b
git add .
git commit -m 1
git push origin master:master

cd ../server
ls

আউটপুট:

a
b

সেরা বিকল্প

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

আসুন সর্বাপেক্ষা সহজ কেসটি দেখি, এবং অনুমান করুন আপনার প্রতিটি রেপোতে কেবল একটি শাখা রয়েছে: মাস্টার। যখন আপনি আপনার ল্যাপটপ থেকে রিমোট রেপোতে push করেন, মাস্টার -> মাস্টার ধাক্কা করার পরিবর্তে, ধাক্কা মাস্টার -> ল্যাপটপ-মাস্টার (অথবা অনুরূপ নাম)। এই ধাপটি রিমোট রেপোর বর্তমান চেক-আউট মাস্টার শাখাকে প্রভাবিত করে না। ল্যাপটপ থেকে এটি করার জন্য, কমান্ডটি বেশ সহজ:

git push origin master:laptop-master

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

বিকল্প বিকল্প

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

যদি আপনি শুধুমাত্র মাস্টার -> মাস্টার চাপিয়ে দেওয়ার চেষ্টা করতে চান তবে কমান্ড ঠিক আছে:

git push origin

কিন্তু যখন আপনি রিমোট রেপোতে ফিরে যান, তখন আপনি সম্ভবত একটি git reset --hard HEAD করতে চান - ধাক্কা দেওয়া সামগ্রী সহ সিঙ্ক অবস্থায় কাজ গাছ পেতে git reset --hard HEAD করুন। এটি বিপজ্জনক হতে পারে , কারণ যদি রিমোট ওয়ার্ক ট্রিতে যে কোনও অস্বাভাবিক পরিবর্তন রয়েছে যা আপনি রাখতে চান তবে এটি মুছে ফেলবে। আপনি এটি চেষ্টা করার আগে এটির পরিণতি কি তা নিশ্চিত হয়ে নিন, বা অন্তত প্রথমে ব্যাকআপ করুন!

জিটি 2.3 থেকে সম্পাদন করুন, আপনি "push-to-deploy" জিট ধাক্কা ব্যবহার করতে পারেন: https://github.com/blog/1957-git-2-3-has-been -released। কিন্তু একটি পৃথক শাখার দিকে ঠেলে দেওয়া এবং তারপরে মার্জিং সাধারণত একটি ভাল একত্রিত হওয়ার পরে এটি ভাল হয় (তাই মার্জ মতই অসামান্য পরিবর্তনগুলির সাথে কাজ করে)।






git-non-bare-repository