স্থানীয় গিট শাখা আছে কিনা তা খুঁজে পাওয়ার আরও ভাল উপায় আছে?


191

আমার সংগ্রহস্থলে স্থানীয় গিট শাখা branch-nameরয়েছে কিনা তা জানতে নিম্নলিখিত কমান্ডটি ব্যবহার করছি । এটা কি সঠিক? একটি ভাল উপায় আছে কি?

দয়া করে মনে রাখবেন যে আমি এটি কোনও স্ক্রিপ্টের ভিতরে করছি। এই কারণে আমি যদি সম্ভব হয় তবে নদীর গভীরতানির্ণয় আদেশগুলি ব্যবহার করতে চাই ।

git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists. 

আপনার কমান্ডটি আমি ব্যবহার করেছিলাম তার মতো দেখাচ্ছে।
পেলো ইবারম্যান

6
আমার অজ্ঞতায়, আমি সঙ্গে যেতে হবে git branch | grep -w <branch-name>। ঠিক আছে, এটি একটি চীনামাটির কমান্ড, তবে ভবিষ্যতে এই
স্নিপেটকে অকেজো করে

@ ইউঙ্কলেজিভ: আপনি সম্ভবত ঠিক বলেছেন যে কমান্ডটি ব্যবহারযোগ্য না করার জন্য কমান্ডটি উল্লেখযোগ্যভাবে পরিবর্তন হবে না। চীনামাটির বাসন বনাম প্লাম্বিংয়ের মতো জিনিসগুলি সম্পর্কে আমার কাছে একটি ওসিডি রয়েছে have
মনোজ গোবিন্দন

9
git rev-parse --verify <branch_name>ট্যাগগুলি এবং হ্যাশ প্রতিশ্রুতিবদ্ধ হিসাবে অন্যান্য রেফারেন্সগুলিও যাচাই করে, তাই আপনার প্রয়োজনীয় শাখাগুলিতে যদি আপনি কেবল আগ্রহী হন তবে এটি মিথ্যা ধনাত্মকতা ফিরে আসবে যদিও এটি উপযুক্ত suitable
পল এস

2
কোনও স্থানীয় শাখা উপস্থিত কিনা তা নির্ধারণ করতে কেবল গিট শো-রেফ কাজ করছে। আপডেটে (গিট রেভ-পার্স সহ সিনট্যাক্স), রিমোট কোডটি 0 হয় যদি দূরবর্তী শাখাটি মেলে।
ফ্যাবিয়েন বুলেউ

উত্তর:


57

আমি যতদূর জানি, এটি কোনও স্ক্রিপ্টে করার সবচেয়ে ভাল উপায়। আমি নিশ্চিত নই যে এতে আরও অনেক কিছু যুক্ত করার আছে, তবে এর একটি উত্তরও থাকতে পারে যা কেবল "" কমান্ডটি আপনি যা চান সবকিছু করেন ":) বলে

কেবলমাত্র আপনি যে বিষয়গুলি যত্নবান হতে চান তা হ'ল শাখার নামগুলিতে বিস্ময়কর অক্ষর থাকতে পারে, তাই আপনি উদ্ধৃতি দিতে চাইতে পারেন <branch-name>


1
উদ্ধৃতি সম্পর্কে ভাল পয়েন্ট <branch-name>। FWIW আমি এটি একটি ফ্যাব্রিক স্ক্রিপ্টে ব্যবহার করছি। আমি ভেরিয়েবল উদ্ধৃত মনে রাখবেন।
মনোজ গোবিন্দন

সঠিক উত্তরটি এই স্পষ্টত: গিট শো-রেফ - যাচাই করা - কোয়েট রেফ / মাথা / <ব্র্যাঙ্ক- নাম> দেখায় যে হেড সঠিকভাবে কোনও শাখা নয়। গিট রেভ-পার্স - যাচাইকরণ আপনাকে বলবে যে হেড একটি বিদ্যমান শাখা। মিথ্যা কারণ হেড একটি শাখা নয়।
পাওলো নেভেস

106

যখন আমি কোনও অনুসন্ধান ইঞ্জিনে 'গিট চেক কিনা শাখা উপস্থিত আছে' সন্ধান করি, এই পৃষ্ঠাটি আমি প্রথম দেখি।

আমি যা চাই তা পেয়েছি তবে মূল পোস্টটি ২০১১ সাল থেকে আমি একটি আপডেট উত্তর দিতে চাই।

