Я хочу з’ясувати, хто створив філію.
Я можу це зробити з:
git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _
Однак це повертає останнього комітента на галузь, не обов'язково особу, яка створила філію.
Я хочу з’ясувати, хто створив філію.
Я можу це зробити з:
git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _
Однак це повертає останнього комітента на галузь, не обов'язково особу, яка створила філію.
Відповіді:
Гілка - це не що інше, як покажчик фіксації. Як такий, він не відслідковує метадані типу "хто створив мене". Побачте самі. Спробуйте cat .git/refs/heads/<branch>
у своєму сховищі.
Це написано, якщо ви дійсно відстежуєте цю інформацію у вашому сховищі, ознайомтеся з описом гілок. Вони дозволяють приєднувати довільні метадані до гілок, принаймні локально.
Також відповідь DarVar нижче - дуже розумний спосіб отримати цю інформацію.
Перерахуйте віддалені гілки Git за автором, відсортовані за датою введення:
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' --sort=committerdate
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 - можливо, потрібно буде відрегулювати цифри в awk printf залежно від максимальної тривалості дати / імені автора)
Я перетворив попередні відповіді, використовуючи --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
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
Додавання до відповіді DarVar :
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | awk '{print $7 $8}'
PS: Ми використовували AWK для гарного друку автора та віддаленої гілки.
Ви можете дізнатись, хто створив філію у вашому локальному сховищі
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
Остання фіксація в цьому прикладі була від користувача "b", тоді як гілка "b2" була створена користувачем "a". Якщо ви зміните своє ім’я користувача, ви можете переконатися, що git reflog бере інформацію з журналу та не використовує локального користувача.
Я не знаю про будь-яку можливість передавати цю локальну інформацію журналу до центрального сховища.
Припустимо:
master
master
ще git log --format="%ae %an" master..<HERE_COMES_THE_BRANCH_NAME> | tail -1
Я знаю, що це не зовсім сфера питання, але якщо ви виявите необхідність відфільтрувати лише зобов'язання конкретного автора, ви завжди можете вирішити проблему :)
# 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'
щасливе кодування! :)
для тих, хто шукає DESC ... це, здається, працює --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