গিট শাখার স্রষ্টাকে সন্ধান করুন


159

কারা একটি শাখা তৈরি করেছে তা আমি জানতে চাই।

আমি এর সাথে একরকম সক্ষম হয়ে উঠছি:

git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _

যাইহোক, এটি শাখা প্রতি শেষ প্রতিশ্রুতি ফিরিয়ে দেয়, শাখাটি তৈরি করেছেন এমন ব্যক্তিদের অগত্যা নয়।


7
আপনি গিতে কোনও শাখা লেখক / স্রষ্টা পেতে পারেন না। আপনি এখানে যা করছেন তা শাখার টিপটির লেখক পান। কেউ সেখানে নতুন প্রতিশ্রুতি দেওয়ার সাথে সাথেই এটি পরিবর্তন হবে।
sylvain.joyeux

1
দাবি অস্বীকার: এই প্রশ্ন / উত্তরের অন্তর্নিহিত অনুমান " শাখায় কেবলমাত্র একজন ব্যক্তি সহ একটি কর্মপ্রবাহে "। অন্যান্য কর্মপ্রবাহে যেখানে কমপক্ষে দুজন সহকর্মী একটি শাখা ভাগ করে দেয়, এই তথ্যটি (শাখা নির্মাতা) গিটের মাধ্যমে পাওয়া যায় না এবং উপরের উত্তরগুলি কাউকে মিথ্যা অনুমানের দিকে নিয়ে যেতে পারে।
রোমান ভ্যালারি

উত্তর:


56

একটি শাখা কমিট পয়েন্টার ছাড়া কিছুই নয়। যেমন, এটি "কে আমাকে তৈরি করেছেন" এর মতো মেটাডেটা ট্র্যাক করে না। নিজের জন্য দেখুন. cat .git/refs/heads/<branch>আপনার ভাণ্ডারে চেষ্টা করুন ।

এই লিখিত, যদি আপনি সত্যিই আপনার তথ্য সংগ্রহস্থলটিতে এই তথ্যগুলি ট্র্যাক করতে চান তবে শাখার বিবরণ পরীক্ষা করে দেখুন তারা আপনাকে স্থানীয়ভাবে কমপক্ষে শাখায় স্বেচ্ছাচারিত মেটাডেটা সংযুক্ত করার অনুমতি দেয়।

এছাড়াও নীচে দারওয়ারের উত্তরটি এই তথ্যটি পাওয়ার খুব চতুর উপায়।


আমার জন্য এটি .git / রেফার্স / হেডস << ব্র্যাঞ্চ> "রেফ" বহুবচন ছিল
জেফ্রি লেকর্স

4
ডারভারের উত্তর, যদিও সম্ভবত কারও কারও পক্ষে কার্যকর, সঠিক উত্তর নয়। মূল প্রশ্নের লেখক ইতিমধ্যে যা করছিলেন সেটি করার (এটি একটি শাখায় সর্বশেষ প্রতিশ্রুতের নাম পাওয়া) কেবল এটি করার একটি আরও সহজ উপায়।
পিবডি

296

প্রতিবেদকের তারিখ অনুসারে বাছাইকৃত লেখক দ্বারা দূরবর্তী গিট শাখা তালিকাভুক্ত করুন:

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' --sort=committerdate

8
এই শাখায় প্রতিশ্রুতিবদ্ধ এটি সর্বশেষ ব্যক্তি। যেহেতু একটি শাখা একটি প্রতিশ্রুতিবদ্ধ মাত্র পয়েন্টার।
দারওয়ার

7
এই উইন্ডোজ কাজ করা উচিত? আমি "ইনপুট ফাইলটি দু'বার নির্দিষ্ট করে দিয়েছি।"
স্টিভ চেম্বারস

27
সারণী বিন্যাসকরণ সহ: git for-each-ref --format='%(committerdate)%09%(authorname)%09%(refname)' | sort -k5n -k2M -k3n -k4n | grep remotes | awk -F "\t" '{ printf "%-32s %-27s %s\n", $1, $2, $3 }'( স্ট্যাকওভারফ্লো. com/a/ 3631819 থেকে ধারণা পেয়েছে - সর্বাধিক তারিখের সময় / লেখকের নাম দৈর্ঘ্যের উপর নির্ভর করে awk প্রিন্টেফে সংখ্যাগুলি সামঞ্জস্য করতে হতে পারে)
গ্যারি এস ওয়েইয়ার

15
যদি শাখায় কোনও প্রতিশ্রুতিবদ্ধতা না ঘটে এবং যদি এটি মাস্টার থেকে তৈরি করা হয়, তবে "শাখার লেখক" পুরোপুরি সেই শাখার সাথে সম্পর্কিত নয় তবে কেবল মাস্টার সম্পর্কে সর্বশেষ প্রতিশ্রুতিবদ্ধ। আপনি যদি মাস্টার থেকে পরিবর্তনগুলি টেনে আনেন এবং এটি দ্রুত এগিয়ে যায় তবে এটি আবার মাস্টারের সর্বশেষ প্রতিশ্রুতিবদ্ধ, যিনি সম্ভবত branch শাখায় কখনও কাজ করেন নি।
গুস্তাভে

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