git rev-parse --verify <branch_name>

এটি মূলত গৃহীত উত্তরের মতোই তবে আপনার "রেফ / মাথা /" টাইপের দরকার নেই


20
কেবলমাত্র একটি নোট: git rev-parse --verifyকেবলমাত্র আপনাকে জানায় যে রেপোতে এই জাতীয় কোনও উপস্থিতি উপস্থিত রয়েছে (যেমন এটি রেপোর <branch_name>যে কোনও ধরণের কোনও অবজেক্টে অনুবাদ করে এমন কোনও মানের জন্য এটি 0 ফেরত আসবে )। এটি আপনাকে জানায় না যে সেই বস্তুটি একটি শাখা কিনা।
tvnab

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

15
git rev-parse
যাচাই

@ সুপারউবারডুপার আপনি কি চেষ্টা করেছেন: গিট রেভ-পার্স - যাচাই করুন ** উত্স / ** জিএইচ-পৃষ্ঠা?
রয়েলবিগম্যাক

33

প্রায় সেখানে.

শুধু বাদ --verifyএবং --quietযদি এটা না হয় আপনি হ্যাশ যদি শাখা বিদ্যমান অথবা কিছুই পেতে।

এটিকে একটি ভেরিয়েবলে বরাদ্দ করুন এবং খালি স্ট্রিংয়ের জন্য পরীক্ষা করুন।

exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
    echo 'branch exists!'
fi

10
রিটার্ন মানটি যথেষ্ট - আপনার একটি ভেরিয়েবলকে বরাদ্দ দেওয়ার সম্ভাব্য ত্রুটি-প্রবণ প্রচেষ্টাটি অতিক্রম করার দরকার নেই।
মিসথ

15

আমি মনে করি আপনি git show-branchএখানে ব্যবহার করতে পারেন ।

