গিটের সাথে একাধিক ওয়ার্কিং ডিরেক্টরি?


242

আমি নিশ্চিত নই যে এটি গিট দ্বারা সমর্থিত কিছু কিনা তবে তত্ত্বগতভাবে মনে হয় এটি আমার পক্ষে কাজ করা উচিত।

আমার ওয়ার্কফ্লো প্রায়শই একই সাথে একাধিক শাখায় আমার ফাইল সম্পাদনা জড়িত। অন্য কথায়, আমি প্রায়শই একটি শাখায় কয়েকটি ফাইল খুলতে চাই যখন আমি অন্য শাখায় অন্য ফাইলের বিষয়বস্তু সম্পাদনা করি।

এটির জন্য আমার সাধারণ সমাধানটি দুটি চেকআউট করা, তবে এটি লজ্জাজনক যে আমি তাদের মধ্যে শাখা এবং রেফগুলি ভাগ করতে পারি না। আমি যা চাই তা হ'ল একই .git ফোল্ডার দ্বারা পরিচালিত দুটি কার্যনির্বাহী ডিরেক্টরি have

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

একটি .git ফোল্ডার ব্যবহার করার কোনও উপায় আছে এবং এর দ্বারা দুটি কার্যকরী ডিরেক্টরি ব্যাক করা আছে? বা গিটকে কোনও সময় কেবলমাত্র একটি ওয়ার্কিং ডিরেক্টরি পরীক্ষা করে দেখানো শক্ত?


1
git-new-workdirgit checkout --to=<path>গিট 2.5 এ প্রতিস্থাপন করা হবে । দেখুন নিচের আমার উত্তর
VonC

3
আসলে, কমান্ডটি হবে git worktree add <path> [<branch>](গিট 2.5 আরসি 2)। দেখুন নীচের আমার সম্পাদিত উত্তর
VonC

আপনার গ্রহণযোগ্য উত্তরটি ভনকের উত্তরটি পরিবর্তন করা উচিত, যেহেতু আপনার প্রাথমিকভাবে প্রশ্ন জিজ্ঞাসা করার পর থেকে জিনিসগুলি পরিবর্তন হয়েছে।
xaxxon

আপডেট উত্তরের জন্য ধন্যবাদ!
jtolds

উত্তর:


293

গিট 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.pruneworktreesexpiregit 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()


1
এটি তাদের তৈরি করা দুর্দান্ত জিনিস, আমি যা খুঁজছিলাম। তার জন্য ধন্যবাদ!

কীভাবে কেবলমাত্র কার্যকর গাছটিকে মুছবেন এবং এখনও শাখা রাখবেন
রণদীপ সিং

@ ডটনেট্রকস আপনি যে কোনও কার্যনির্বাহী গাছ (আপনার কম্পিউটারের একটি স্থানীয় ফোল্ডার) মুছতে পারেন: শাখায় এর কোনও প্রভাব পড়বে না: মূল .git রেপো এখনও তার সমস্ত শাখা সহ পুরো প্রতিশ্রুতিবদ্ধ ইতিহাসকে অন্তর্ভুক্ত করবে, না হোক কাজের গাছ মুছে ফেলা হয়েছে।
ভোনসি

হ্যাঁ, তবে যদি কেবলমাত্র আমার সিস্টেমে সেই ফোল্ডারে গিয়ে কার্যকারী গাছটিকে মুছুন এবং মুছুন তবে গিট আমাকে সেই শাখায় চেকআউট করতে দেয় না এবং বলেছে যে ইতিমধ্যে <path> (<पथ> ওয়ার্কট্রি পাথ) এ চেকআউট করা হয়েছে। তবে দেখে মনে হচ্ছে যদি আমি নিম্নলিখিতগুলি করি: rm -rf <path> গিট ওয়ার্ক্ট্রি ছাঁটাই তখন এটি কার্যকর হয়। এটা কি সঠিক ?
রণদীপ সিং

1
@ জয়ান আপনাকে ধন্যবাদ। আমি এটি পরিষ্কার করে দিয়েছি যে 2.5 এবং 2.7 এখন বাইরে গেছে।
ভোনসি

