গিট চেকআউট এর অর্থ ডাবল ড্যাশ


274

এই গিট কমান্ডে ফাইলের নামের আগে ডাবল ড্যাশগুলির অর্থ কী?

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt

এগুলি কি বাধ্যতামূলক? এটি কি সমান?

git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt

24
এটি একটি শেল এক্সপ্রেশন। Unix.stackexchange.com/questions/11376/…
ইল্টেম্পো

15
@ ইলতেম্পো: গিতের জন্য এটি কিছুটা আলাদা। গিটের জন্য, গাছ গাছগুলি পথ থেকে পৃথক করে, ক্ষেত্রে যেখানে গাছ এবং পথ একই দেখা যায়।
ডায়েটারিচ এপ্প

@Dietrich_Epp। আমি দেখি. স্পষ্ট করার জন্য ধন্যবাদ।
ইল্টেম্পো

এছাড়াও নথিভুক্ত stackoverflow.com/a/1192194/6309
VonC

3
এটি একটি সদৃশ, তবে এই নকলটি 'গিট ডাবল ড্যাশ' কোয়েরিতে কমপক্ষে গুগলযোগ্য able
কাঁটা̈

উত্তর:


376

ধরুন path/to/file.txtআমার গিট রিপোজিটরিতে আমার একটি ফাইল আছে এবং আমি এতে পরিবর্তনগুলি ফিরিয়ে আনতে চাই।

git checkout path/to/file.txt

এখন ধরা যাক ফাইলটির নামকরণ হয়েছে master...

git checkout master

উপস! পরিবর্তে শাখা পরিবর্তন। --আলাদা গাছ আপনি ফাইল আপনি চেক আউট করতে চান থেকে চেক আউট করতে চান।

git checkout -- master

যদি কিছু ফ্রেয়াকো -fআমাদের ভাণ্ডারে নামের একটি ফাইল যুক্ত করে তবে এটি আমাদের সহায়তা করে :

git checkout -f      # wrong
git checkout -- -f   # right

এটি গিট-চেকআউটে নথিবদ্ধ : আর্গুমেন্ট ডিসামবিগুয়েশন


12
এটি কেবল গিট কমান্ড নয়, বহু ব্যাশ কমান্ডের ক্ষেত্রে সত্য?
এনএইচডিলে

40
@ এনএইচডি: হ্যাঁ, এটি সত্য। তবে একটি পরিভাষা নোট: "বাশ" এর কয়েকটি কমান্ড রয়েছে (সম্ভবত ২০ বা ততোধিক), বেশিরভাগ কমান্ড বাশ থেকে পৃথক প্রোগ্রাম। এটি আসলে পসিএক্স স্ট্যান্ডার্ডের একটি অংশ যা --অন্যান্য যুক্তি থেকে বিকল্পগুলি পৃথক করতে ব্যবহার করা যেতে পারে, সুতরাং আপনি এটি কমান্ডগুলিতে দেখতে পাবেন cpএবং mv(যা বাশের অংশ নয়)।
ডায়েটারিচ এপ্প

6
এই সিনট্যাক্সটি checkoutকমান্ড ডকুমেন্টেশনে সঠিকভাবে বর্ণিত হয়নি এমন কোনও ধারণা ?
টাঙ্গুইপি

4
@ ডায়েটরিচএপ বিভিন্ন জায়গায় এটি checkoutকমান্ডের সম্ভাব্য প্যারামিটারের মতো তালিকাভুক্ত হয়েছে , তবে কোথাও ডকুমেন্টেশন ব্যাখ্যা করে না যে এটি কী করে বা এটি কেন ব্যবহৃত হয়েছে ... যা আমাকে শেষ পর্যন্ত এখানে নিয়ে এসেছিল।
ক্রিস

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

109

ডাবল ড্যাশ "-" এর অর্থ "কমান্ড লাইন পতাকাগুলির সমাপ্তি" অর্থাত্ এটি পূর্ববর্তী কমান্ডকে কমান্ড লাইন বিকল্পগুলির পরে যা আসে তা পার্স করার চেষ্টা না করার কথা বলে।


