মাস্টার ছাড়াও কোনও কিছুতে নির্দেশ করতে একটি গিট রিমোট হেড পরিবর্তন করুন


124

আমি কীভাবে গিটার রিমোটের হেড রেফারেন্সটি "মাস্টার" ছাড়াও কোনও কিছুতে নির্দেশ করতে পারি?

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

আমার সমস্যাটি হ'ল রিমোট রিপোজিটরিটিতে এখনও রেফ / হেড / মাস্টার সম্পর্কিত একটি হেড রেফারেন্স রয়েছে তবে আমার এটি অন্য একটি শাখায় নির্দেশ করার দরকার। এটি দুটি সমস্যা সৃষ্টি করছে:

  1. রেপো ক্লোনিং করার সময়, এটি এখানে,

    সতর্কতা: দূরবর্তী হেড অস্তিত্বহীন রেফ বোঝায়, চেকআউট করতে অক্ষম।

    এটি বিভ্রান্তিকর এবং অসুবিধাজনক।

  2. ওয়েব-ভিত্তিক কোড ব্রাউজারটি গাছ ব্রাউজ করার জন্য ভিত্তি হিসাবে হেডের উপর নির্ভর করে। একটি বৈধ শাখায় নির্দেশ করার জন্য আমার মাথা দরকার।


রেকর্ডটির জন্য সবেমাত্র একটি সম্ভাবনা যুক্ত করা হয়েছে তবে এটি আপনার ক্ষেত্রে উপযুক্ত নয়।
ভোনসি

"কোন সাধারণ-পূর্বপুরুষ" কৌশল: আকর্ষণীয়। আপনি এটিকে বিশদ উত্তর হিসাবে পোস্ট করতে পারেন এবং আপনি যদি কাজ করে মনে করেন তবে এটি অফিসিয়াল হিসাবে নির্বাচন করতে পারেন।
ভোনসি

12
এফডব্লিউআইডাব্লু, যেহেতু আপনি প্রশ্নে গিটহাবের উল্লেখ করেছেন - আপনি যদি গিটহাবের হেড রেফ পরিবর্তন করতে চান তবে কেবল সংগ্রহস্থলের "অ্যাডমিন" স্ক্রিনে যান, এবং "ডিফল্ট ব্রাঞ্চ" ড্রপডাউনটি আপনি যেই শাখায় নির্দেশ করতে চান তাতে পরিবর্তন করুন।
জো

আরও দেখুন help.github.com/articles/...
টিনো

উত্তর:


63

গিটহাবের এক বছর আগে প্রায় একই প্রশ্ন ছিল ।

ধারণাটি ছিল মাস্টার শাখার নামকরণ:

git branch -m master development
git branch -m published master
git push -f origin master 

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

(একটি " git-symbolic-ref HEAD refs/head/published" দূরবর্তী রেপোতে প্রচার করা হবে না)

এটি " আমি গিটে উত্স / মাস্টার কীভাবে মুছব " এর অনুরূপ ।


যেমনটি এই থ্রেডে বলা হয়েছে : (জোর আমার)

" git clone" শুধুমাত্র একটি একক স্থানীয় শাখা তৈরি করে।
এটি করতে, এটি HEAD refদূরবর্তী রেপোটির দিকে নজর রাখে এবং এর দ্বারা উল্লিখিত দূরবর্তী শাখা হিসাবে একই নামের সাথে একটি স্থানীয় শাখা তৈরি করে।

সুতরাং এটি মোড়ানোর জন্য, আপনার এ রেপো রয়েছে এবং এটি ক্লোন করুন:

  • HEADতথ্যসূত্র refs/heads/masterএবং এটি বিদ্যমান
    -> আপনি উত্স / মাস্টার থেকে শুরু করে মাস্টার নামে একটি স্থানীয় শাখা পান

  • হেড রেফারেন্স refs/heads/anotherBranchএবং এটি বিদ্যমান
    -> আপনি anotherBranchশুরু করে একটি স্থানীয় শাখা পানorigin/anotherBranch

  • হেড উল্লেখ refs/heads/masterএবং এটি বিদ্যমান নেই
    -> "গিট ক্লোন" অভিযোগ করে

কোনও HEADরেপোতে সরাসরি রেফ সংশোধন করার কোনও উপায় আছে কিনা তা নিশ্চিত নন

(যা আপনার প্রশ্নের মূল বিষয়, আমি জানি;))


সম্ভবত একমাত্র উপায় হ'ল "দরিদ্রদের জন্য প্রকাশনা" , যেখানে আপনি:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

