Я работаю над доказательством концепции для моего проекта. Одним из требований является получение имени файла, который был последним зафиксирован в основной ветке. Я вызываю приведенную ниже команду из конвейера Azure.
$a = git diff-tree --no-commit-id --name-only -r $(Build.SourceVersion)
Он отлично работает, когда я напрямую передаю файл в основную ветку.
Когда я создаю другую ветку и добавляю в нее файл, а затем объединяю ее с основной веткой, и когда я пытаюсь выполнить ту же команду, она не приносит мне никакого значения. В качестве альтернативы я также пробовал git diff-tree --no-commit-id --name-only -r HEAD
, но эта команда не возвращает никакого значения, когда файл добавляется в основную ветку во время процесса слияния. Любой указатель или помощь будут оценены.
Вы можете получить последний хэш фиксации из ветки main
, независимо от того, является ли это слиянием или нет, используя эту команду:
git log -n 1 --pretty=format:"%H" main
Затем вы сможете подключить это к существующей команде, например:
git diff-tree --no-commit-id --name-only -r $(git log -n 1 --pretty=format:"%H" main)
P.S. вы можете ограничить его слиянием или отсутствием слияния, добавив переключатели --merge
или --no-merges
соответственно.
Спасибо !!! Решение сработало. Решение Torek тоже работает
Проще, чем
git log -n -1
:git rev-parse main
. (Для надежности сценария заменитеmain
наrefs/heads/main
независимо от того, какой из них вы используете.) Но обратите внимание, что вам вообще не нужно этого делать:git diff-tree
принимает в качестве различных древовидных аргументов имена ветвей! Например,git diff-tree --no-commit-id --name-only -r main HEAD
сравнит снимок вmain
со снимком вHEAD
.