Как получить время создания git-ветки с удаленного компьютера? - PullRequest
0 голосов
/ 05 июля 2018

Я хочу знать время создания филиала. И я не могу использовать «git reflog», потому что ветка была только что извлечена из удаленного. Так что локально есть только повторные проверки моей проверки. Я использую Git Log и получил много журналов, включая другие ветви. Как я могу получить время?

1 Ответ

0 голосов
/ 05 июля 2018

git не отслеживает время создания ветки. Самое близкое, что вы можете получить, это то, что если вы сделаете определенные предположения о топологии коммитов, вы можете проверить дату (ы) первого коммита, который, по-видимому, относится к ветви.

Предположим, у вас есть

x -- o -- x -- x <--(master)
      \
       A -- B -- c <--(feature)

Теперь может показаться «очевидным», что feature было создано в o, а затем A было зафиксировано в feature (за которым следуют B и C). Это не обязательно верно, и git не отслеживает какую-либо информацию, которая скажет вам, если это правда, потому что в git ветка - это просто указатель на один коммит (с соглашением, что оно обычно перемещается определенным образом, когда коммиты добавляются ). В этом случае feature указывает на C, и это все, что мы точно знаем о feature.

(Мы могли бы также знать, как ветвь перемещалась локально, но только если она перемещалась локально. Мы могли бы также знать кое-что о связи ветки с удаленным, и я думаю, вы могли бы попытаться извлечь информацию из удаленного. ... но он вообще не знает, когда была создана ветвь.)

Но интуитивно многие думают, что feature состоит из коммитов A, B и C (и, возможно, имеет собственную жизнь, которая началась в o). В некоторых инструментах это было бы точно; это просто не тот случай в git.

Таким образом, вы можете использовать либо даты коммиттера, либо даты коммитов автора, в зависимости от того, что вы пытаетесь понять. Вот несколько способов взглянуть на это:

Вы можете использовать A дату автора. Если ветвь перебазирована, она должна остаться прежней и в этот момент может предшествовать дате автора ее родителя; так что это не обязательно скажет вам, когда топологическая точка ветвления может быть впервые найдена в o, но это даст справедливую оценку того, когда началась разработка для ветки. Вы можете найти это значение как

git rev-list --format=%ad master..feature |tail -n1

Если вы можете исключить перебазирование, вы можете оценить, что разработка началась где-то до A даты автора, а иногда - после o s даты автора. Вы можете получить o дату автора как

git rev-list --format=%ad -n1 $(git merge-base master feature)

В любом случае вы можете использовать даты фиксации вместо дат автора; но в этом случае имейте в виду, что перебазировка feature создает новые коммиты (A' вместо A и т. д.) и поэтому даты коммитов изменяются. Так что, если вы хотите знать, когда началась разработка, это менее надежно; но если вы хотите знать, когда топологическая точка ветвления появилась в o, возможно, это более надежно. Вы должны использовать %cd вместо %ad из вышеприведенных команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...