তবে এতে সার্ভারে লিখিত অ্যাক্সেস জড়িত যা সর্বদা সম্ভব নয়।


আমি যেমন " গিট: খালি ভাণ্ডারে অ্যাক্টিভ ব্রাঞ্চ পরিবর্তন করার সঠিক উপায়? " git remote set-headতে ব্যাখ্যা করেছি, দূরবর্তী রেপোতে কোনও পরিবর্তন হবে না।

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


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

তারপরে আপনি প্রাক-কমিট হুকের মাধ্যমে মাস্টার শাখায় কোনও আপডেটের অনুমতি না দিয়ে সেই নীতিটি প্রয়োগ করতে পারেন।
ভোনসি

হ্যাঁ, যদি এটির সক্রিয় হয়ে যায় যে আমি যা করতে চাই তার উপায় নেই তবে আমি ঠিক তা-ই করব এবং আপনার উত্তরটি গ্রহণ করব। অনুসরণ করার জন্য ধন্যবাদ!
জেসনস্মিথ

আপডেটের জন্য ধন্যবাদ. এই মুহুর্তের জন্য, আমি কেবলমাত্র একটি প্রতিশ্রুতি দিয়ে একটি মাস্টার শাখা তৈরি করতে "সাধারণ-পূর্বপুরুষ" কৌশলটি ব্যবহার করেছি। (যেমন: গিট শাখা-ডি মাস্টার; ইকো রেফ: রেফ / হেডস / মাস্টার>। গিট / হেড; আরএম *)। তারপরে আমি কেবল GO_AWAY নামক একটি ফাইল স্পর্শ করেছি এবং প্রতিশ্রুতিবদ্ধ বার্তা পরিস্থিতি ব্যাখ্যা করে। এটি আপাতত কাজ করবে। আমি উত্সটি পরীক্ষা করে দেখতে পারি এবং প্রাপ্তি পক্ষ চূড়ান্ত উত্তরের জন্য যেখানে হেড সেট করে।
জেসনস্মিথ

1
@ctn এটি কেবল কারণ -f( আমি --force) বিকল্পটি ভুলে গেছি । আমি সেই অনুযায়ী উত্তরটি সম্পাদনা করেছি। তারপরে আপনার রেফারেন্সের উত্তরটি একই বিকল্পটি ব্যবহার করে না।
ভনসি 26'15

42

আপডেট: এটি কেবলমাত্র সংগ্রহস্থলের স্থানীয় কপির জন্য ("ক্লায়েন্ট") কাজ করে works নীচে অন্যের মন্তব্য দেখুন।

গিটের সাম্প্রতিক সংস্করণ (ফেব্রুয়ারী 2014) সহ সঠিক পদ্ধতিটি হ'ল:

git remote set-head $REMOTE_NAME $BRANCH

উদাহরণস্বরূপ, রিমোট originথেকে শাখায় মাথা স্যুইচ করা developহবে:

git remote set-head origin develop


এই বৈশিষ্ট্যটির কি সার্ভারে গিটের সাম্প্রতিক সংস্করণ প্রয়োজন বা ক্লায়েন্ট মেশিনে সাম্প্রতিক গিট ইনস্টল করা থাকলে তা যথেষ্ট?
মিক্কো রেন্টালাইনেন

3
@ টোটার ক্ষুদ্র তবে ঠিক; এই উত্তরটি হ্রাস করা উচিত। গিটের কাছে "রিমোটের জন্য স্থানীয়, ডিফল্ট শাখা" এর কিছুটা বিভ্রান্তিকর ধারণা রয়েছে। এটি আপনাকে "উত্স / ডিফল্টব্র্যাঞ্চ" এর পরিবর্তে "উত্স" টাইপ করতে দেয় এবং খাঁটি ক্লায়েন্ট-সাইড জিনিস। দীর্ঘ গল্পGit-scm.com/docs/git-remote # সেট- হেডে
মার্চ এইচ

1
@ মার্চএইচ কী বলছে তা নিশ্চিত করতে: চালান git checkout -b default; git push origin HEAD; git remote set-head origin default। তারপরে আপনি এর সাথে স্থানীয় পরিবর্তনগুলি পরিদর্শন করতে পারেনcat .git/refs/remotes/origin/HEAD (এটি হওয়া উচিত ref: refs/remotes/origin/default) এর এবং এর সাথে দূরবর্তী পরিবর্তনের অভাব git remote show origin(এটি ডিফল্ট শাখা যুক্ত করার আগে যা কিছু ছিল তা এখনও থাকবে)।
দে নোভো

37

