উত্তর:
খুব বেশি চীনামাটির বাসন কমান্ড, স্ক্রিপ্টিংয়ের জন্য আপনি এটি চাইলে ভাল না:
git branch -vv # doubly verbose!
নোট করুন যে গিট ১.৮.৩ এর সাথে, উজানের শাখাটি নীল রঙে প্রদর্শিত হবে (দেখুন " এই শাখাটি ট্র্যাকিং কী (যদি কিছু আছে) গিটে কি? ")
আপনি যদি পরিষ্কার আউটপুট চান, তবে আর্ক্রেসুর উত্তর দেখুন - এটি একটি পোরসিলাইন কমান্ড ব্যবহার করে যা আমি বিশ্বাস করি না যে আমি এই উত্তরটি লেখার সময় উপস্থিত ছিলাম, সুতরাং এটি কিছুটা আরও সংক্ষিপ্ত এবং কেবল মার্জ না হয়ে রিবেসের জন্য কনফিগার করা শাখাগুলির সাথে কাজ করে।
git remote show origin
আপনার রিমোটটির নাম যাই হোক না কেন তার সাথে 'উত্স' প্রতিস্থাপন করুন।
git remote show
কমান্ডটি আসলে রিমোট রেপোতে সংযুক্ত ... এবং তাই এটি ব্যর্থ হয় যদি আপনি অফ-লাইন হয়ে থাকেন বা যে কোনও কারণেই
git remote show -n origin
অফলাইনে থাকা অবস্থায়ও কিছু তথ্য পেতে ব্যবহার করতে পারেন । থেকে Git দূরবর্তী ডকুমেন্টেশন : "-n বিকল্প, দূরবর্তী মাথা Git LS-দূরবর্তী সঙ্গে প্রথম জানতে চাওয়া নেই <নাম>; ক্যাশে তথ্য পরিবর্তে ব্যবহার করা হয়।"
git remote show | xargs git remote show -n
সমস্ত রিমোটের জন্য সম্মিলিত ট্র্যাকিং তথ্য দেখতে দৌড়াতে পারেন।
আপনি যদি ম্যান পেজটির দিকে তাকান git-rev-parse
, আপনি নীচের সিনট্যাক্সটি বর্ণিত দেখতে পাবেন:
<branchname>@{upstream}
যেমনmaster@{upstream}
,@{u}
@{upstream}
একটি শাখার প্রত্যয় (সংক্ষিপ্ত ফর্ম<branchname>@{u}
) এর প্রত্যয়টি সেই শাখাকে বোঝায় যে শাখার নাম দ্বারা নির্দিষ্ট শাখাটি উপরে তৈরি করতে সেট করা আছে। অনুপস্থিত শাখার নামটি বর্তমানের ডিফল্ট।
সুতরাং শাখার উজানের সন্ধানের জন্য master
, আপনি এটি করবেন:
git rev-parse --abbrev-ref master@{upstream}
# => origin/master
প্রতিটি শাখার জন্য তথ্য মুদ্রণ করতে, আপনি যেমন কিছু করতে পারেন:
while read branch; do
upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
if [[ $? == 0 ]]; then
echo $branch tracks $upstream
else
echo $branch has no upstream configured
fi
done < <(git for-each-ref --format='%(refname:short)' refs/heads/*)
# Output:
# master tracks origin/master
# ...
এটি রেফগুলি পার্সিং ও ম্যানুয়ালি কনফিগার করার চেয়ে পরিষ্কার।
done < <(git for-each-ref --format='%(refname:short)' refs/heads/**)
নোট করুন ।
git rev-parse --abbrev-ref HEAD@{upstream}
বর্তমান শাখার জন্য সুন্দরভাবে কাজ করছে বলে মনে হচ্ছে। এটি একটি দুর্দান্ত গিট ওরফেও তৈরি করে।
while
লুপ সিনট্যাক্স একটু আমাকে অদ্ভুত দেখায়। আপনি কেবল এটি ব্যবহার করতে পারেন git for-each-ref ... | while read branch; do ...
যা কোনও ফিফোর প্রয়োজন হয় না এবং লিখিত কমান্ডগুলির মতো একই ক্রমে চালিত হয়।
git for-each-ref --format='%(refname:short) tracks %(upstream:short)' refs/heads/*
কুবির উত্তরের বিকল্পটি হ'ল .git/config
ফাইলটিতে নজর রাখা যা স্থানীয় সংগ্রহস্থল কনফিগারেশনটি দেখায়:
cat .git/config
git config --get-regex branch
git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
প্রতিটি স্থানীয় শাখার জন্য একটি লাইন প্রদর্শন করবে। একটি ট্র্যাকিং শাখা দেখতে পাবেন:
master <- origin/master
অ-ট্র্যাকিংয়ের মতো দেখতে পাবেন:
test <-
git branch -vv
। 🙏
git config --global alias.track 'for-each-ref --format='\''%(refname:short) <- %(upstream:short)'\'' refs/heads'
বর্তমান শাখার জন্য এখানে দুটি ভাল পছন্দ রয়েছে:
% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline
অথবা
% git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
origin/mainline
এই উত্তরটি এখানেও রয়েছে , কিছুটা আলাদা প্রশ্নের যা (ভুলভাবে) সদৃশ হিসাবে চিহ্নিত হয়েছিল।
git for-each-ref --shell --format='%(refname:short) %(upstream:short)' refs/heads
।
বর্তমান শাখার জন্য, আপনি বলতে পারেন git checkout
(ডাব্লু / ও যে কোনও শাখা)। বর্তমান শাখার জন্য ট্র্যাকিংয়ের তথ্য উপস্থিত থাকলে, উপস্থিত দেখানোর জন্য এটি কোনও পার্শ্ব-প্রতিক্রিয়াযুক্ত no
$ git checkout
Your branch is up-to-date with 'origin/master'.
git checkout .
, এটি কোনও কোনও বিকল্প নয়।
আমি এই উপনামটি ব্যবহার করি
git config --global alias.track '!f() { ([ $# -eq 2 ] && ( echo "Setting tracking for branch " $1 " -> " $2;git branch --set-upstream $1 $2; ) || ( git for-each-ref --format="local: %(refname:short) <--sync--> remote: %(upstream:short)" refs/heads && echo --Remotes && git remote -v)); }; f'
তারপর
git track
অলিভিয়ার রেফালোর জবাবের ভিত্তিতে
if [ $# -eq 2 ]
then
echo "Setting tracking for branch " $1 " -> " $2
git branch --set-upstream $1 $2
else
echo "-- Local --"
git for-each-ref --shell --format="[ %(upstream:short) != '' ] && echo -e '\t%(refname:short) <--> %(upstream:short)'" refs/heads | sh
echo "-- Remote --"
REMOTES=$(git remote -v)
if [ "$REMOTES" != '' ]
then
echo $REMOTES
fi
fi
এটি ট্র্যাক কনফিগার করা সহ কেবল স্থানীয় দেখায়।
এটিকে আপনার পথে গিট-ট্র্যাক নামে একটি স্ক্রিপ্টে লিখুন এটি একটি গিট ট্র্যাক কমান্ড পাবে
Https://github.com/albfan/git-showupstream এ আরও বিস্তৃত সংস্করণ
git config --get-regexp "branch\.$current_branch\.remote"
ট্র্যাক করা দূরবর্তীটির নাম দিবে
git config --get-regexp "branch\.$current_branch\.merge"
ট্র্যাক করা দূরবর্তী শাখার নাম আপনাকে দেবে।
আপনাকে আপনার বর্তমান শাখার নামের সাথে $ বর্তমান_ব্রঞ্চটি প্রতিস্থাপন করতে হবে। আপনি গতিশীলভাবে এটি পেতে পারেনgit rev-parse --abbrev-ref HEAD
নিম্নলিখিত মিনি স্ক্রিপ্টে এই জিনিসগুলিকে একত্রিত করা হয়েছে। এটি নামের একটি ফাইলে git-tracking
আটকে দিন, এটি কার্যকর করার যোগ্য করে নিন এবং নিশ্চিত করুন যে এটি আপনার পথে রয়েছে।
তাহলে আপনি বলতে পারেন
$ git tracking
<current_branch_name>-><remote_repo_name>/<remote_branch_name>
মনে রাখবেন যে দূরবর্তী শাখার নামটি আপনার স্থানীয় শাখার নাম থেকে আলাদা হতে পারে (যদিও এটি সাধারণত হয় না)। উদাহরণ স্বরূপ:
$git tracking
xxx_xls_xslx_thing -> origin/totally_bogus
আপনি কোডটিতে দেখতে পাচ্ছেন এটির কীটি গিট কনফিগারেশন থেকে ডেটা উত্তোলন করছে। আমি কেবল বহিরাগত ডেটা সাফ করার জন্য সেড ব্যবহার করি।
#!/bin/sh
current_branch=$(git rev-parse --abbrev-ref HEAD)
remote=$(git config --get-regexp "branch\.$current_branch\.remote" | sed -e "s/^.* //")
remote_branch=$(git config --get-regexp "branch\.$current_branch\.merge" | \
sed -e "s/^.* //" -e "s/refs\/.*\///")
echo "$current_branch -> $remote/$remote_branch"