Как добавить пустое сообщение git commit в определенный файл? - PullRequest
0 голосов
/ 13 сентября 2018

Это продолжение этого Q & A . Цель состоит в том, чтобы добавить пустой коммит в конкретный файл, но оказалось, что требуется фактическое изменение.

Шаги для воспроизведения

  • Перейдите в репозиторий git
  • пробег git log
  • будет отображаться журнал git
  • выполнить git commit path/to/specific/file --allow-empty -m "Empty commit"

Ожидаемый результат

  • выпуск git log path/to/specific/file
  • Появится сообщение Empty commit
  • Выход git log НЕ содержит Empty commit

Фактический результат

Оказалось, что Empty commit находится в корневом журнале git (git log), а не в конкретном файле (git log path/to/file)


Обсуждение

AFAIK git log - это запись о коммитах, которые применяются к каждому файлу в вашем хранилище

Если применить изменение к path/to/some/file, добавить и зафиксировать его, а затем запустить git log path/to/some/file, то появится сообщение о коммите, но когда выдается git log path/to/some/another-file, сообщение о фиксации пропускается.

Почему вы думаете, что вам это нужно?

Существует проверка, которая проверяет, является ли пользователь последней фиксации пользователем CI, чтобы убедиться, что нет библиотек, которые содержат невыпущенные изменения. Конечно, можно добавить лишнее пространство для добавления нового коммита в конкретный файл, но предпочтительнее добавить новый коммит без изменения файла.

1 Ответ

0 голосов
/ 13 сентября 2018

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

Похоже, вас заставляют думать иначе из-за синтаксиса git log -- path.Это не отражает структуру коммитов;это отражает то, как команда log обрабатывает фиксации.См. git log документы ('https://git -scm.com / docs / git-log '):

[-]

Показывать только те коммиты, которые достаточны для объяснения того, как файлы, соответствующие указанным путям, стали

Команда журнала все еще видит все коммиты - она ​​выполняет тот же коммитпостроить график, если бы вы не указали путь, но он отфильтровывает все, что не влияет на указанные пути, и выводит информацию только о коммитах, на которые влияет do эти пути.

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

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

Наконец, если коммит был «пустым» (то есть его содержимое совпадает с его родителем), то любой путь на основе *Аргумент 1032 * пропустил бы этот коммит, поскольку по определению он не способствует пониманию того, как файл попал в его текущую форму.

Теперь из вашего объяснения того, что вы пытаетесь выполнить:

Конечно, можно добавить лишнее пространство для добавления нового коммита в конкретный файл,

Нет, это не так.Потому что не существует такого понятия, как «фиксация в конкретном файле».Для этого нужно создать новый коммит, который воздействует на этот файл и, следовательно, будет выбран, когда вы дадите log этот файл в качестве аргумента пути.(Но это будет также , когда вы не дадите аргумента пути.)

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