রেফস্পেক ব্যবহার করে আপনি কীভাবে একটি গিট ট্যাগকে একটি শাখায় ঠেলাবেন?


216

আমি জোর করে চাপ দিতে চাই, উদাহরণস্বরূপ, আমার ট্যাগ 1.0.0 আমার দূরবর্তী masterশাখায় ।

আমি এখন নিম্নলিখিতগুলি করছি:

git push production +1.0.0:master

আমি ধাক্কাটি জোর করতে চাই , কারণ আমার কেবলমাত্র যত্নশীল হ'ল কোডটির ভিতরে কোড1.0.0 ট্যাগেরmaster দূরবর্তী সংগ্রহস্থলের শাখায় ঠেলে দেওয়া হয় ।

আমি কি ভুল করছি?

আপডেট # 1

যখন আমি আমার সার্ভারে এসএসএইচ করি যেখানে আমার গিট সংগ্রহস্থল রয়েছে এবং চালিত হয় তখন আমি শাখাটি তালিকাভুক্তও git branch -lদেখি না master

আপডেট # 2

git tag -lরিমোট গিট সংগ্রহস্থলের অভ্যন্তর থেকে চালানোর পরে , আমি masterতালিকাভুক্ত দেখতে পাচ্ছি , এর অর্থ হল যখন আমি নিম্নলিখিতগুলি চালিতাম:

git push production 1.0.0:master

এটি প্রকৃতপক্ষে ট্যাগটিকে ধাক্কা দিয়ে একটি নতুন শাখার পরিবর্তে একটি ট্যাগ তৈরি করেছেmaster

আমি মূলত ধাক্কা চান বিষয়বস্তু ট্যাগের 1.0.0মধ্যে masterদূরবর্তী গীত সংগ্রহস্থলের শাখা।


"কাজ না করা" এর অর্থ কী আপনি পরিষ্কার করতে পারেন? গিট কি একটি নির্দিষ্ট ত্রুটি দেয়, বা এর নাল প্রভাব রয়েছে?
vcsjones

আমি দুঃখিত. হ্যাঁ, তাই মূলত যখন আমি আমার সার্ভারে, গিট সংগ্রহস্থলটিতে এসএসএইচ করি এবং শাখা তালিকাবদ্ধ করার জন্য গিট শাখা -l চালিত করি, তখন আমি কেবল আমার অন্যান্য শাখাটি দেখতে পাই। যাইহোক, গিট পুশ উত্পাদন +1.0.0: মাস্টার ধাক্কা দিয়েছিল, যখন আমি পুনরায় চাপ দিই এটি বলছে যে সবকিছু আপ-টু-ডেট আছে , তবে আমি রিমোট সার্ভারে মাস্টার শাখা দেখতে পাচ্ছি না।
মাইকেল ভ্যান রুইজন

5
আপনার গ্রহণযোগ্য উত্তরটি পরিবর্তন করা উচিত। দ্বিতীয় উত্তরটি যেটি গ্রহণযোগ্য হিসাবে চিহ্নিত করা হয়েছে তার চেয়ে অনেক সহজ।
পেড্রো রলো

বিলম্বিত প্রতুত্তরের জন্য দুঃখিত। আমি সম্মত এবং এখন গৃহীত উত্তর পরিবর্তন করেছি।
মাইকেল ভ্যান রুইজেন

1
@MichaelvanRooijen আমি বুঝতে পারছি না কিভাবে গৃহীত উত্তর যে আপনি বেছে আসলে এই সমস্যা solves। এটি কোনও ট্যাগ সহ কোনও শাখাটি ওভাররাইট করে না, এটি কেবল আপনার ট্যাগগুলিকে রিমোটে ঠেলে দেয়।

উত্তর:


61

এটি সম্ভবত ব্যর্থ হচ্ছে কারণ 1.0.0একটি টীকাযুক্ত ট্যাগ। সম্ভবত আপনি নিম্নলিখিত ত্রুটি বার্তাটি দেখেছেন:

ত্রুটি: শাখা রেফ / হেড / মাস্টারকে অ-প্রতিশ্রুতিবদ্ধ অবজেক্টটি লেখার চেষ্টা করা হচ্ছে

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

git push production +1.0.0^{commit}:master
git push production +1.0.0~0:master          # shorthand

আরও একটি বাক্য গঠন রয়েছে যা এই ক্ষেত্রেও কাজ করবে, তবে এর অর্থ কিছুটা পৃথক হবে যদি ট্যাগ অবজেক্ট কমিট ব্যতীত অন্য কিছুতে নির্দেশ করে (বা একটি ট্যাগ অবজেক্ট যা নির্দেশ করে (একটি ট্যাগ অবজেক্ট যা একটি…) প্রতিশ্রুতি দেয়) ।

