গিট: খালি ভাণ্ডারে সক্রিয় শাখা পরিবর্তন করার সঠিক উপায়?


195

আমার কাছে একটি খালি সংগ্রহস্থল রয়েছে যা আমার প্রকল্পের কেন্দ্রীয় দোকান হিসাবে ব্যবহৃত হয়। সমস্ত বিকাশকারী git clone <repo>এটির সাথে ভাগ করে নিতে। যখন তারা ক্লোন, তারা মাস্টার শাখার একটি চেকআউট পেতে (যদি না তারা git clone -n) কারণ repo.git/HEADরয়েছে ref: refs/heads/master, এই উপার্জন সক্রিয় শাখা

প্রশ্নটি হল, আমি কীভাবে কার্যকরভাবে শাখা পরিবর্তন করব ? আমি কেবল repo.git/HEADফাইলটি সরাসরি হ্যাক করতে পারি , তবে এটি অদ্ভুত বলে মনে হচ্ছে এবং ভাল, হ্যাকি।

আমি git checkout <otherbranch>রেপো .gitডিরেক্টরিতে চেষ্টা করেছিলাম , কিন্তু এটি ব্যর্থ হয়েছিল কারণ আমি কোনও কাজের গাছের মধ্যে ছিলাম না।

আমি চেষ্টা করেছি git update-ref HEAD refs/heads/otherbranchকিন্তু কেবল আপডেট করা রেফ / হেড / মাস্টারকে রেফ / হেড / অন্যান্য ব্রাঞ্চের মতো হতে পারে (ঠিক আছে, আমি এটি একটি ডমি রিপোজিটরিতে করেছি, আমার প্রযোজনা নয়!)

আমি চেষ্টা করেছি git update-ref --no-deref HEAD refs/heads/otherbranchএবং এটি প্রায় কাজ করেছে। এটি HEADফাইল আপডেট করেছে , তবে এটি এটি দ্বারা নির্দেশিত প্রতিশ্রুতির SHA1 এ সেট করেছে refs/heads/otherbranch

আমি গিট সংস্করণ দিয়ে পরীক্ষা করছি 1.7.0.2.msysgit.0

আমি অনুমান করছি যে এটি করার কোনও উপায় নেই git push, কারণ সমস্ত এবং সূর্যবৃত্তিকে আপনার ডিফল্ট শাখা পরিবর্তন করার সুযোগটি কিছুটা অনিরাপদ (!) বলে মনে হচ্ছে, তবে অবশ্যই .gitসরাসরি HEADফাইল হ্যাক করার চেয়ে রেপো ডিরেক্টরিতে এটি করার আরও ভাল উপায় আছে ।


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

12
এখানে কীভাবে এটি মৌলিকভাবে ভুল কাজটি করার চেষ্টা করছে? একটি খালি সংগ্রহস্থল একাধিক শাখা সমর্থন করে। আমি আমার স্থানীয় সংগ্রহস্থলটির ব্যাক-আপ হিসাবে এবং শাখাগুলির আয়না হিসাবে একটি খালি সংগ্রহস্থল ব্যবহার করি। আমার উভয়ের উপর একটি মাস্টার এবং উভয়টিতে একটি উন্নয়ন শাখা রয়েছে branch যদি আমি খালি সংগ্রহস্থলটিতে উন্নয়ন শাখার লগ দেখতে চাই, আমাকে ফাইল হ্যাক করতে হবে - মনে হচ্ছে গিরিটি এখানে খালি সংগ্রহস্থল সমর্থন সংক্রান্ত মূলত ভুল।
চতুটু

15
@ নিকোলাসনাটাইট আইএমএইচও আপনি এখানে মৌলিকভাবে ভুল wrong একটি শাখার নাম হিসাবে "মাস্টার" সম্পর্কে বিশেষ কিছু নেই, এটি কেবলমাত্র একটি ডিফল্ট। যে রেসপোটিরিগুলি রক্ষণাবেক্ষণ করা হয় তাতে আমাদের একটি মাস্টার শাখা নেই, কারণ "মাস্টার" সংস্থার কাছে অর্থবহ নয়। যখনই আমরা একটি রিলিজ করি আমরা নতুন রিলিজ নম্বর সহ একটি নতুন রক্ষণাবেক্ষণ শাখা তৈরি করি এবং সক্রিয় শাখা হিসাবে সেট করি assign
স্পেসমুজ

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

1
বাহ - এই প্রশ্নটি কেবল রান করে চলে - এটি আমার প্রথম খ্যাতি পয়েন্ট স্কোরার! "মাস্টার" সম্পর্কে জিনিসটি হ'ল এটি কেবল একটি নাম, এবং যদি এটি আপনার সংস্থা, দল, প্রকল্প, পর্ব, যা কিছু বোঝায় না, তবে উপযুক্ত এমন কিছু চয়ন করুন যাতে আপনার সহযোগীরা যখন আপনার রেপো ক্লোন করেন তখন তারা তত্ক্ষণাত পরিবর্তন করে আপনি যে শাখায় কনফিগারেশন পরিচালক হিসাবে চান সেগুলি চালু রাখতে চান। আমি ক্লিয়ার কেস (ব্লেচ!) দিয়ে কাজ করতাম তাই আপনার পছন্দগুলি "প্রধান", "প্রধান" বা "প্রধান" ছিল। Yuk।
kbro

