গিট 2.5 জুলাই ২০১৫ সাল থেকে প্রস্তাব করেছে এর প্রতিস্থাপন contrib/workdir/git-new-workdir: গিট ওয়ার্ক্রিট্রি
জুনিও সি হামানো ( ) দ্বারা 68a2e6a কমিট দেখুন ।gitster
মুক্তি নোট উল্লেখ :
এর জন্য প্রতিস্থাপন contrib/workdir/git-new-workdirপ্রতীকী লিঙ্কগুলির উপর নির্ভর করে না এবং objectsণগ্রহীতা এবং orrowণগ্রহীতাকে একে অপরকে সচেতন করে অবজেক্টগুলিকে ভাগ করে নেওয়া এবং নিরাপদ করে।
প্রতিশ্রুতি দেখুন 799767cc9 (গিট 2.5rc2)
তার মানে আপনি এখন একটি করতে পারেনgit worktree add <path> [<branch>]
এটি তৈরি করুন <path>এবং এতে চেকআউট করুন <branch>। নতুন ওয়ার্কিং ডিরেক্টরিটি বর্তমান সংগ্রহস্থলের সাথে সংযুক্ত এবং এইচএইড, সূচক ইত্যাদির মতো ওয়ার্কিং ডিরেক্টরি নির্দিষ্ট ফাইলগুলি বাদ দিয়ে সমস্ত কিছু ভাগ করে নেওয়া হচ্ছে git worktreeবিভাগটি যুক্ত করেছে:
গিট সংগ্রহস্থল একাধিক কার্যনির্বাহী গাছকে সমর্থন করতে পারে, আপনাকে একবারে একাধিক শাখা পরীক্ষা করার অনুমতি দেয়।
সহ git worktree add, একটি নতুন কার্যকরী গাছ সংগ্রহস্থলের সাথে যুক্ত।
এই নতুন কার্যকারী গাছটিকে "লিঙ্কযুক্ত ওয়ার্কিং ট্রি" বলা হয় " git init" বা " git clone" দ্বারা প্রস্তুত "মূল কার্যকারী গাছ" এর বিপরীতে ।
একটি সংগ্রহস্থলের একটি প্রধান কার্যকারী গাছ থাকে (যদি এটি একটি খালি সংগ্রহস্থল না হয়) এবং শূন্য বা আরও সংযুক্ত ওয়ার্কিং ট্রি থাকে।
বিবরণ:
প্রতিটি সংযুক্ত কাজের গাছের সংগ্রহস্থলের ডিরেক্টরিতে একটি ব্যক্তিগত সাব-
$GIT_DIR/worktreesডিরেক্টরি থাকে।
ব্যক্তিগত উপ-ডিরেক্টরিটির নাম সাধারণত লিঙ্কযুক্ত কার্যকারী গাছের পথের ভিত্তি নাম, সম্ভবত এটি অনন্য করতে একটি সংখ্যার সাথে যুক্ত করা হয়।
উদাহরণস্বরূপ, যখন $GIT_DIR=/path/main/.gitকমান্ডটি git worktree add /path/other/test-next nextতৈরি করে:
- সংযুক্ত ওয়ার্কিং ট্রি
/path/other/test-nextএবং এ
- এছাড়াও একটি
$GIT_DIR/worktrees/test-nextডিরেক্টরি তৈরি করে (বা $GIT_DIR/worktrees/test-next1যদি test-nextইতিমধ্যে নেওয়া হয়)।
একটি লিঙ্কযুক্ত কাজের গাছের মধ্যে:
$GIT_DIRএই বেসরকারী ডিরেক্টরিতে নির্দেশ করা হয়েছে (উদাহরণস্বরূপ /path/main/.git/worktrees/test-nextউদাহরণস্বরূপ) এবং
$GIT_COMMON_DIRমূল কার্যকারী গাছের $GIT_DIR(উদাহরণস্বরূপ /path/main/.git) দিকে ফিরে নির্দেশ করা হয়েছে ।
এই সেটিংসটি .gitলিঙ্কযুক্ত কার্যকারী গাছের শীর্ষ ডিরেক্টরিতে অবস্থিত একটি ফাইলে তৈরি করা হয় ।
আপনি যখন কোনও লিঙ্কযুক্ত কাজের গাছের সাথে কাজ শেষ করেন আপনি কেবল এটি মুছতে পারেন।
সংগ্রহস্থলের মধ্যে কাজ গাছ প্রশাসনিক ফাইল অবশেষে স্বয়ংক্রিয়ভাবে সরানো হবে (দেখুন gc.pruneworktreesexpireএ git config), অথবা আপনি চালাতে পারেন git worktree pruneকোনো মামুলি প্রশাসনিক ফাইল পরিষ্কার করতে প্রধান বা কোন লিঙ্ক কাজ গাছে।
সতর্কতা: সচেতন হতে এখনও একটি git worktree"BUGS" বিভাগ রয়েছে।
সাবমডিউলগুলির জন্য সমর্থন অসম্পূর্ণ ।
সুপারপজেক্টের একাধিক চেকআউট করার পরামর্শ দেওয়া হয় না।
নোট: Git 2.7rc1 (নভেম্বর 2015) সঙ্গে আপনি করতে পারবেন তালিকা আপনার worktrees।
দেখুন bb9c03b কমিট , 92718b7 কমিট , কমিট 5193490 , কমিট 1ceb7f9 , কমিট 1ceb7f9 , কমিট 5193490 , কমিট 1ceb7f9 , কমিট 1ceb7f9 (08 অক্টোবর 2015), কমিট 92718b7 , কমিট 5193490 , কমিট 1ceb7f9 , কমিট 1ceb7f9 (08 অক্টোবর 2015), কমিট 5193490 , প্রতিশ্রুতিবদ্ধ 1ceb7f9 (08 অক্টোবর 2015), 1ceb7f9 প্রতিশ্রুতিবদ্ধ (08 অক্টোবর 2015), এবং প্রতিশ্রুতিবদ্ধ ac6c561(02 অক্টোবর 2015) মাইকেল র্যাপাজজো ( rappazzo) দ্বারা ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে a46dcfb কমিট 26 অক্টোবর 2015)
worktree: যোগ ' list' কমান্ড
' git worktree list' ওয়ার্কট্রি তালিকার মাধ্যমে পুনরাবৃত্তি করে, এবং ওয়ার্ক্রি গাছের পথ, বর্তমানে পরীক্ষা করা সংশোধন এবং শাখা এবং ওয়ার্ক ট্রি খালি থাকলে ওয়ার্কট্রি সম্পর্কিত বিশদগুলি আউটপুট দেয়।
$ git worktree list
/path/to/bare-source (bare)
/path/to/linked-worktree abcd1234 [master]
/path/to/other-linked-worktree 1234abc (detached HEAD)
চীনামাটির বাসন বিন্যাস বিকল্প উপলব্ধ।
চীনামাটির বাসন বিন্যাসে বৈশিষ্ট্য অনুসারে একটি লাইন থাকে।
- বৈশিষ্ট্যগুলি একটি একক স্পেস দ্বারা পৃথক করা একটি লেবেল এবং মান সহ তালিকাভুক্ত করা হয়।
- বুলিয়ান বৈশিষ্ট্যগুলি (যেমন 'বেয়ার' এবং 'বিচ্ছিন্ন') কেবলমাত্র একটি লেবেল হিসাবে তালিকাভুক্ত থাকে এবং মানটি সত্য হলে কেবল এবং যদি কেবল উপস্থিত হয়।
- একটি খালি লাইন একটি ওয়ার্কট্রির সমাপ্তি নির্দেশ করে
এই ক্ষেত্রে:
$ git worktree list --porcelain
worktree /path/to/bare-source
bare
worktree /path/to/linked-worktree
HEAD abcd1234abcd1234abcd1234abcd1234abcd1234
branch refs/heads/master
worktree /path/to/other-linked-worktree
HEAD 1234abc1234abc1234abc1234abc1234abc1234a
detached
দ্রষ্টব্য: আপনি যদি একটি ওয়ার্ক্রি ফোল্ডার সরিয়ে ফেলে থাকেন তবে আপনাকে ম্যানুয়ালিgitdir ফাইল আপডেট করতে হবে।
দেখুন কমিট 618244e (22 জানুয়ারী 2016), এবং d4cddd6 কমিট (18 জানুয়ারী 2016) দ্বারা গান Nguyễn গান Thái আরো Ngọc গান Duy ( pclouds) ।
সাহায্যপ্রাপ্ত: এরিক সানশাইন ( sunshineco) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে d0a1cbc কমিট , 10 ফেব্রুয়ারী 2016)
গিট ২.৮ (মার্চ ২০১)) এ নতুন দস্তাবেজের মধ্যে রয়েছে:
আপনি যদি কোনও লিঙ্কযুক্ত কাজের গাছটি সরান, আপনাকে gitdirএন্ট্রিটির ডিরেক্টরিতে ' ' ফাইল আপডেট করতে হবে ।
উদাহরণস্বরূপ, যদি কোনও লিঙ্কযুক্ত কাজের গাছটি সরানো হয় /newpath/test-nextএবং এর .gitফাইলটি এতে নির্দেশ করে /path/main/.git/worktrees/test-next, তবে পরিবর্তে /path/main/.git/worktrees/test-next/gitdirরেফারেন্সে আপডেট
/newpath/test-nextকরুন।
কোনও শাখা মুছে ফেলার সময় সাবধানতা অবলম্বন করুন: গিট 2.9 এর আগে (জুন 2016), আপনি অন্য কাজের গাছের ব্যবহারের মধ্যে একটি মুছতে পারেন ।
যখন " git worktree" বৈশিষ্ট্যটি ব্যবহৃত হয়, " git branch -d" অন্য একটি ওয়ার্কট্রিতে চেক আউট করা শাখা মুছে ফেলার অনুমতি দেয়।
দেখুন কমিট f292244 (29 মার্চ 2016) দ্বারা Kazuki ইয়ামাগুচি ( rhenium) ।
সাহায্যপ্রাপ্ত: এরিক সানশাইন ( sunshineco) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 4fca4e3 , 13 এপ্রিল 2016)
branch -d: বর্তমানে একটি শাখা মুছে ফেলা অস্বীকার করুন যা বর্তমানে পরীক্ষা করা হয়েছে
যখন বর্তমান শাখা গাছ দ্বারা একটি শাখা পরীক্ষা করা হয়, তখন শাখাটি মোছা নিষিদ্ধ।
তবে যখন শাখাটি কেবলমাত্র অন্য কার্যক্ষম গাছ দ্বারা পরীক্ষা করা হয়, ভুলভাবে মুছে ফেলা সফল হয়।
ব্যবহার করুন find_shared_symref()যদি শাখা ব্যবহার করা হচ্ছে, শুধু বর্তমান পরিশ্রমী গাছ মাথার সঙ্গে তুলনা না করো।
একইভাবে, গিট ২.৯ (জুন ২০১ 2016) এর আগে, অন্য একটি ওয়ার্কট্রিতে চেক আউট করা একটি শাখার নামকরণ করা অন্য কর্মশালায় প্রতীকী হেডকে সামঞ্জস্য করেনি।
দেখুন কমিট 18eb3a9 (08 এপ্রিল 2016), এবং 70999e9 কমিট , কমিট 2233066 (27 মার্চ 2016) দ্বারা Kazuki ইয়ামাগুচি ( rhenium) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 741a694 , 18 এপ্রিল 2016)
branch -m: প্রতি কর্মশালার প্রধানগুলি আপডেট করুন
কোনও শাখার নাম পরিবর্তন করার সময়, কেবলমাত্র বর্তমান কার্যক্ষম গাছের প্রধান মাত্রা আপডেট করা হয় তবে এটি অবশ্যই সমস্ত কার্যকরী গাছের হেডগুলি আপডেট করতে হবে যা পুরাতন শাখায় নির্দেশ করে।
এটি বর্তমান আচরণ, / পাথ / টু / ডাব্লুটি এর হেড আপডেট করা হয়নি:
% git worktree list
/path/to 2c3c5f2 [master]
/path/to/wt 2c3c5f2 [oldname]
% git branch -m master master2
% git worktree list
/path/to 2c3c5f2 [master2]
/path/to/wt 2c3c5f2 [oldname]
% git branch -m oldname newname
% git worktree list
/path/to 2c3c5f2 [master2]
/path/to/wt 0000000 [oldname]
এই প্যাচটি কোনও শাখার নামকরণের সময় সমস্ত প্রাসঙ্গিক ওয়ার্কট্রি হেডকে আপডেট করে এই সমস্যাটি সমাধান করে।
লকিং মেকানিজম আনুষ্ঠানিকভাবে গিট 2.10 (Q3 2016) দ্বারা সমর্থিত
দেখুন 080739b কমিট , 6d30862 কমিট , 58142c0 কমিট , 346ef53 কমিট , 346ef53 কমিট , কমিট 58142c0 , 346ef53 কমিট , কমিট 346ef53 (13 জুন 2016), এবং 984ad9e কমিট , 6835314 কমিট দ্বারা (03 জুন 2016) গান Nguyễn গান Thái আরো Ngọc গান Duy ( pclouds) ।
প্রস্তাবিত: এরিক সানশাইন ( sunshineco) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 2c608e0 , 28 জুলাই 2016)
git worktree lock [--reason <string>] <worktree>
git worktree unlock <worktree>
যদি কোনও লিঙ্কযুক্ত কাজের গাছটি কোনও পোর্টেবল ডিভাইস বা নেটওয়ার্ক শেয়ারে রাখা থাকে যা সর্বদা মাউন্ট হয় না, আপনি আদেশ প্রশাসনের মাধ্যমে প্রশাসনিক ফাইলগুলিকে ছাঁটাই করা থেকে আটকাতে পারবেন git worktree lock, বিকল্প --reasonগাছটি কেন লক করা আছে তা ব্যাখ্যা করার জন্য।
<worktree>: যদি কার্যক্ষম গাছের পথে শেষ পাথের উপাদানগুলি কার্যক্ষম গাছের মধ্যে স্বতন্ত্র হয় তবে এটি ওয়ার্ক ট্রিগুলি সনাক্ত করতে ব্যবহার করা যেতে পারে।
উদাহরণস্বরূপ, যদি আপনাকে কেবল " /abc/def/ghi" এবং " /abc/def/ggg" এ গাছের কাজ করতে হয় , তবে " ghi" বা " def/ghi" প্রাক্তন কার্যনির্বাহী গাছকে নির্দেশ করার জন্য যথেষ্ট।
Git 2.13 (Q2 এর 2017) একটি যোগ lockবিকল্প মধ্যে কমিট 507e6e9 (12 এপ্রিল 2017) দ্বারা গান Nguyễn গান Thái আরো Ngọc গান Duy ( pclouds) ।
প্রস্তাবিত: ডেভিড টেলর ( dt) ।
সহায়তা করেছেন: জেফ কিং ( peff) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট e311597 26 এপ্রিল 2017)
একটি ওয়ার্ক্রিট তৈরি হওয়ার সাথে সাথে লক করার মঞ্জুরি দিন।
এটি " git worktree add; git worktree lock" এবং " git worktree prune" এর মধ্যে একটি প্রতিযোগিতা রোধ করতে সহায়তা করে ।
সুতরাং git worktree add' --lock এর সমতূল্য git worktree lockপরে git worktree addকিন্তু জাতি শর্ত ছাড়াই।
গিট 2.17+ (Q2 2018) যোগ করে : git worktree move/ এই উত্তরটি দেখুন ।git worktree remove
গিট 2.19 (Q3 2018) --quiet" git worktree add" কম ভার্বোস বানানোর জন্য " " বিকল্প যুক্ত করুন ।
দেখুন 371979c কমিট দ্বারা (15 আগস্ট 2018) এলিয়া পিন্টো ( devzero2000) ।
সাহায্যপ্রাপ্ত: মার্টিন Åগ্রেন, ডুই নগুয়েন ( pclouds) এবং এরিক সানশাইন ( sunshineco) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে a988ce9 কমিট , 27 আগস্ট 2018)
worktree: --quietবিকল্প যোগ করুন
অন্যান্য কমান্ডের মতো ' --quiet' বিকল্পটি যুক্ত করুন ।
' ' হ'ল এটি দ্বারা আক্রান্ত একমাত্র কমান্ড যেহেতু ' ' ব্যতীত অন্যান্য সমস্ত কমান্ড বর্তমানে ডিফল্টরূপে নিরব রয়েছে।git worktreegit
addlist
নোট করুন যে " git worktree add" স্ট্যাট সহ একটি উপলভ্য নাম এবং তারপরে mkdir"করতেন যা জাতি-প্রবণ। লুপ
ব্যবহার করে mkdirএবং প্রতিক্রিয়া জানিয়ে EEXISTএটি গিট 2.22 (কিউ 2 2019) দিয়ে স্থির করা হয়েছে ।
দেখুন কমিট 7af01f2 (20 ফেব্রুয়ারী 2019) দ্বারা মাইকেল Suchanek ( hramrach) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 20fe798 , 09 এপ্রিল 2019)
worktree: ফিক্স worktree addরেস
গিট উপলব্ধ একটি ওয়ার্কট্রি নাম সন্ধানের জন্য একটি স্ট্যাট লুপ চালায় এবং তারপরে mkdirপাওয়া নামটি করে। একইভাবে ফ্রি নামটি খুঁজে পাওয়া এবং প্রথমে ডিরেক্টরি তৈরি করার জন্য ওয়ার্কট্রিের আর একটি অনুরোধ এড়াতে
এটিকে mkdirলুপে পরিণত করুন।
গিট 2.22 (কিউ 2 2019) গিটার সংগ্রহস্থলের একটি কার্যনির্বাহী গাছ রয়েছে git branch -Dকিনা বর্তমানে ভুল দ্বারা চেক করা শাখাটি সরানো থেকে " " সুরক্ষা দেয় কিনা তা জানার জন্য যুক্তিটি স্থির করে ।
এই যুক্তিটির বাস্তবায়ন অস্বাভাবিক নাম সহ ভান্ডারগুলির জন্য ভেঙে গেছে, যা দুর্ভাগ্যক্রমে আজকাল সাবমডিউলগুলির জন্য আদর্শ।
দেখুন f3534c9 কমিট দ্বারা (19 এপ্রিল 2019) জোনাথন TAN ( jhowtan) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে ec2642a কমিট , 08 মে 2019)
কোড পুল টানুন 178 অন্তর্দৃষ্টি
worktree: is_bareহুরিস্টিক্স আপডেট করুন
" git branch -D <name>" চালিত হওয়ার পরে, branch শাখাটি বর্তমানে চেক আউট হয়ে থাকলে সাধারণত গিট প্রথমে চেক করে।
তবে এই চেকটি সঞ্চালিত হয় না যদি সেই সংগ্রহস্থলের গিট ডিরেক্টরি " <repo>/.git" এ না থাকে , তবে সেই ক্ষেত্রে যদি সেই সংগ্রহস্থলটি একটি সাবমডিউল হয় যেমন এর গিট ডিরেক্টরি " super/.git/modules/<repo>" হিসাবে সংরক্ষণ করা থাকে, "
এই শাখার ফলাফল মুছে ফেলা সত্ত্বেও এটি মুছে ফেলা হচ্ছে।
এর কারণ get_main_worktree()মধ্যে worktree.cসেট is_bareএকটি worktree শুধুমাত্র অনুসন্ধানমূলক করে একটি রেপো খালি হলে worktree পথে "শেষ হয় না ব্যবহার করে /.git", এবং অন্যথায় বেয়ার না।
এই is_bareকোডটি 92718b7 সালে প্রবর্তিত হয়েছিল (" worktree: ওয়ার্কট্রি স্ট্রাক্টে বিশদ যুক্ত করুন", 2015-10-08, গিট ভি 2.7.0-আরসি0), যা একটি pre-core.bareহিউরিস্টিক অনুসরণ করে।
এই প্যাচটি 2 টি কাজ করে:
- শেখান
get_main_worktree()ব্যবহার করতে is_bare_repository()পরিবর্তে, চালু 7d1864c ( "is_bare_repository পরিচয় দিন () এবং core.bare কনফিগারেশন পরিবর্তনশীল", 2007-01-07, গীত v1.5.0-rc1) এবং আপডেট করা e90fdc3 , 2007 ( "ক্লিন আপ কাজ-ট্রি হ্যান্ডলিং" -08-01, গিট ভি 1.5.3-আরসি 4)।
এটি git branch -D <name>উপরে বর্ণিত " " সমস্যাটি সমাধান করে ।
তবে ... যদি কোনও সংগ্রহস্থল থাকে core.bare=1তবে gitকমান্ডটি তার গৌণ ওয়ার্ক্ট্রিগুলির মধ্যে একটি থেকে পরিচালিত হয়, is_bare_repository()মিথ্যা ফিরিয়ে দেয় (যা ভাল, যেহেতু সেখানে একটি কর্মশালা উপলব্ধ রয়েছে)।
এবং, মূল কর্মক্ষেত্রটি যখন খালি থাকে তখন নন-বেয়ার হিসাবে আচরণ করা সমস্যার কারণ হয়:
উদাহরণস্বরূপ, একটি প্রধান ওয়ার্কট্রির হেড দ্বারা উল্লেখ করা একটি মাধ্যমিক ওয়ার্কট্রি থেকে এমন একটি শাখা মুছতে ব্যর্থতা, এমনকি যদি সেই প্রধান কর্মশালা খালি থাকে।
এটি এড়াতে, core.bareসেট করার সময়ও পরীক্ষা করে দেখুন is_bare।
যদি core.bare=1, এটি বিশ্বাস করুন, এবং অন্যথায়, ব্যবহার করুন is_bare_repository()।
git-new-workdirgit checkout --to=<path>গিট 2.5 এ প্রতিস্থাপন করা হবে । দেখুন নিচের আমার উত্তর