2
স্পষ্টতার জন্য, এর gitঅর্থ এর চেয়েও বেশি, কারণ এটির অর্থ যুক্তির পরে --একটি শাখার নাম হতে পারে না এবং জড়িত হয়ে যুক্তির আগে --ফাইলের পথ হতে পারে না।
রত্ন টেলর

0

নোট করুন যে আপনার প্রয়োজন হবে না, কারণ গিট 2.5 (Q2 2015) a ' --' যদি আপনার যুক্তিতে ওয়াইল্ডকার্ড অন্তর্ভুক্ত থাকে ( *)

git <cmd> <revs> <pathspec>ভুল টাইপযুক্ত পথগুলি ধরতে কমান্ড লাইন কনভেনশনকে সহায়তা করার জন্য একটি হিউরিস্টিক হ'ল কমান্ড লাইনের পরবর্তী অংশের সমস্ত নন-রেভ প্যারামিটার কার্যকারী গাছের ফাইলগুলির নাম কিনা তা নিশ্চিত করা, তবে এর অর্থ " git grep $str -- \*.c" সর্বদা হওয়া উচিত " --" দিয়ে বিশৃঙ্খলাবদ্ধ , কারণ কেউই এই ফাইলটি তৈরি করবে না যার নাম আক্ষরিক অর্থে অ্যাসিস্ট্রিক-ডট-দেখুন।

গিটার 2.5 ওয়াইল্ডকার্ড স্ট্রিংয়ের সাহায্যে ব্যবহারকারী সম্ভবত আমাদের একটি প্যাথস্পেক দেবে বলে ঘোষণার জন্য এই তাত্ত্বিকতা ছাড়িয়েছে

git checkout 'a*'
# same as
git checkout -- 'a*'

দেখুন 28fcc0b কমিট (02 মে 2015) দ্বারা গান Duy Trang ( nguyenlocduy)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 949d167 , 19 মে 2015)

pathspec: " --" যখন ওয়াইল্ডকার্ড ব্যবহার করা হয় তখন প্রয়োজনীয়তা এড়িয়ে চলুন

--কমান্ড লাইন থেকে যখন " " অভাব দেখা দিচ্ছে এবং একটি কমান্ড উভয় ঘূর্ণিত এবং পাথ গ্রহণ করতে পারে, তখন ধারণাটি হয় যদি কোনও যুক্তি যদি বর্ধিত SHA-1 এবং পাথ উভয় হিসাবে দেখা যায় তবে " --" প্রয়োজন হয় বা গিটটি অগ্রাহ্য করতে অস্বীকার করে।
এটি বর্তমানে হিসাবে প্রয়োগ করা হয়েছে:

  • (1) যদি কোনও যুক্তি পুনরায় হয়, তবে অবশ্যই এটি ওয়ার্কট্রিতে থাকতে পারে না
  • (২) অন্যথায়, এটি অবশ্যই ওয়ার্কট্রিতে থাকতে হবে
  • (3) অন্যথায়, " --" প্রয়োজনীয়।

এই নিয়মগুলি আক্ষরিক পাথের জন্য কাজ করে, তবে যখন অ-আক্ষরিক পাথস্পেক জড়িত থাকে তখন এটির প্রায়শই ব্যবহারকারীকে " --" যুক্ত করা প্রয়োজন কারণ এটি ব্যর্থ হয় (2) এবং (1) সত্যিই খুব কমই দেখা হয় ( *.cউদাহরণস্বরূপ, (1) " *.c" নামে একটি রেফ থাকলে সেখানে দেখা হয় ।

এই প্যাচটি কোনও কার্যকর ( *) ওয়াইল্ডকার্ড প্যাথস্পেক "ওয়ার্কট্রিতে বিদ্যমান" বিবেচনা করে নিয়মগুলিকে কিছুটা সংশোধন করে ।
নিয়মগুলি হয়ে:

  • (1) যদি একটি আরগটি রেভ হয় তবে তা অবশ্যই ওয়ার্কট্রিতে উপস্থিত থাকতে হবে বা একটি বৈধ ওয়াইল্ডকার্ড প্যাসস্পেক নয়।
  • (২) অন্যথায়, এটি হয় ওয়ার্কট্রিতে বিদ্যমান বা একটি ওয়াইল্ডকার্ড প্যাসস্পেক
  • (3) অন্যথায়, " --" প্রয়োজনীয়।

নতুন নিয়মগুলির সাথে, " --" যখন ওয়াইল্ডকার্ড প্যাথস্পেক জড়িত থাকে তখন বেশিরভাগ সময় প্রয়োজন হয় না।


গিট 2.26 (কিউ 12020) এর সাথে সংশোধনগুলি এবং প্যাথস্পেককে পৃথক করে বলার ব্যর্থতা যুক্তিযুক্ত করা হয়েছে যাতে ব্যাকস্ল্যাশ-পালানো গ্লোব বিশেষ অক্ষরগুলিকে "ওয়াইল্ডকার্ডস ইজ পাথস্পেক" নিয়মে গণনা না করে।

দেখুন কমিট 39e21c6 দ্বারা (25 জানুয়ারী 2020) জেফ কিং ( peff)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 341f8a6 , 12 ফেব্রুয়ারী 2020)