উত্তর:


280

আপনার যদি দূরবর্তী বেয়ার রেপোতে অ্যাক্সেস থাকে তবে এই নিবন্ধটি পরামর্শ দেয় :

git symbolic-ref HEAD refs/heads/mybranch

যা আপনার সংগ্রহস্থলে HEAD ফাইল আপডেট করবে যাতে এতে রয়েছে:

ref: refs/heads/mybranch

হিসাবে নথিভুক্ত git-symbolic-ref


আপনার যদি দূরবর্তী রেপোতে অ্যাক্সেস না থাকে তবে আমার আগের উত্তরটি দেখুন


মনে রাখবেন যে একটি আদেশ যেমন git remote set-head:

  • দূরবর্তী রেপোর ডিফল্ট শাখা পরিবর্তন করে না ।
    এটি কেবল আপনার স্থানীয় রেপোতে সঞ্চিত দূরবর্তী ট্র্যাকিং শাখাকে পরিবর্তন করেrefs/remotes/<name>/HEAD

  • HEADনিজেকে পরিবর্তন করে না (আবার কেবলমাত্র refs/remotes/<name>/HEAD), তাই এর জন্য প্রয়োজন git symbolic-ref

সুতরাং এখানে উত্তর git remote set-head না
git symbolic-ref HEADহ'ল, যদি আপনার দূরবর্তী রেপোতে সরাসরি অ্যাক্সেস থাকে।


3
ধন্যবাদ! আমার প্রত্যন্ত বেয়ার রেপোতে সরাসরি অ্যাক্সেস আছে তাই গিট-সিম্বলিক-রেফ কাজটি করবে। আমি অন্যান্য থ্রেডে উল্লিখিত সাধারণ-পূর্বপুরুষের কৌশলটি পছন্দ করি, যদিও - নিচের ড্রয়ারের জন্য অবশ্যই একটি। আমি এর জন্য গুগলিংয়ে বেশ কয়েক বছর অতিবাহিত করেছি কিন্তু আপনার আগের উত্তরটি খুঁজে পেল না, তবুও "গিট রিমোট হেড মাস্টার" এটি গিট-রিমোটের (1) এর ঠিক নীচে দ্বিতীয় সর্বোচ্চ র‌্যাঙ্ক হিট হিসাবে খুঁজে পেয়েছে। উদ্ভট। আপনি যখন যা খুঁজছেন ঠিক তা জানেন না এমন কিছু খুঁজে পাওয়া কতটা কঠিন তা কেবল দেখানোর জন্য যায়।
kbro

git symbolic-ref HEAD refs/heads/mybranchআমার জন্য ঠিক কাজ করে! ধন্যবাদ! ;)
ভিনজেনজুবার

1
আমি এই প্রশ্নের সত্যই প্রশংসা করি, কারণ আমি ঘটনাক্রমে মাস্টারের চেয়ে আলাদা শাখাটি পরীক্ষা করে দেখেছিলাম এবং এখন আমাকে এটি ঠিক করতে হয়েছিল।
জনি সেরা

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

@ ম্যাগনাস এটি একটি নতুন পৃষ্ঠাতে জিজ্ঞাসা করা তার নিজের একটি ভাল প্রশ্ন হবে।
ভোনসি

3

শাখাটি পরিবর্তন করতে আপনাকে যে শাখাগুলি ব্যবহার করতে চান তার জন্য হেড রেফারেন্স পরিবর্তন করতে হবে।

প্রথমে খালি সংগ্রহস্থলের সমস্ত রেফারেন্স তালিকাবদ্ধ করুন

$find ref

তারপরে আপনার শাখার জন্য রেফারেন্সটি সন্ধান করুন, ফর্ম্যাটটি নীচের মত হবে refs/heads/<my_branch>। সুতরাং পরবর্তী পদক্ষেপটি হ'ল বর্তমান রেফারেন্স চেক করা, কেবল টাইপ করুন:

$git symbolic-ref HEAD

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

$git sumbolic-ref HEAD ref/heads/<my_branch>

ঠাঁই এর। উপভোগ করুন।


2

কীভাবে অ্যাক্টিভ ব্রাঞ্চ সঠিকভাবে পরিবর্তন করবেন?

  • স্থিতি: রেপো। git ডিরেক্টরিতে গিট চেকআউট মারাত্মক ফিরে আসে: এই ক্রিয়াকলাপটি অবশ্যই একটি ট্রি ট্রিতে চালানো উচিত

  • টিপস: কেবল - ওয়ার্ক-ট্রি যুক্তি যুক্ত করুন