git push production +1.0.0^{}:master

এই ট্যাগ পিলিং সিনট্যাক্সগুলি গিটি -রেভ-পার্স (1) এ সংশোধন করা সংশোধনীগুলির অধীনে বর্ণনা করা হয়েছে ।


1
এই সমস্যার সমাধান! তবে ইতিমধ্যে মাস্টার শাখা থাকা দরকার। এটি অবশ্য আমার শেষের বিষয় নয়। আপনার সাহায্যের জন্য অসংখ্য ধন্যবাদ!
মাইকেল ভ্যান রুইজেন

2
@ মিশেল: আহ! হ্যাঁ, যদি মাস্টার উপস্থিত না থাকে (একটি শাখা বা ট্যাগ হিসাবে), তবে একটি শাখার পরিবর্তে মাস্টারgit push rep +tag:master নামে একটি ট্যাগ তৈরি করবে । (আবার, যখন মাস্টার একটি শাখা বা ট্যাগ হিসাবে উপস্থিত থাকবে না) "ত্রুটি: অযোগ্য গন্তব্যে ঠেলে দিতে অক্ষম" দিয়ে ব্যর্থ হবে। যে কমান্ডটি আপনি যা চান তা করত (কোনও মাস্টার শাখা / ট্যাগ বিদ্যমান থাকার আগে) হ'ল ( সেই নামস্থানটি যার অধীনে শাখাগুলি সংরক্ষণ করা হয়)। git push rep +tag~0:mastergit push rep +tag~0:refs/heads/masterrefs/heads/
ক্রিস জনসেন

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

4
@ ব্র্যাড: ~{commit}বাক্য গঠনটি আক্ষরিক (যেমন সর্বদা এই নয়টি অক্ষর); শব্দটি commitএখানে কোনও স্থানধারক নয়।
ক্রিস জনসন

1
আহ, ঠিক আছে! দুঃখিত, আমি ভাবছিলাম যে আপনি নির্দিষ্ট প্রতিশ্রুতিবদ্ধ করা বোঝাতে চেয়েছিলেন, এখন আরও বোধগম্য।
ব্র্যাড

469
git push --tags production

4
ট্যাগটি যদি ইতিমধ্যে দূরবর্তীটিতে বিদ্যমান থাকে তবে আপনাকে প্রথমে রিমোট ট্যাগটি মুছতে হবে git push production :1.0.0
শ্রদ্ধাবাদ কোড

1
যদি কোনও উপলক্ষে আপনার একই নামে শাখা থাকে: '1.0.0' এই ধাক্কা এত ভাল ব্যবহারে ব্যর্থ হবে: git push production :refs/tags/1.0.0কেবল ট্যাগ মুছতে
ভ্লাদিমির

1
@ নেরিয়ান: আমার মনে হয় এটি কেবল ট্যাগগুলিকে ঠেলে দিয়েছে
বিএসপিপিয়ার

5
কোনও শাখাটিকে জোর-চাপ দিয়ে এটিকে ওভাররাইট করা সম্পর্কে মূল পোস্টার সমস্যাটি কীভাবে সমাধান করবে? এটি কেবল আপনার সমস্ত ট্যাগকে একটি রিমোটে ঠেলে দেয়, এটি কোনও শাখা ওভাররাইট করে না।

1
প্রশ্নটি কীভাবে একটি ট্যাগ ঠেলাবেন না? এই কমান্ডটি এর চেয়ে অনেক বেশি কাজ করে।
ক্রিস মার্টিন

61

আমি এটির মতো ট্যাগটি তৈরি করি এবং তারপরে আমি এটি গিটহাবের দিকে ঠেলাচ্ছি:

git tag -a v1.1 -m "Version 1.1 is waiting for review"
git push --tags

Counting objects: 1, done.
Writing objects: 100% (1/1), 180 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:neoneye/triangle_draw.git
 * [new tag]         v1.1 -> v1.1

4
এটি আপনার সমস্ত ট্যাগগুলিকে চাপ দেয়
দাউদ ড্রোজড

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

10

একক ট্যাগ ঠেলে দেওয়ার জন্য: git push <reponame> <tagname>

উদাহরণস্বরূপ git push production 1.0.0,। ট্যাগগুলি শাখাগুলিতে আবদ্ধ নয়, তারা কমিট করতে বাধ্য।

আপনি যখন মাস্টার শাখায় ট্যাগের সামগ্রী রাখতে চান, তখন আপনার মেশিনে স্থানীয়ভাবে এটি করুন। আমি ধরে নেব যে আপনি আপনার স্থানীয় মাস্টার শাখায় বিকাশ চালিয়ে গেছেন। তারপরে কেবল একটি git push origin masterপর্যাপ্ত হওয়া উচিত।


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