$ git show-branch --list
  [master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128

তো, $? == 0 ইঙ্গিত দেয় যে শাখাটি বিদ্যমান এবং আপনাকে কোনওভাবেই রেফ / হেডস / এর প্লাম্বিংয়ে খনন করতে হবে না। যতক্ষণ -rআপনি শো-শাখায় পাস না করেন এটি কেবল স্থানীয় শাখায় কাজ করবে।


5
এএফআইএকে git show-branchএকটি চীনামাটির কমান্ড। যেমন আমি আমার প্রশ্নে বলেছি যে প্লাম্বিংয়ের সমতুল্য উপলব্ধ থাকলে আমি স্ক্রিপ্টে চীনামাটির বাসন কমান্ডগুলি ব্যবহার করব না। Kernel.org/pub/software/scm/git/docs
মনোজ গোবিন্দন

3
@ মনোজ: আমি চীনামাটির বাসন বনাম নদীর গভীরতানির্ণয় সম্পর্কে জানি, তবে আমি কখনও পড়িনি যে নদীর গভীরতানির্ণয় চীনামাটির চেয়ে বেশি স্থিতিশীল বলে বিবেচিত হত। ডক্সে আমাকে এটি দেখানোর জন্য ধন্যবাদ।
মার্ক ড্রাগো

ভুল করে ট্যাগ খুঁজে পাওয়া এড়াতে এবং শাখা স্থানীয় বা দূরবর্তী কিনা সে সম্পর্কে আরও সুনির্দিষ্ট হওয়ার জন্য, আপনি নির্দিষ্ট করতে পারেন git show-branch refs/heads/[branch]বা git show-branch refs/remotes/origin/[branch]
twasbrillig

13

আমি সুপারিশ git show-ref --quiet refs/heads/$name

  • --quiet মানে কোনও আউটপুট নেই, যা ভাল কারণ তারপরে আপনি পরিষ্কারভাবে প্রস্থান স্থিতি পরীক্ষা করতে পারবেন।

  • refs/heads/$nameস্থানীয় শাখাগুলির সীমাবদ্ধতা এবং সম্পূর্ণ নামের devসাথে মেলে (অন্যথায় মিলবে develop)

স্ক্রিপ্টে ব্যবহার:

if git show-ref --quiet refs/heads/develop; then
    echo develop branch exists
fi

হ্যাঁ এই একটাই এটি নিঃশব্দে করে। গিট কমান্ডের নামকরণ কিছুটা
ওয়াক টিবিএইচ

10

স্ক্রিপ্টে ব্যবহারের জন্য:

git show-ref -q --heads <branch-name>

স্থানীয় শাখা হিসাবে উপস্থিত 0থাকলে এবং কেবলমাত্র এটি প্রস্থান করবে <branch-name>

উদাহরণ:

if git show-ref -q --heads <branch-name>; then
   echo 'Branch exists'
fi



1

আসুন এটি কল করুন git is_localbranch(আপনার মধ্যে উপন্যাস যুক্ত করা দরকার .gitconfig)।

ব্যবহার:

$ git is_localbranch BRANCH

উৎস:

git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
  echo "branch exists"
fi

1

প্রাথমিক প্রশ্নের 'আপডেটে' আমার 'প্রস্তাবিত সম্পাদনা'-এর পর্যালোচনার ফলাফলটি ছিল' এটি মন্তব্য বা উত্তর হিসাবে লেখা উচিত ছিল ', তাই আমি এটি এখানে পোস্ট করছি:

অন্য উপায় প্রস্তাবিত না শুধুমাত্র শাখা কিন্তু এই ধরনের নাম দিয়ে কোন রেফারেন্স যাচাই করবে @jhuynh

git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.

প্রাথমিক কোয়েশনে একটি 'আপডেট' প্রদানের বিষয়টি ব্যাখ্যা করা হয়েছে:

ধরে নেওয়া যাক এবং পরীক্ষা করুন যে 'মাস্টার.000' কেবলমাত্র একটি ট্যাগ, এই জাতীয় স্থানীয় শাখা উপস্থিত নেই, গ্রেপ একটি প্রবেশিকা যা একটি ট্যাগ, ফেরত দেয়। তবুও রেভ-পার্স 0 ফিরে আসবে যদি রেফারেন্স উপস্থিত থাকে, এমনকি যদি এরকম স্থানীয় শাখা উপস্থিত না থাকে। এটি একটি মিথ্যা ম্যাচ, ঠিক যেমনটি @ পল-এস দ্বারা উল্লিখিত হয়েছে

$ git show-ref |grep master.000

f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0


0

না আমার মামলা নিয়ে কাজ করে git show-refনা git rev-parse

$ git --version
git version 2.21.0

$ git show-branch --list
* [master] mybranch commit

$ BRANCH_NAME=mybranch
$ git rev-parse --verify $BRANCH_NAME
fatal: Needed a single revision

$ git show-ref refs/heads/$BRANCH_NAME
<no otput>
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch not exists

আমি এই সঙ্গে শেষ

$ BRANCH_NAME=mybranch
$ SHOW_ALL=`git show-branch --all | grep -w $BRANCH_NAME`
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch exists

আপনি একটি স্ক্রিপ্ট ফাইল দিয়েও করতে পারেন

#!/bin/sh
BRANCH_NAME=mybranch
if grep -Fqe $BRANCH_NAME << EOF
`git show-branch --all`
EOF
then
   echo "$BRANCH_NAME exists"
else
   echo "$BRANCH_NAME not exists"
fi

-1

আপনি যদি গ্রেপ অন্তর্ভুক্ত পরিচালনা করতে পারেন।

git branch | grep -q <branch>

1
যদি আপনি শাখার নামগুলিতে বিন্দু ("।") ব্যবহার করেন তবে এটি আপনাকে ভুল উত্তর দিতে পারে, যেমন আমি মাঝে মাঝে করি, যেহেতু বিন্দুটি grepমেটাচার্যাক্টর হিসাবে ব্যাখ্যা করা হয়।
পিটার জন অ্যাকলাম

1
আপনি যদি এমন একটি শাখার জন্য পরীক্ষা করেন তবে যার নামটি সত্যিকারের শাখার সাবস্ট্রিং। উদাহরণস্বরূপ abcকোনও শাখা থাকলে মিলবে abcdef
rjmunro

-1

স্ক্রিপ্টে ব্যবহারের জন্য, আমি নিম্নলিখিত কমান্ডটি সুপারিশ করছি:

git ls-remote --heads <repo_url> "<branch_name>" | wc -l

দ্রষ্টব্য যে <repo_url>কেবল "" হতে পারে। স্থানীয় রেপো নির্দিষ্ট করতে যদি আপনি এর ডিরেক্টরি কাঠামোর ভিতরে থাকেন তবে স্থানীয় রেপোর পাথ বা দূরবর্তী রেপোর ঠিকানা।

<branch_name>উপস্থিত থাকলে 1 টি উপস্থিত না থাকলে কমান্ডটি 0 প্রদান করে।


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