Dowiedz się więcej o Git branch creator

Chcę się dowiedzieć, kto stworzył gałąź.

Jestem w stanie to zrobić z:

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

Zwraca jednak ostatniego committera z gałęzi, niekoniecznie osobę, która ją utworzyła.

Author: Ofir Farchy, 2012-08-21

9 answers

Gałąź jest niczym innym jak wskaźnikiem commit. Jako takie, nie śledzi metadanych, takich jak " kto mnie stworzył."Przekonaj się sam. Spróbuj cat .git/refs/heads/<branch> w swoim repozytorium.

To napisane, jeśli naprawdę chcesz śledzić te informacje w swoim repozytorium, sprawdź opisy gałęzi . pozwalają na dołączanie dowolnych metadanych do gałęzi, przynajmniej lokalnie.

Również odpowiedź Darvara poniżej jest bardzo sprytnym sposobem, aby uzyskać te informacje.

 38
Author: Christopher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:59

Lista zdalnych gałęzi Gita według autora posortowana według daty zatwierdzenia:

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n
 218
Author: DarVar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-02 11:14:35

Poprawiłem powyższe odpowiedzi, używając flagi -- sort i dodając trochę kolorów/formatowania.

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
 17
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-31 13:34:00

Dodawanie do https://stackoverflow.com/a/19135644/2917986

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

P. S. użyliśmy awk, aby ładnie wydrukować autora i zdalną gałąź

 7
Author: suryakrupa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:34
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
 7
Author: KhaledMohamedP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 14:48:34

Możesz dowiedzieć się, kto utworzył gałąź w twoim lokalnym repozytorium przez

git reflog --format=full

Przykładowe wyjście:

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

Ale jest to prawdopodobnie bezużyteczne, ponieważ zazwyczaj w lokalnym repozytorium tworzysz tylko gałęzie.

Informacje są przechowywane na ./.git/logs/refs/heads / branch. Przykładowa treść:

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

Ostatni commit w tym przykładzie pochodzi od użytkownika "b", podczas gdy gałąź" b2 "została utworzona przez użytkownika"a". Jeśli zmienisz swoją nazwę Użytkownika, możesz zweryfikować, że git reflog pobiera informacje z dziennika i nie korzysta z użytkownika lokalnego.

Nie wiem o żadnej możliwości przesłania tych lokalnych informacji do centralnego repozytorium.

 3
Author: Gustave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-05 15:47:52

Zakładając:

  1. gałąź została wykonana z master
  2. nie została jeszcze połączona z master

 git log --format="%ae %an" master..<HERE_COMES_BRANCH_NAME> | tail -1
 1
Author: Aleksey Bykov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 18:03:11

Z tego, co wiem, możesz zobaczyć, czy ty {[2] } jesteś twórcą tylko gałęzi. Jest to wskazywane przez pierwszy wiersz w .git / ref / heads/ . Jeśli kończy się na "stworzony z głowy", jesteś Stwórcą.

 0
Author: Kendor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-02 20:57:41

Wiem, że nie jest to do końca zakres pytania, ale jeśli znajdziesz potrzebę filtrowania tylko commitów przez konkretnego autora, zawsze możesz wrzucić do grepa:)

# 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'
Szczęśliwego kodowania! :)
 0
Author: avocadojesus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 22:19:00