git কিভাবে মূল/মাথা সেট পেতে না?




git tutorial (4)

Disclaimer : এই জেফোমি এর উত্তর একটি আপডেট, যা আমি কিছু সময় অদ্ভুত সংরক্ষণ করতে লিখছি।

আমি প্রতিলিপি করতে ব্যর্থ হয়েছি (গিট 2.0.1 তে) remote HEAD is ambiguous হেডটি remote HEAD is ambiguous বার্তা যা জেফোমি তার উত্তর উল্লেখ করে; তাই আমি খনন কিছুটা করেছি ( https://github.com/git/git cloning এবং লগ অনুসন্ধান করে)। এটা যে ব্যবহৃত

Determining HEAD is ambiguous since it is done by comparing SHA1s.

In the case of multiple matches we return refs/heads/master if it
matches, else we return the first match we encounter. builtin-remote
needs all matches returned to it, so add a flag for it to request such.

( 4229f1fa325870d6b24fe2a4c7d2ed5f14c6f771 , ২7 শে ফেব্রুয়ারী, ২009 তারিখ, git log --reverse --grep="HEAD is ambiguous" ) পাওয়া গেছে।

যাইহোক, প্রশ্ন থেকে সন্ত্রাসী উত্থাপিত হয়েছে :

One long-standing flaw in the pack transfer protocol used by "git
clone" was that there was no way to tell the other end which branch
"HEAD" points at, and the receiving end needed to guess.  A new
capability has been defined in the pack protocol to convey this
information so that cloning from a repository with more than one
branches pointing at the same commit where the HEAD is at now
reliably sets the initial branch in the resulting repository.

( 9196a2f8bd46d36a285bdfa03b4540ed3f01f671 , তারিখ 8 নভেম্বর ২013, git log --grep="ambiguous" --grep="HEAD" --all-match সাথে পাওয়া গেছে - git log --grep="ambiguous" --grep="HEAD" --all-match )

সম্পাদনা করুন ( torek ধন্যবাদ):

$ git name-rev --name-only 9196a2f8bd46d36a285bdfa03b4540ed3f01f671
tags/v1.8.4.3~3

এর অর্থ হল, যদি আপনি Git v1.8.4.3 বা তার পরে ব্যবহার করেন, তবে আপনার কোন দ্বিধান্বিত-দূরবর্তী-মাথা সমস্যা হতে পারে না।

আমি মূল একটি রেফারেন্স ট্র্যাক করতে একটি শাখা সেট আপ আছে। git checkout <branchname> যে শাখাটিতে স্যুইচ করে, এবং একটি git status আমাকে দেখাবে যে আমার শাখাটি কতদূর এগিয়ে বা পিছনে থেকে এসেছে, কিন্তু আমি অবাক হয়েছি যে origin/HEAD এখনও origin/master দিকে নির্দেশ করে এবং origin/<branchname>

তাই আমার প্রশ্ন হল, কোন পরিস্থিতিতে কোনটি মূল / মাথা সরানো হয়?

সম্পাদনা করুন:

আমি মূল / হেড কীভাবে সরানো যায় তার উত্তরগুলির প্রশংসা করি, কিন্তু আমার "বাহ্যিকভাবে" এটি কীভাবে চালায় তাতে আগ্রহী, আমার বাইরে এটি স্পষ্টভাবে এটি করার জন্য বলছে।

উদাহরণস্বরূপ, যখন আমি শাখাগুলি স্যুইচ করি, গিটটি যে শাখাটি পরীক্ষা করে দেখছে সেটিতে HEAD পয়েন্ট তৈরি করে, তাই আমি অবাক হয়ে আছি যে মূল / হেড একই ভাবে চলতে পারে না।


Answer #1

এটা আপনার স্থানীয় repo মালিক হিসাবে আপনার সেটিং। এটি এভাবে পরিবর্তন করুন:

git remote set-head origin some_branch

এবং মূল / হেড মাস্টার পরিবর্তে আপনার শাখায় নির্দেশ করবে। এটি তখন শুধুমাত্র আপনার রেপোতে প্রয়োগ হবে এবং অন্যদের জন্য নয়। ডিফল্টরূপে, এটি মাস্টারকে নির্দেশ করবে, যদি না রিমোট রেপোতে অন্য কিছু কনফিগার করা থাকে।

রিমোট সেট-হেডের জন্য ম্যানুয়াল এন্ট্রি এই বিষয়ে কিছু ভাল তথ্য সরবরাহ করে।

সম্পাদনা: জোর দেওয়া: আপনি এটি না জানিয়েই, "সরানো" একমাত্র উপায় যা মাস্টার শাখাটির নামকরণের মতো একটি মামলা হবে, যা আমি মনে করি না তা "জৈব" বলে বিবেচিত হয়। সুতরাং, আমি বলব জৈবিকভাবে এটি সরানো হয় না।


Answer #2

কি মূল / মাথা "আর্গুমেন্টিক" চালায়?

  • git clone মূলত হিট যেখানে স্পট এ সেট করে
    • এটি git clone সঙ্গে cloning পরে চেকআউট ডিফল্ট শাখা হিসাবে কাজ করে

মূল উত্স কি প্রতিনিধিত্ব করে?

  • বেয়ার রিপোজিটরিগুলিতে (প্রায়শই "সার্ভারগুলিতে" রিপোজিটরিগুলি) এটি ডিফল্ট শাখার মার্কার হিসাবে কাজ করে, কারণ git clone এভাবে ব্যবহার করে
  • অ-ন্যূনতম সংগ্রহস্থলের (স্থানীয় বা দূরবর্তী), এটি রিপোজিটরির বর্তমান চেকআউট প্রতিফলিত করে

কি সেট মূল / মাথা?

  • git clone fetches এবং সেট করে
  • git fetch এটি অন্য কোন রেফারেন্স মত আপডেট যদি এটি জ্ঞান করতে হবে, কিন্তু এটা না
  • git remote set-head origin -a fetches এবং এটি সেট
    • দূরবর্তী "ডিফল্ট শাখা" বিবেচনা করে কি স্থানীয় জ্ঞান আপডেট দরকারী

তুচ্ছ বস্তু

  • origin/HEAD রিমোটের সাথে যোগাযোগ না করে অন্য কোনও origin/HEAD সেট করা যেতে পারে: git remote set-head origin <branch>
    • আমি পরীক্ষার জন্য ছাড়া, এই জন্য কোন ব্যবহারের ক্ষেত্রে দেখতে
  • দুর্ভাগ্যবশত কিছু রিমোট হেড সেট করতে পারবেন
  • গিটের পুরোনো সংস্করণগুলি কোনও শাখাটি রিমোটে কোনও শাখায় উল্লেখ করে না, এটি কেবল শেষ পর্যন্ত হ্যাশকে নির্দেশ করে: তাই এটি আশা করে একই হ্যাশের দিকে নির্দেশ করে একটি শাখা নাম

Answer #3

আমরা কথা বলছি দুটি স্বাধীন গিট repos আছে মনে রাখবেন। আপনার কোড এবং রিমোট অন্য কোথাও চলমান সঙ্গে আপনার স্থানীয় repo।

আপনার অধিকার, আপনি একটি শাখা পরিবর্তন যখন, HEAD আপনার বর্তমান শাখা নির্দেশ করে। এই সব আপনার স্থানীয় গিট repo ঘটছে। রিমোট রেপো নয়, যা অন্য ডেভেলপারের মালিকানাধীন হতে পারে, অথবা আপনার অফিসে, বা গীথুব, বা ফাইল সিস্টেমে অন্য কোন ডিরেক্টরিতে বাজানো বা ইত্যাদি ...

আপনার কম্পিউটার (স্থানীয় রেপো) রিমোট গিট রেপোতে হেড পয়েন্টার পরিবর্তন করার কোনও ব্যবসা নেই। এটি উদাহরণস্বরূপ একটি ভিন্ন বিকাশকারী দ্বারা মালিকানাধীন হতে পারে।

একাধিক জিনিস, আপনার কম্পিউটারটি কি মূল / XXX কে কল করে তা হল আপনার কম্পিউটারের দূরবর্তী অবস্থার সময়ে দূরবর্তী অবস্থা সম্পর্কে বোঝার।

তাই কি "আঞ্চলিকভাবে" মূল / হেড আপডেট হবে? এটি রিমোট গিট রেপোতে কার্যকলাপ হবে। আপনার স্থানীয় repo না।

মানুষ উল্লেখ করেছেন

গিট সিম্বলিক-রেফার HEAD refs / head / my_other_branch

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







git