113

gitবন্টন দিয়ে আসে একটি অবদান স্ক্রিপ্ট নামক git-new-workdir। আপনি নিম্নলিখিত হিসাবে এটি ব্যবহার করবে:

git-new-workdir project-dir new-workdir branch

যেখানে প্রোজেক্ট-ডায়ার হল আপনার .gitসংগ্রহস্থল সম্বলিত ডিরেক্টরিটির নাম । .gitভাগ করা যায় না এমন ফাইলগুলি (বর্তমান শাখার মতো) ব্যতীত এই স্ক্রিপ্টগুলি অনেকগুলি সিমলিংক সহ আরও একটি ডিরেক্টরি তৈরি করে , আপনাকে দুটি পৃথক শাখায় কাজ করার অনুমতি দেয়।

এটি কিছুটা ভঙ্গুর মনে হলেও এটি একটি বিকল্প।


3
+1 আমি সংশোধন করে দাঁড়িয়েছি, এটি দুর্দান্ত aw এটি তাত্ক্ষণিকভাবে ইতিহাস এবং শাখাগুলি কোনও ধাক্কা / টানাই নয়, কেবলমাত্র সিমলিংকিংয়ের সাথে দুটি পৃথক চেক আউট রিপোজিটরিগুলির মধ্যে ভাগ করে নেবে। গিটটি এটি পরিচালনা করতে পারে তা আমি পুরোপুরি অসচেতন ছিলাম। হায়, এটি আমার বিতরণের অন্তর্ভুক্ত নয়।
মেগার

2
যারা মিসেসজিট (উইন্ডোজ) ব্যবহার করছেন তাদের জন্য আপনি স্ক্রিপ্টের এই পোর্টড
amos

9
সাধারণত এটি দুর্দান্ত কাজ করে তবে আপনি যদি দুর্ঘটনাক্রমে একই শাখাটি বিভিন্ন স্থানে সম্পাদনা করেন তবে জিনিসগুলি আবার ঠিক করা অযৌক্তিক।
গ্রেড

যারা গিট <2.5 এ আটকে আছে এবং যাদের সাবমডিউল রয়েছে তাদের জন্য চেষ্টা করুন git-new-workdir-recursiveযা একটি মোড়কের জন্য git-new-workdir
ওয়াল্ফ

13

আমি এখানে খুঁজে পেল না এমন একটি সমাধানের আশায় আমি এই প্রশ্নটি পেরিয়ে এসেছি। তাই এখন আমি যে হয়নি এটি আমি কী প্রয়োজন ছিল, আমি এটা এখানে অন্যদের জন্য পোষ্ট করার সিদ্ধান্ত নিয়েছে।

কেভেট: ওপি রাজ্যের মতো আপনার যদি একসাথে একাধিক শাখা সম্পাদনা করতে হয় তবে এটি সম্ভবত ভাল সমাধান নয় । একসাথে একাধিক শাখা পরীক্ষা করে দেখার জন্য যে আপনি সম্পাদনা করতে চান না । (এক .git ফোল্ডার দ্বারা সমর্থিত একাধিক ওয়ার্কিং ডিরেক্টরি)

আমি প্রথমবার এই প্রশ্নটিতে আসার পর থেকে আমি কয়েকটি জিনিস শিখেছি:

  1. কী " বেয়ার রিপোজিটরি "। এটি .gitএকটি কার্যক্ষম গাছে অবস্থিত না হয়ে মূলত ডিরেক্টরিটির বিষয়বস্তু ।

  2. .gitকমান্ড লাইনে gitঅপশনটি ব্যবহার করে আপনি যে রেপো ব্যবহার করছেন তার অবস্থান (আপনার দিরের অবস্থান ) নির্দিষ্ট করতে পারবেন--git-dir=

  3. আপনি আপনার কাজের অনুলিপিটির অবস্থানটি নির্দিষ্ট করতে পারেন --work-tree=

  4. কি "আয়না রেপো"।

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

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

