গিট পুশ জেরিট হেড কেন: গিট পুশ অরিজিন মাস্টারের পরিবর্তে রেফস / ফর / মাস্টার ব্যবহার করা হয়


148

আমি শুধু Gerrit ব্যবহার শুরু করেছি এবং আমি জানতে চাই কেন আমরা যা করতে হবে git push gerrit HEAD:refs/for/masterপরিবর্তে করছেনgit push origin master

আমি যদি করি তবে আমি git push origin masterত্রুটিটি বলছি! [remote rejected] master -> master (prohibited by Gerrit)

উত্তর:


259

জেরিটের জন্য ডকুমেন্টেশন, বিশেষত "পুশ পরিবর্তনগুলি" বিভাগটি ব্যাখ্যা করে যে আপনি " refs/for/'branch'কোনও গিট ক্লায়েন্ট সরঞ্জাম ব্যবহার করে জাদুকরী রেফ " এ চাপছেন ।

নিম্নলিখিত চিত্রটি ইন্ট্রো থেকে জেরিটে নেওয়া হয়েছে । আপনি যখন Gerrit ধাক্কা, আপনি কি git push gerrit HEAD:refs/for/<BRANCH>। এটি আপনার পরিবর্তনগুলিকে স্টেজিং এরিয়ায় ধাক্কা দেয় (চিত্রটিতে "মুলতুবি পরিবর্তনগুলি")। জেরিটের আসলে কোনও শাখা নেই <BRANCH>; এটি গিট ক্লায়েন্টের কাছে রয়েছে।

অভ্যন্তরীণভাবে, গিরিটের গিট এবং এসএসএইচ স্ট্যাকের জন্য নিজস্ব প্রয়োগ রয়েছে। এটি এটিকে "জাদুকরী" refs/for/<BRANCH>রেফগুলি সরবরাহ করতে দেয়।

এর মধ্যে কোনও একটি নেমস্পেসে রেফ তৈরি করার জন্য যখন একটি পুশ অনুরোধ পাওয়া যায় তখন জেরিট ডাটাবেস আপডেট করার জন্য তার নিজস্ব যুক্তি সম্পাদন করে এবং তারপরে অপারেশনের ফলাফল সম্পর্কে ক্লায়েন্টের কাছে মিথ্যা থাকে। একটি সফল ফলাফল ক্লায়েন্টকে বিশ্বাস করতে বাধ্য করে যে জেরিট রেফ তৈরি করেছে, কিন্তু বাস্তবে জেরিট এ রেফ তৈরি করেনি। [ লিঙ্ক - গেরিট, "গ্রেটি ডিটেলস" ]।

জেরিট ওয়ার্কফ্লো

একটি সফল প্যাচ (অর্থাত্, প্যাচটি গেরিটের দিকে ঠেলে দেওয়া হয়েছে, [এটিকে "মুলতুবি পরিবর্তনগুলি" স্টেজিং এরিয়াতে রেখে দেওয়া হয়েছে], পর্যালোচনা করা হয়েছে, এবং পর্যালোচনাটি পাস হয়েছে), গেরিট "মুলতুবি পরিবর্তনগুলি" থেকে পরিবর্তনটিকে " অথোরিটিভেটিভ রিপোজিটরি ", আপনি যখন ঠেলাঠেলি করেছিলেন তখন যাদুবিদ্যার ভিত্তিতে কোন শাখাটিকে এটিকে ঠেলে দেওয়ার গণনা করা হচ্ছে refs/for/<BRANCH>। এইভাবে, সফলভাবে পর্যালোচনা করা প্যাচগুলি সরাসরি এর সঠিক শাখা থেকে টানা যেতে পারে Authoritative Repository


কৌতূহলের বাইরে, যদি আপনি কেবল "গিট পুশ অরিজিন" এর মতো কিছু করেন তবে সত্যিই কী ঘটে? আমি এটি চেষ্টা করেছি এবং কোথাও পরিবর্তন দেখতে পাচ্ছি না, এইভাবে প্রশ্ন। তবে এটি আমার স্থানীয় লগে প্রাকৃতিকভাবে বিদ্যমান।

1
@ পিন্টোলারঞ্জ আমি একইভাবে একইভাবে করেছি। আপনি ঠিক বলেছেন, জেরিট এমন পরিস্থিতি "পরিচালনা করে" তবে এটি কোনও পরিবর্তন তৈরি করে না। সুতরাং আসলে, এটি একেবারেই পরিচালনা করে না। যা সত্যই আমাকে বিস্মৃত করে, কারণ এটি সত্যই বোকা। ব্যবহারকারীকে এমন কিছু করার জন্য কেন অনুমতি দেওয়া হবে, যে গেরিট সঠিকভাবে পরিচালনা করতে অক্ষম?
ট্রেজার্ড

1
@ গ্রেগব হ্যাঁ তীরগুলি কমান্ডের উত্স এবং গন্তব্য নির্দেশ করে, এর ফলে কোনও পরবর্তী তথ্য প্রবাহিত হয় না। উদাহরণস্বরূপ, বিকাশকারী 1 প্রামাণিক প্রতিবেদনগুলিতে অন্য কোনও উপায়ে নয়, আনতে ইস্যু করে
গ্যারেথ

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

4
অথবা আপনি জীবাণু ব্যবহার করতে পারবেন না এবং পুরোপুরি এই হাস্যকর জগাখিচুড়ি এড়াতে পারেন।
সি জনসন

57

গিট পুশ কমান্ডটি সম্পূর্ণরূপে নির্দিষ্ট করা এড়াতে আপনি বিকল্পভাবে আপনার গিট কনফিগারেশন ফাইলটি সংশোধন করতে পারেন:

[remote "gerrit"]
    url = https://your.gerrit.repo:44444/repo
    fetch = +refs/heads/master:refs/remotes/origin/master
    push = refs/heads/master:refs/for/master

এখন আপনি কেবল:

git fetch gerrit
git push gerrit

এটি জেরিট অনুসারে


1
আমার কাছ থেকে +1! remote.origin.pushএটি প্রতিবার এটি টাইপ / পেস্ট করার পরিবর্তে আমার পক্ষে এই হার্ড-কোডড থাকার উপায়টি খুব সুন্দর !
দাওওয়েেন

7
@ সানমারফি আপনি 'মাস্টার' এর উদাহরণগুলিকে '*' দিয়ে প্রতিস্থাপন করে এটিকে আরও সাধারণ করে তুলতে পারেন যাতে 'গিট পুশ জেরিট টপিক ব্র্যাঙ্ক' এর মতো কিছু কাজ করতে পারে।
ডেভিড ডরিয়া

এছাড়াও, জীবাণু যদি আপনার একমাত্র দূরবর্তী হয় তবে আপনাকে এটিকে কোনও নির্দিষ্ট করতে হবে না। আমি কেবল উল্লিখিত কনফিগার @ ডেভিডডোরিয়াকে দিয়ে git fetchএবং করি git push
বার্নক

পুশ = রেফার্স / হেডস / *: রেফার্স / ফর / * সব শাখার জন্য
ভিক্টর চয়ে

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