Можем ли мы создать в ветке пустой коммит, не переключаясь на него - PullRequest
1 голос
/ 14 июля 2020

Короче репозиторий старый и огромный, скажем 7Гб. Например, текущая ветка - branch01, а удаленная - origin. Задача - создать новый пустой коммит на branch02. По сути, пустая фиксация должна запускать процесс CI (непрерывная интеграция) при выполнении git -pu sh.

Однако переключение с одной ветки на другую может занять секунды или даже минуты с тех пор, как может быть много операций ввода-вывода. Есть ли способ создать пустую фиксацию на branch02, не переключаясь на нее, как показано ниже.

# to create the empty commit
# git command: hash-object, write-tree, commit-tree

# after the empty commit is created
git push origin branch02:branch02

Ответы [ 2 ]

3 голосов
/ 14 июля 2020

Просто чтобы ответить на исходный вопрос, вы можете сделать это с помощью нескольких низкоуровневых команд:

cmt=$(git commit-tree -m "trigger Jenkins" -p branch02 branch02^{tree}) &&
git update-ref refs/heads/branch02 $cmt

То есть вы создаете новый объект фиксации с тем же объектом дерева, что и исходная ветвь, и исходная ветвь как родительская, а затем вы указываете ветвь на новую фиксацию.

1 голос
/ 14 июля 2020

Да, можно. Но обратите внимание на следующие шаги для создания коммитов в этой ветке.

  1. git symbolic-ref HEAD refs/heads/otherbranch Выполняется проверка без обновления файлов.
  2. Сбросьте ваш индекс в соответствии с новой веткой, набрав git reset Если если вы этого не сделаете, вы закончите фиксацию чего-то на основе последней извлеченной ветки
  3. Сценический файл (ы), который вы хотите зафиксировать, используя git add <filename>
  4. Создать фиксацию
  5. Перед обратным переключением добавьте все файлы, которые были отключены на шаге 2. Используйте git add .
  6. Оформить заказ в старую ветку git checkout old_branch
  7. Наконец, снова сбросьте свой индекс с помощью git reset. Этот шаг необходим, потому что файлы, которые не отслеживались вначале, будут помечены как удаленные во время оформления заказа. Сброс изменит статус этих файлов обратно на неотслеживаемый.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...