verify_filename(): "ওয়াইল্ডকার্ডগুলি হল প্যাসস্পেকস" নিয়মে ব্যাকস্ল্যাশগুলি পরিচালনা করুন handle

প্রতিবেদক দ্বারা: ডেভিড ব্রাস্ট্রিম
সাইন-অফ-বাই: জেফ কিং

প্রতিশ্রুতিবদ্ধ 28fcc0b71a ( pathspec: " --" ওয়াইল্ডকার্ড ব্যবহার করার সময় " " এর প্রয়োজন এড়াতে হবে, 2015-05-02 অনুমোদিত):

git rev-parse '*.c'

ডাবল ড্যাশ ছাড়া

তবে ওয়াইল্ডকার্ডগুলি যাচাই করার জন্য এটি যে নিয়মটি ব্যবহার করে তা আসলে কোনও গ্লোব বিশেষের সন্ধান করে।
এটি অত্যধিক উদার, কারণ এর অর্থ হ'ল একটি প্যাটার্ন যা " a\b" এর মতো বাস্তবে কোনও ওয়াইল্ডকার্ড মিলছে না, এটি একটি প্যাথস্পেক হিসাবে বিবেচিত হবে।

আপনার যদি ডিস্কে এ জাতীয় কোনও ফাইল থাকে তবে সম্ভবত আপনি যা চান তা সম্ভবত।
তবে যদি আপনি এটি না করেন, ফলাফল বিভ্রান্তিকর: " there's no such path a\b" বলার পরিবর্তে আমরা চুপচাপ এটিকে এমন একটি প্যাথস্পেক হিসাবে মেনে নেব যা খুব সম্ভবত কোনও কিছুর সাথে মেলে না (বা কমপক্ষে আপনি যা চান তার চেয়ে কম নয়)।
তেমনি, পথ অনুসন্ধান করা " a\*b" অনুসন্ধানটি মোটেই প্রসারিত করে না; এটি কেবল একটি একক প্রবেশের সন্ধান করবে, " a*b"।

এই প্রতিশ্রুতিটি তখনই নিয়মটিকে ট্রিগার করার --দিকে ঠেলে দেয় যখন গ্লোব মেটাচার্যাক্টরা অনুসন্ধানটি প্রসারিত করে, অর্থাত্ এই দুটি ক্ষেত্রেই একটি ত্রুটির প্রতিবেদন করবে (অবশ্যই আপনি " " ব্যবহার করে বিশৃঙ্খলা করতে পারেন , আমরা কেবল ডিডব্লিউআইএম ​​হিউরিস্টিক কঠোর করে দিচ্ছি)।

( ডিডব্লিউআইএম: আমি যা বলতে চাইছি তা করুন )

মনে রাখবেন যে আমরা 28fcc0b71a এ মূল বৈশিষ্ট্যটি মোটেই পরীক্ষা করে দেখিনি
সুতরাং এই প্যাচটি কেবল এই কোণার কেসগুলির জন্য পরীক্ষা করে না, তবে বিদ্যমান আচরণের জন্য একটি রিগ্রেশন টেস্টও যুক্ত করে।

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