যেহেতু আপনি গিটহাবের কথা উল্লেখ করেছেন, তাদের সাইটে এটি করার জন্য কেবল আপনার প্রকল্পে যান, তারপরে ...

admin > Default Branch > (choose something)

সম্পন্ন.


1
অসাধারণ! এটি ছিল সর্বশেষ অনুপস্থিত বিট।
বার্কাস

আমার উত্স / হেড ইতিমধ্যে মাস্টারের পরিবর্তে কোনও বৈশিষ্ট্য শাখায় নির্দেশ করেছে। আমি পিছনে পিছনে "মূল শাখা" পরিবর্তন করার চেষ্টা করেছি, তবে এটি হেডকে প্রভাবিত করে না ... কোনও পরামর্শ?
ড্যানিল শেভলেভ

3
সেটিংস> শাখাগুলি> ডিফল্ট শাখা
চুন ইয়াং

12

দেখা: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

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

ব্যবহার:

$ git symbolic-ref HEAD refs/heads/<branch name>

6
it গিট প্রতীকী-রেফ হেড রেফ / মাথা / নাম-শাখার
ল্যামি

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

10

(ইতিমধ্যে মূলত একই প্রশ্নটি ছিল " দূরবর্তী ভাণ্ডারে একটি গিট সিম্বলিকাল রেফ তৈরি করুন ", যা সর্বজনীন উত্তর পায়নি।)

তবে বিভিন্ন গিট "ফার্ম" এর জন্য নির্দিষ্ট উত্তর রয়েছে (যেখানে একাধিক ব্যবহারকারী গিটার রেপোসকে একটি সীমাবদ্ধ ইন্টারফেসের মাধ্যমে: HTTP এবং ssh এর মাধ্যমে পরিচালনা করতে পারেন): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org )।

এই পৃষ্ঠাটি পড়া এবং এই নির্দিষ্ট পরিষেবাদি সম্পর্কে চিন্তাভাবনা করার জন্য এই নির্দিষ্ট উত্তরগুলি কার্যকর হতে পারে।


4
Repo.or.cz এ HEAD শাখা নির্বাচন করার জন্য এখন তাদের একটি ড্রপ-ডাউন মেনু রয়েছে (উদাহরণস্বরূপ: repo.or.cz/editproj.cgi?name=for-me-and-for-all_imz.git ) এবং gitorious.org খুব। গ্রেট!
ইম্জ - ইভান জ্যাকারিয়াশেভ

7

শেল থেকে আপনার যদি রিমোট রেপোতে অ্যাক্সেস থাকে তবে কেবল .git (অথবা মূল দির যদি এটি একটি খালি রেপো থাকে) যান এবং সঠিক মাথাটি নির্দেশ করতে হেড ফাইলটি পরিবর্তন করুন। উদাহরণস্বরূপ, ডিফল্টরূপে এটি সর্বদা 'রেফ: রেফ / হেডস / মাস্টার' ধারণ করে তবে এর পরিবর্তে আপনার যদি হেড হতে Foo দরকার হয় তবে কেবল প্রধান ফাইলটি সম্পাদনা করুন এবং সামগ্রীগুলি 'রেফস / রেফ / হেডস / ফু' তে পরিবর্তন করুন।


গিট সার্ভারে আমার অ্যাডমিন অধিকার রয়েছে এবং আমি ঠিক একই কাজ করেছি। আমরা গিটোলাইট ব্যবহার করি এবং আমি তৈরি করা সংগ্রহস্থলে গিয়েছিলাম। ডিরেক্টরি নাম myrepo.git। প্রদত্ত ডিরেক্টরি মধ্যে মাথা ফাইলের বিষয়বস্তু থেকে পরিবর্তন করা হয়েছে ref: refs/heads/masterথেকে ref: refs/heads/mainline। এখন, আমি যখন আমার স্থানীয় বাক্সে সংগ্রহস্থলটি ক্লোন করার চেষ্টা করি তখনও এটি মাস্টারকে নির্দেশ করে। আমি git clone ssh://gitolite@git.server/myrepoকমান্ড দৌড়েছি । এই জাতীয় আচরণের জন্য কোনও ধারণা?
টেকনেক্সট

গিট সার্ভার সংস্করণ: git version 1.7.1& গিট ক্লায়েন্ট সংস্করণ:git version 1.9.4.msysgit.2
টেকনেক্সট

5

আপনি কেবল চীনামাটির বাসন গিট কমান্ড ব্যবহার করে একটি বিচ্ছিন্ন মাস্টার শাখা তৈরি করতে পারেন :

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