git clone --mirror <remoteurl> <localgitdir> # Where localgitdir doesn't exist yet
mkdir firstcopy
mkdir secondcopy
git --git-dir=<localgitdir> --work-tree=firstcopy checkout -f branch1
git --git-dir=<localgitdir> --work-tree=secondcopy checkout -f branch2

এটি সম্পর্কে বড় সতর্কতাটি হ'ল দুটি অনুলির জন্য আলাদা হেড নেই। সুতরাং উপরের পরে, চলমান git --git-dir=<localgitdir> --work-tree=firstcopy statusশাখা 2 থেকে শাখা 1 থেকে সমস্ত পার্থক্যকে অমীমাংসিত পরিবর্তন হিসাবে দেখাবে - কারণ হেডটি শাখা 2 এ নির্দেশ করছে। (এই কারণেই আমি -fবিকল্পটি ব্যবহার করি checkout, কারণ আমি স্থানীয়ভাবে স্থানীয়ভাবে কোনও পরিবর্তন করার পরিকল্পনা করছি না as আমি যতক্ষণ না -fবিকল্পটি ব্যবহার করি ততক্ষণ কোনও কার্য-বৃক্ষের জন্য কোনও ট্যাগ বা শাখা চেকআউট করতে পারি ))

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


এটি হ'ল আমি যা খুঁজছিলাম, কিন্তু আমি এটি কাজ করতে পারি না ... আমি "মারাত্মক: একটি গিটার সংগ্রহস্থল নয়: '<লোকালজিটডির>'" পাচ্ছি। কোন ধারনা?
ড্যান আর

কিছু মনে নেই, দেখা যাচ্ছে আমি আমার ডিরেক্টরিতে "~" ব্যবহার করছিলাম, এবং গিটটি পছন্দ করে না। আমি যখন পুরো পথটি ব্যবহার করেছি, এটি দুর্দান্ত কাজ করেছে।
ড্যান আর

@ ড্যানআর, খুশি হয়েছে যে এটি সাহায্য করেছে। :) আপনি ব্যবহার করতে পারেন $HOME। উপরোক্ত পদ্ধতিটি সম্পর্কে আমি আরও পরে আবিষ্কার করেছি যা একটি বা অন্য শাখায় নেই এমন ফাইলগুলির সাথে করতে হবে। যদি আপনি এটিকে ডিয়ার 1 এ চেকআউট করেন, তবে বিটিকে ডিয়ার 2 এ চেকআউট করুন, তারপরে সিআরকে ডিআর 1 এ চাপ দিন, যদি এ-তে উপস্থিত একটি ফাইল রয়েছে তবে বি বা সি তে নেই, তবে ফাইলটি ডিআর 1 থেকে এমনকি জোর চেকআউট দ্বারা সরানো হবে না won't । সুতরাং আপনাকে git cleanএ জাতীয় ক্ষেত্রে পরীক্ষা- নিরীক্ষণের প্রয়োজন হতে পারে - বা আমি যা করেছি তা করতে হবে এবং কেবল নতুনভাবে তৈরি ডিরেক্টরিটি তৈরি করতে কেবল এই পদ্ধতিটি ব্যবহার করুন।
ওয়াইল্ডকার্ড

বখশিশের জন্য ধন্যবাদ. আমি এটিকে যাইহোক রুবিতে সিএলআই সরঞ্জামের অংশ হিসাবে মোড়ানো যাব, তাই আমি নিশ্চিত করব যে এটি সর্বদা স্ক্র্যাচ থেকে শুরু হয়।
ড্যান আর

@ ড্যানআর, আমি তখন কোডটি লিখছিলাম তা আপনার আগ্রহী হতে পারে । এর বেশিরভাগই সিএফইঞ্জাইন সিনট্যাক্স চেক ব্যতীত কোনও গিট স্টেজিং স্ক্রিপ্টে সাধারণত প্রযোজ্য। (সম্ভবত আপনি এটি রুবি সিনট্যাক্স চেকের সাথে প্রতিস্থাপন করতে পারেন)) :)
ওয়াইল্ডকার্ড

3

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

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


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