Git şube oluşturucusunu bulun


159

Kimin şube oluşturduğunu öğrenmek istiyorum.

Ben bunu ile tür mümkün:

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

Ancak bu, dalı oluşturan kişiyi değil, her şube için son geçişi döndürür.


7
Git'de şube yazarı / yaratıcısı alamazsınız. Burada ne yapıyorsunuz şubenin ipucunun yazarı olsun. Birisi yeni bir taahhütte bulunduğunda değişecektir.
sylvain.joyeux

1
Feragat: Bu soru / cevaptaki örtük varsayım " şube başına sadece bir kişiyle iş akışında " dır . En az iki iş arkadaşının bir dalı paylaştığı diğer iş akışlarında, bu bilgi (şube yaratıcısı) git yoluyla elde edilemez ve yukarıdaki cevaplar birisini yanlış varsayımlara yönlendirebilir.
RomainValeri

Yanıtlar:


56

Bir dal, kesin bir göstergeden başka bir şey değildir. Bu nedenle, "beni kim yarattı" gibi meta verileri izlemez. Kendin için gör. Deponuzda deneyin cat .git/refs/heads/<branch>.

Yazılı, eğer gerçekten bu bilgiyi deponuzda izlemek istiyorsanız, şube açıklamalarına göz atın . En azından yerel olarak dallara rastgele meta veriler eklemenize izin verir.

Ayrıca DarVar'ın aşağıdaki cevabı bu bilgiye ulaşmanın çok akıllıca bir yoludur.


Benim için bu .git / refs / kafaları / <branch> "ref" çoğul oldu
Jeffrey LeCours

4
DarVar'ın cevabı, muhtemelen bazıları için yararlı olsa da, doğru bir cevap değildir. Bu, orijinal sorunun yazarının zaten yaptıklarını yapmanın daha özlü bir yoludur (yani, son komitenin adını bir şubeye almak).
peabody

296

Yazara göre uzak Git dallarını yazar tarihine göre sırala

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

8
O şubeye taahhüt eden son kişi. Bir dal sadece bir taahhüt için bir işaretçi olduğu için.
DarVar

7
Bu Windows üzerinde çalışmalı mı? "Giriş dosyası iki kez belirtildi."
Steve Chambers

27
Sekmeli biçimlendirme ile: 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 }'( stackoverflow.com/a/3631819
Gary S. Weaver

15
Şube üzerinde herhangi bir taahhütte bulunulmamışsa ve master'dan yaratılmışsa, "şubenin yazarı" bu branşla tamamen ilgisizdir, sadece masterdaki son komisyoncudur. Eğer efendiden değişiklikleri alırsanız ve bu bir hızlı ileri alırsa, yine o dalda hiç çalışmamış olan ustadaki son taliçtir.
Gustave

9
Bu cevap ve komut potansiyel olarak yararlı olsa da, bunun soruya yanıltıcı bir cevap olduğunu hissediyorum. Bu, bir daldaki son komiser olan tüm dallardaki yazar adlarını listeler. Aslında dalın yaratıcısı olmayacak bazı koşullar vardır . Asıl cevap, git'in bu bilgiyi depolamamasıdır.
peabody

46

--sortBayrağı kullanarak önceki yanıtları değiştirdim ve bazı renk / biçimlendirme ekledim:

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

1
renklerde suçlama için mükemmel
suarsenegger


8

DarVar'ın cevabına ekleme :

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

Not: AWK'yı yazarı ve uzak dalı güzel yazdırmak için kullandık.


3
yalnızca yazar adı tek bir sözcükse işe yarar. Adı ve soyadı ayrılmışsa, şube adı yerine soyadı görürsünüz ...
Legato

5

Yerel deponuzda kimin şube oluşturduğunu öğrenebilirsiniz .

git reflog --format=full

Örnek çıktı:

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

Ancak bu muhtemelen yerel deponuzda yalnızca siz şubeler oluşturduğunuz için işe yaramaz.

Bilgiler ./.git/logs/refs/heads/ şubesinde saklanır . Örnek içerik:

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

Bu örnekteki son işlem "b" kullanıcısından, "b2" dalı ise "a" kullanıcısı tarafından oluşturulmuştur. Kullanıcı adınızı değiştirirseniz git reflog'un bilgileri günlükten aldığını ve yerel kullanıcıyı kullanmadığını doğrulayabilirsiniz.

Bu yerel günlük bilgilerini merkezi bir havuza iletme olasılığı hakkında bir fikrim yok.


4

Yazar adına göre öğrenebiliriz

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

1

varsayarsak:

  1. şube yapıldı master
  2. masterhenüz birleştirilmedi

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

0

Bunun tamamen sorunun kapsamı olmadığını biliyorum, ancak yalnızca belirli bir yazar tarafından yapılan taahhütleri filtreleme ihtiyacı bulursanız, her zaman grep'e yönelebilirsiniz :)

# 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'

mutlu kodlama! :)


0

DESC arayanlar için ... bu işe yarıyor gibi görünüyor --sort=-

biçimlendirme için ty, bunun için yeni ... gözlerim bazı kan kaybını kaybediyor

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

diğer referanslar: https://stackoverflow.com/a/5188364/10643471


-1

Sanki bildiğim kadarıyla, görebileceğiniz Eğer sadece bir şube yaratıcısı vardır. Bu, .git / ref / heads / <branch> içindeki ilk satırla gösterilir. "HEAD'dan oluşturuldu" ile bitiyorsa, yaratıcısı sizsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.