এটি আমাদেরকে অভদ্র বার্তা সহ একটি মাস্টার শাখা দেয় (আপনি আরও নম্র হতে চাইতে পারেন)। এখন আমরা আমাদের "আসল" শাখা তৈরি করি ( এসভিএন এর সম্মানে এটি ট্রাঙ্ক বলি ) এবং মাস্টার থেকে এটি বিবাহবিচ্ছেদ করুন :

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

আরে ক্ষিপ্র! gitk - সমস্ত তাদের সাথে কোনও লিঙ্ক না রেখে মাস্টার এবং ট্রাঙ্ক দেখায় ।

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

পুরাতন হেড কমিট গিট-জিসি দ্বারা মোছা হবে না কারণ রেফ / হেড / মাস্টার এখনও এটি দেখায়

--Allow খালি পতাকা শুধুমাত্র প্রয়োজন কারণ আমরা একটি খালি গাছ সংগঠনের করছি করা হয়। গিট আরএম এর পরে যদি কিছু গিট অ্যাড থাকে তবে এটি প্রয়োজনীয় হবে না।

সত্য, আপনি যে কোনও সময়ে সংগ্রহশালায় প্রাথমিক কমিট শাখা করে, তার গাছটি মুছে ফেলা, আপনার বিচ্ছিন্ন গাছ যুক্ত করে, তারপর গিট কমিট --amend করে একটি বিচ্ছিন্ন শাখা তৈরি করতে পারেন ।

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


1
অন্য রেপো থেকে সম্পর্কযুক্ত শাখা এনে একটি নাম দিয়ে আপনি একটি বিচ্ছিন্ন শাখা সহজেই তৈরি করতে পারেন। উদাহরণস্বরূপ, রিমোটে শাখার সাথে মেলে এমন git fetch git:user@example.com:foo remote-branch-name && git checkout -b detached-branch FETCH_HEADনতুন শাখা যুক্ত করবে । অবশ্যই, "রিমোট" স্থানীয় ফাইল সিস্টেমে আপনি পূর্বে প্রস্তুত একটি ভাণ্ডার হতে পারে। detached-branchremote-branch-namegit:user@example.com:foo
মিক্কো রেন্টালাইনেন

2

প্রথমে আপনি যে নতুন শাখাটি আপনার ডিফল্ট হিসাবে সেট করতে চান তা তৈরি করুন, উদাহরণস্বরূপ:

$>git branch main

এর পরে, যে শাখা ধাক্কা উৎপত্তি :

$>git push origin main

এখন আপনি যখন আপনার গিটহাব অ্যাকাউন্টে লগইন করবেন, আপনি নিজের সংগ্রহস্থলে গিয়ে সেটিংস> ডিফল্ট শাখা এবং " প্রধান " চয়ন করতে পারেন ।

তারপরে, আপনি যদি এটি চয়ন করেন তবে আপনি মাস্টার শাখা মুছতে পারেন:

$>git push origin :master


বোঝার মূল বিষয়টি হ'ল যদি আপনি হোস্টিং প্রোভাইডার (এই উদাহরণে গিটহাব) ডিফল্ট শাখাকে সংশোধন করার জন্য কোনও পদ্ধতি সরবরাহ না করে থাকেন তবে আপনার ভাগ্যের আওতা নেই। গিট প্রোটোকল দূরবর্তী ডিফল্ট শাখাটি সংশোধন করার জন্য কোনও বৈশিষ্ট্য সরবরাহ করে না; আপনাকে git symbolic-refদূরবর্তী শেলটি চালাতে সক্ষম হতে হবে বা অন্যথায় HEADদূরবর্তী সংগ্রহস্থল রুট ডিরেক্টরিতে ডাকা পাঠ্য ফাইলটি পরিবর্তন করতে সক্ষম হতে হবে ।
মিক্কো রেন্টালাইনেন

2

প্রশ্নের সাথে সম্পর্কিত, অনুসন্ধান করতে গিয়ে এখানেই শেষ করেছি:

গিটহাবের পরিবর্তিত ডিফল্ট শাখা সম্পর্কে আমি কীভাবে স্থানীয় রেপোকে সচেতন করব

সম্পূর্ণতার জন্য, উত্তরটি যুক্ত করুন:

git remote set-head origin -a

0

গিটোলাইট লোকের জন্য, গিটোলাইট একটি কমান্ড সমর্থন করে - এটির জন্য অপেক্ষা করুন - symbolic-ref। যদি রেপোতে আপনার ডাব্লু (লিখন) অনুমতি থাকে তবে এটি আপনাকে সেই আদেশটি দূরবর্তীভাবে চালানোর অনুমতি দেয়।


-1

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


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