"গিট শাখা -আর" চালানোর সময় কেন "উত্স / হেড" দেখানো হয়?


160

আপনি যখন চালান git branch -rকেন ব্লেজগুলি এটি তালিকা করে origin/HEAD? উদাহরণস্বরূপ, গিটহাবের একটি রিমোট রেপো রয়েছে, বলুন, দুটি শাখা সহ: মাস্টার এবং দারুণ বৈশিষ্ট্য। যদি আমি git cloneএটি দখল করতে পারি এবং তারপরে আমার নতুন ডিরেক্টরিতে গিয়ে শাখাগুলির তালিকা তৈরি করি, আমি এটি দেখতে পাচ্ছি:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

অথবা এটিতে যে কোনও আদেশ থাকবে (আলফা? আমি একটি নিরীহ রেপোর পরিচয় গোপন রাখতে এই উদাহরণটি নকল করছি)। তাহলে কি HEADব্যবসা? এটা কি শেষ ব্যক্তি হয় pushতাদের ছিল HEADদিকে তাক যখন তারা ধাক্কা? তারা যেটা pushএডি করেছিল তা কি সর্বদা থাকবে না ? HEADচলাফেরা করা ... HEADঅন্য মেশিনে কারও ইশারা করা কেন আমি তার যত্ন করব ?

আমি কেবল রিমোট ট্র্যাকিং এবং এ জাতীয় একটি হ্যান্ডেল পাচ্ছি, সুতরাং এটি একটি দীর্ঘস্থায়ী বিভ্রান্তি। ধন্যবাদ!

সম্পাদনা: আমি এমন ছাপের মধ্যে ছিলাম যে উত্সর্গীকৃত রিমোট রেপোস (যেমন গিটহাব যেখানে এই কোডটিতে কেউ প্রবেশ করবে না, তবে কেবল টান বা ধাক্কা দেবে) ইত্যাদি ছিল না এবং তার মাথাও না থাকা উচিত ছিল কারণ মূলত, কোন কাজের অনুলিপি। তাই না?


সম্পর্কিত: stackoverflow.com/questions/8839958/...
leonbloy

উত্তর:


140

@robinst সঠিক।

গিট-এ, আপনি কোন শাখাটি ডিফল্টরূপে পরীক্ষা করে দেখতে পারেন (যেমন আপনি ক্লোন করলে)। ডিফল্ট হিসাবে, origin/HEADএটি নির্দেশ করবে।

গিটহাব-এ, আপনি এটি আপনার গিটহাব রেপোর প্রশাসনিক সেটিংসে পরিবর্তন করতে পারবেন । আপনি এটি কমান্ড-লাইন থেকেও করতে পারেন

git remote set-head origin trunk

বা এর মাধ্যমে পুরোপুরি মুছুন

git remote set-head origin -d

উদাহরণ । 'স্যুইচ শাখা' ড্রপ ডাউন দেখুন Look trunkচেক করা হয়, তাই origin/HEADঅনুসরণ করা হয় trunk


আমি অন্য রিমোটটির নামকরণ করেছি originএবং আমাকে otherremote/HEAD -> masterবিরক্ত করছিলাম । আপনার আদেশ চালানো আমার জন্য এটি স্থির করে।
ফিলিপ আলভারেজ

59

খালি সংগ্রহস্থলটির একটি হেড থাকতে পারে, কারণ এটি নির্ধারণ করে যে কোন শাখাটি প্রথমে সংগ্রহস্থলের ক্লোন পরে পরীক্ষা করা হয়।

সাধারণত, হেড মাস্টারকে নির্দেশ করে এবং লোকেরা ভান্ডারটি ক্লোন করার সময় সেই শাখাটি পরীক্ষা করা হয়। এটিকে অন্য শাখায় সেট করা (খালি সংগ্রহস্থলে হেড সম্পাদনা করে) এর ফলাফলটি সেই শাখার ক্লোন হয়ে যায়।


2
কারন ধাক্কা না দিয়ে এই রেফারেন্সটি সরিয়ে ফেলা সম্ভব, origin/HEADস্থানীয় রেফারেন্স কি সঠিক? এটিকে অপসারণ করা কি কোনও প্রভাব ফেলবে origin?
জ্যাচ পোস্টেন

@zposten: না, মুছে ফেলা origin/masterদূরবর্তীকে প্রভাবিত করে না একইভাবে ।
রবিনস্ট

এর অর্থ হ'ল রেফারেন্স ক্লোনিংয়ের পরে কেবল তথ্যের অকেজো টুকরা।
বাচসউ

@ বাছসৌ রেফারেন্স ক্লোন হয়ে যায় না।
রবিনস্ট

27

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

আপনি যেমন বলেছিলেন ঠিক তেমনই আমারও ছাপ ছিল।

এবং আমি এমনকি গিথুব থেকে ক্লোন করা যে উত্স / হেড দূরবর্তী ট্র্যাকিং শাখাটি মুছতে পারি না

git branch -d -r origin/HEAD

এটির কোনও প্রভাব ছিল না।

কেউ কি আমাকে বলতে পারবেন যে আমি কীভাবে সেই মূল / হেড দূরবর্তী ট্র্যাকিং শাখাটি মুছতে পারি?

হালনাগাদ