বিস্তারিত উদাহরণ: অনুমান: দূরবর্তী সার্ভারে খালি গিট:

bare / খালি_গিট_রেপোসিটিরি.আইপি বিচ্ছিন্ন কাজের গাছ: / ভার / www / মাইপ্রেমোট

স্থানীয় সার্ভারে: শাখা সংস্করণ তৈরি করুন

গিট শাখা সংস্করণ .১.।

গিট পুশ অরিজিন সংস্করণ

গিট বেয়ার রেপো সহ রিমোট সার্ভারে:

$ সিডি ~ / খালি_git_repository.git

it গিট শাখা

  • মাস্টার
    সংস্করণ .১.।

যেমন বলা হয়েছে, নিম্নলিখিত কমান্ড

গিট চেকআউট সংস্করণ .১.।

প্রত্যাবর্তন

মারাত্মক: এই ক্রিয়াকলাপটি অবশ্যই একটি ট্রি ট্রিতে চালানো উচিত

নিম্নলিখিত কমান্ড ব্যবহার করে

গিট - ওয়ার্ক-ট্রি = / ভার / www / মায়াপ্রেমোট চেকআউট সংস্করণ

অ্যাক্টিভ ব্রাঞ্চ সাফল্যের সাথে পরিবর্তন করুন

it গিট শাখা

মনিব

  • version.1.7

নিম্নলিখিত সঙ্গে ফলাফল চেক করুন

ll / var / www / myappremote

আশা করি এটি সাহায্য করবে


এই খুব সহজ সমাধানটি আমার জন্য কাজ করেছে, ধন্যবাদ! একটি নোট: কমান্ডটি সফলভাবে সম্পাদন করার জন্য আমাকে হাতে একটি খালি ওয়ার্ক-ট্রি ডিরেক্টরি তৈরি করতে হয়েছিল।
জোল এসপোন্ডে


-3

আমাদের সার্ভারে আমার খালি রেপোও রয়েছে এবং এটি ব্যবহার করে ফাইলগুলি সফলভাবে পুনরুদ্ধারে সক্ষম হয়েছি

git clone //server/repo/directory -b branch_name

ম্যানপেজ বলছে এটি কেবল একটি নন-বেয়ার সংগ্রহস্থলের জন্য হলেও একটি নতুন স্থানীয় সংগ্রহস্থলের মধ্যে রূপান্তর।


1
আপনি যা বলছেন তা সত্য, আপনি একটি নির্দিষ্ট শাখা নির্বাচন করতে -b ব্যবহার করছেন তা আমার প্রশ্নের প্রসঙ্গে আপনার উত্তরটি ভেঙে দেয়, এটিই আপনি ডিফল্ট শাখাটি কীভাবে সেট করেন।
kbro

-4

আমি আবেদন করার আগে এবং পরে দুটি ডিরেক্টরি তুলনা করেছি

git symbolic-ref HEAD refs/heads/mybranch

এবং এটি প্রদর্শিত হয় যে কেবল repo.git / HEAD ফাইলটি পরিবর্তিত হয়েছিল তাই সম্ভবত ফাইলটি "হ্যাক" করা বেশ নিরাপদ।


2
গিট রেফ ফাইলগুলি সরাসরি সম্পাদনা করে সূক্ষ্ম ব্রেকিং সমস্যাগুলি চালু করা যেতে পারে। আমি তার বিরুদ্ধে অত্যন্ত প্রস্তাব দিই। নদীর গভীরতানির্ণয় কমান্ডগুলি সরাসরি সম্পাদনার রেফের চেয়ে সহজ এবং নিরাপদ।
আলাইন ওডিয়া

2
এই @ বোরিয়ান এর সুবিধা কী?
অ্যালেক্স চেম্বারলাইন

2
গিট রেফারির ইতিহাসের মতো পটভূমিতে প্রচুর পরিমাণে নজর রাখে। আপনি যদি ম্যানুয়ালি ফাইলটি পরিবর্তন করেন তবে এটি লগ হবে না। এটি সত্য যে এটি সম্ভবত কোনও ব্যাপার না। তবে আপনি যদি কিছু কমিটের ট্র্যাকটি হারিয়ে ফেলেন এবং সেগুলি সন্ধান করতে চান তবে আপনি কেবল ফাইলটি "হ্যাক" না করলে আপনি আরও সুখী হবেন।
qwerty9967

আমি কমান্ডটি ব্যবহার করেছি। তবে এই উত্তরটি কীভাবে এটি কাজ করে তা বুঝতে সহায়ক হয়েছিল এবং বিশেষভাবে, বোঝার জন্য যে রেফ / মাথাগুলি অভ্যন্তরীণ কিছু এবং আমার এটি পরিবর্তন করা উচিত নয়, "পথের" কেবলমাত্র শেষ অংশ। সুতরাং, আমি ভোট দিয়েছি কারণ আমি মনে করি এটি সর্বোপরি মূল্যবান তথ্য ছিল।
মাইক কেসকিনভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.