46

আমি --sortপতাকাটি ব্যবহার করে পূর্ববর্তী উত্তরগুলি ট্যুইক করেছি এবং কিছু রঙ / বিন্যাস যুক্ত করেছি:

git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)    %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes



8

যোগ করা হচ্ছে DarVar এর উত্তর :

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | awk '{print $7 $8}'

PS: আমরা লেখক এবং দূরবর্তী শাখাটি প্রিন্ট করার জন্য AWK ব্যবহার করেছি।


3
এটি কেবল তখনই কাজ করে যদি লেখকের নাম একটি শব্দ থাকে। যদি এটি প্রথম এবং শেষ নামগুলি পৃথক করা হয়, তবে আপনি শাখার নামের পরিবর্তে শেষ নামটি দেখতে পাবেন ...
লেগাতো

5

আপনার স্থানীয় সংগ্রহস্থলে কারা একটি শাখা তৈরি করেছিল তা আপনি খুঁজে পেতে পারেন

git reflog --format=full

উদাহরণ আউটপুট:

commit e1dd940
Reflog: HEAD@{0} (a <a@none>)
Reflog message: checkout: moving from master to b2
Author: b <b.none>
Commit: b <b.none>
(...)

তবে এটি সম্ভবত আপনার স্থানীয় সংগ্রহস্থলগুলিতে সাধারণত অকার্যকর আপনি কেবল শাখা তৈরি করেন।

তথ্য ./.git/logs/refs/heads/ শাখায় সংরক্ষিত আছে । উদাহরণ সামগ্রী:

0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <a@none> 1438788420 +0200   branch: Created from HEAD

এই উদাহরণটিতে সর্বশেষ প্রতিশ্রুতি ব্যবহারকারী "বি" থেকে ছিল যখন শাখা "বি 2" ব্যবহারকারী "এ" দ্বারা তৈরি করা হয়েছিল। আপনি যদি আপনার ব্যবহারকারীর নাম পরিবর্তন করেন তবে আপনি যাচাই করতে পারেন যে গিট রিফ্লোগ লগ থেকে তথ্য নেয় এবং স্থানীয় ব্যবহারকারীকে ব্যবহার করে না।

সেই স্থানীয় লগ তথ্য কেন্দ্রীয় ভান্ডারে স্থানান্তরিত করার কোনও সম্ভাবনা সম্পর্কে আমি জানি না।


4

আমরা authorname উপর ভিত্তি করে খুঁজে পেতে পারেন

git for-each-ref --format='%(authorname) %09 %(if)%(HEAD)%(then)*%(else)%(refname:short)%(end) %09 %(creatordate)' refs/remotes/ --sort=authorname DESC

1

ধরে নেওয়া যাক:

  1. থেকে শাখা তৈরি করা হয়েছিল master
  2. masterএখনও মেশানো হয়নি

 git log --format="%ae %an" master..<HERE_COMES_THE_BRANCH_NAME> | tail -1

0

আমি জানি এটি পুরোপুরি প্রশ্নের ক্ষেত্র নয়, তবে আপনি যদি কোনও নির্দিষ্ট লেখকের দ্বারা কেবল কমিটিকে ফিল্টার করার প্রয়োজন খুঁজে পান তবে আপনি সর্বদা গ্রেপ করতে পাইপ করতে পারেন :)

# lists all commits in chronological order that
# belong to the github account with
# username `MY_GITHUB_USERNAME` (obviously you
# would want to replace that with your github username,
# or the username you are trying to filter by)


git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -committerdate | grep 'MY_GITHUB_USERNAME'

শুভ কোডিং! :)


0

যারা ডিইএসসি খুঁজছেন তাদের জন্য ... এটি কার্যকর বলে মনে হচ্ছে --sort=-

বিন্যাসের জন্য টি, এটি নতুন ... আমার চোখগুলি এর রক্তের কয়েকটি অংশ হারিয়ে ফেলছে

git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)    %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=-authordate refs/remotes

আরও রেফ: https://stackoverflow.com/a/5188364/10643471


-1

আমি যতদূর জানি, আপনি দেখতে পাচ্ছেন আপনি কেবল একটি শাখার স্রষ্টা কিনা । এটি .git / রেফ / হেড / <ব্র্যাঙ্ক> এ প্রথম সারিতে নির্দেশিত। যদি এটি "ক্রিয়েট ফ্রম হেড" দিয়ে শেষ হয় তবে আপনি নির্মাতা।

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