Как проверить, к каким ветвям репозитория ядра Linux применяется конкретная фиксация

Допустим, у меня есть коммит git в репозитории Linux git, например. http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=8c7188b23474cca017b3ef354c4a58456f68303a

Как я могу, начиная с этого коммита, понять, в каких ветках репо на самом деле содержится этот коммит? Поставщик безопасности сказал мне, что указанная выше фиксация применима к ветвям 2.6.x, 3.10.x, 3.12.x, 3.14.x и 3.4.x.

Как они могут это определить?


person daniel f.    schedule 27.01.2016    source источник
comment
Я не верю, что это дубликат. Это выходит за рамки простого использования git, это частично касается структуры самого репозитория ядра. Это становится ясно, когда вы действительно используете команду, описанную в повторяющихся ответах. Приведенный выше коммит, по-видимому, содержится только в мастере, однако при просмотре примечаний к выпуску ядра 4.3.3 вы увидите, что он также присутствует там.   -  person daniel f.    schedule 27.01.2016


Ответы (1)


Во-первых, получите, чтобы убедиться, что у вас есть последняя версия с вашего пульта:

git fetch

Используйте параметр --contains команды branch:

git branch --all --contains 8c7188b23474cca017b3ef354c4a58456f68303a

--contains [] Список только ветвей, содержащих указанный коммит (HEAD, если не указан)

person Jonathan.Brink    schedule 27.01.2016
comment
Однако это не работает. Ваша команда возвращает только то, что эта фиксация находится в мастере. Однако, взглянув на примечания к выпуску ядра 4.3.3, вы увидите, что приведенная выше фиксация была включена. - person daniel f.; 27.01.2016
comment
@даниэльф. Вероятно, это связано с тем, что у вас нет локальных копий этих других веток. Передайте флаг --all, чтобы увидеть результаты для всех ветвей (локальных и удаленных) - person Jonathan.Brink; 27.01.2016
comment
Признаюсь, я не эксперт по Git. Я клонировал git.kernel.org/pub /scm/linux/kernel/git/stable/linux-stable.git репозиторий локально. Насколько я вижу, у него много голов и довольно много тегов. Я что-то пропустил? - person daniel f.; 27.01.2016
comment
@даниэльф. В Git, когда вы клонируете репозиторий, вы клонируете все. Поэтому я ожидаю, что вы увидите довольно много ветвей и тегов. Что-то, что может сбивать с толку, — это концепция наличия локальных копий всех этих ветвей. После клонирования у вас есть только локальная версия основной ветки, но фактически вы загрузили каждую ветку (есть крайние случаи, но они не относятся к этому обсуждению). Чтобы увидеть разницу, запустите команды git branch --local и «git branch --remote». - person Jonathan.Brink; 27.01.2016
comment
@даниэльф. Чтобы получить собственную копию других веток, используйте команду checkout, например: git checkout fooBranch - person Jonathan.Brink; 27.01.2016
comment
так должен ли я проверять каждую отдельную ветку, например, origin/linux-4.3.y, а затем искать там? Нет ли у меня возможности проверить, какие (удаленные) ветки содержат коммит? - person daniel f.; 27.01.2016
comment
@даниэльф. Нет, чтобы увидеть, есть ли в ветке (локальной или удаленной) конкретная фиксация, вам не нужно проверять ее. Используйте флаг --all, как в моем (обновленном) ответе. - person Jonathan.Brink; 27.01.2016
comment
Спасибо за терпеливость. Я думаю, что у меня была фундаментальная ошибка в моем мыслительном процессе. Кажется, что коммит, перенесенный в другую ветку, вызывает сам новый коммит, то есть он имеет другой идентификатор. - person daniel f.; 27.01.2016
comment
@даниэльф. Понятно... на один коммит можно указать (лучше использовать термин reachable) с помощью n ветвей. Ветка — это просто указатель на дерево коммитов. - person Jonathan.Brink; 27.01.2016
comment
если я могу еще раз злоупотребить вашим терпением, я немного лучше перефразировал вопрос здесь: stackoverflow.com/questions/35045071/ - person daniel f.; 27.01.2016