যদিও আমি গিথুব থেকে ক্লোন করার সময় কেন একটি উত্স / হেড তৈরি হয়েছে তা খুঁজে পাইনি, তবে আমি এটি মুছে ফেলার একটি উপায় খুঁজে পেয়েছি।

গিট নতুন সংস্করণ সরবরাহ

git remote set-head <name> -d

রিমোট-ট্র্যাকিং শাখার অকেজো হেড পয়েন্টার মুছতে।

এবং আমরা বোকার ডিফল্ট নাম 'উত্স' ব্যবহার করে আমরা যা চাই তা পরিবর্তন করতে পারি

git remote rename origin <new_name>

আশা করি এটি সাহায্য করতে পারে। :)


আমার একই সমস্যা হচ্ছে (গিটহাব সমেও), এবং সেট-হেড কাজ করে না। আমার কি 'গিট রিমোট সেট-হেড হেড-ডি' চালানো উচিত?
জোস্ট শ্যুর

5
@ জাস্ট: এটিgit remote set-head origin -d
znq

13

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

HEAD বৈধ সংগ্রহস্থলের জন্য প্রয়োজনীয়তার অংশ। গিট সংগ্রহস্থল লেআউট অংশ হিসাবে বলেছে:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

সুতরাং আপনি শাখা তালিকার অংশ হিসাবে হেডকে দেখতে যাচ্ছেন, এমনকি "এর অর্থ খুব বেশি নয় ..."


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

@ জিওএডিসিক একটি ভাণ্ডার এমনকি যদি আপনি এটির দিকে ঠেলাঠেলি করেন তবে খালি থাকতে পারে। নিম্নলিখিত: mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config --global user.email "you@example.com"; git config --global user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bareসত্য সত্য ফলাফল। সেই নির্দেশাবলী অনুসারে ফুবার রেপোতে পুশ ফাইলটির কোনও কার্যকরী অনুলিপি নেই।
অ্যান্ডারস লিন্ডন

@ জিওএডিসিক একটি ভাণ্ডার এমনকি যদি আপনি এটির দিকে ঠেলাঠেলি করেন তবে খালি থাকতে পারে। নিম্নলিখিত: mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config user.email "you@example.com"; git config user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bareসত্য সত্য ফলাফল। সেই নির্দেশাবলী অনুসারে ফুবার রেপোতে পুশ ফাইলটির কোনও কার্যকরী অনুলিপি নেই।
অ্যান্ডারস লিন্ডন

@ জিওয়েডেসিক এ - বেয়ার গিট রেপো বলতে কেবল কোনও কার্যকারী বৃক্ষবিহীন একটি রেপো বোঝায়, এমন একটি রেপো যাতে কেবল একটি .git- ডিরেক্টরি থাকে তবে এতে কোনও পরীক্ষিত ফাইল থাকতে পারে না। যেহেতু এটিতে কোনও পরীক্ষিত ফাইল থাকতে পারে না, এটির কাছে আসলে একটি .git ডিরেক্টরিও নেই, এটি সমস্ত .git ফাইলগুলিকে সরাসরি সরাসরি ডিরেক্টরিতে রাখে। একটি তৈরি করুন এবং আপনি দেখতে পাবেন!
00 প্রোমিথিউস

5

যদি "উত্স" একটি দূরবর্তী সংগ্রহস্থল হয়, তবে উত্স / HEAD সেই দূরবর্তী সংগ্রহস্থলের ডিফল্ট শাখা সনাক্ত করে।

উদাহরণ:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:walkerh/pipe-o-matic.git
  Push  URL: git@github.com:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

"হেড শাখা: মাস্টার" বলছে এমন রেখাটি নোট করুন। এটিই যেখানে দূরবর্তী সংগ্রহস্থল ক্লায়েন্টদের ডিফল্টরূপে কোন শাখাটি চেকআউট করতে দেয়।


1

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


2
গিথব রেপগুলিতে শাখা পরীক্ষা করা হয়নি। কেন এটি প্রয়োগ হবে তা আমি দেখছি না।
ডাস্টিন

দূরবর্তী সংগ্রহস্থলের একটি কার্যনির্বাহী ডিরেক্টরি থাকা উচিত নয়। দূরবর্তী সংগ্রহস্থলগুলি --Bare হওয়া উচিত এবং সুতরাং বর্তমানে চেক আউট শাখা থাকতে পারে না।
n4rzul

-14

আমার অনুমান যে কেউ একটি শাখা ঠেলে এটিকে হেড বলেছেন:

git push origin HEAD

এতে কী সমস্যা হয়েছে সে সম্পর্কে আমি কিছু মন্তব্য পেতে পারি? আপনি যদি গিথুবে কোনও উত্স / শিরোনাম চান, তবে এটির পক্ষে এটিই আমি জানি।
ডাস্টিন

রিমোট হেড একটি প্রতীকী রেফ (সাধারণত রেফ / হেড / মাস্টার থেকে) to আপনি আপনার বর্তমান শাখার অঙ্গীকারের হ্যাশ আইডি দ্বারা প্রতীকী রেফ প্রতিস্থাপন করবেন।
ড্যানিয়েল ফানজুল

2
অনুমানগুলি অনর্থক উত্তর হওয়ার পরিবর্তে মন্তব্যে আলোচনা করা উচিত নয়?
লুসিয়ানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.