git - игнорировать файлы по метке времени - PullRequest
0 голосов
/ 28 апреля 2020

Моя ситуация такова: я работаю над модификацией для старой игры с исходным кодом. Есть много файлов. Поскольку это старая игра, у всех файлов, которые не были изменены мной, есть старая отметка времени изменения файла.

Для меня было бы очень полезно, если бы я мог только добавить файлы в хранилище (отследить их ), которые были недавно изменены (мной). Таким образом было бы очень легко сразу увидеть, какие файлы были изменены, и было бы проще автоматически их упаковать.

Я мог бы написать программу, которая отслеживает временные метки всех файлов в фоновом режиме и вносит изменения динамически файл gitignore. Но можно ли делать такие вещи с помощью git встроенных инструментов?

Привет,

Neconspictor

1 Ответ

0 голосов
/ 29 апреля 2020

Я не знаю git инструмента для этого. Очевидное местоположение будет в инструменте gitignore, но он работает только с шаблонами файлов. Вам придется создать этот список файлов самостоятельно. Поскольку ваши файлы являются только локальными, список файлов не нужно отправлять на сервер git, поэтому $GIT_DIR/info/exclude звучит как правильное место для размещения списка.

В вашем случае вы можете сгенерировать список с чем-то вроде (например, для 2015-03-22 в 15:30):

touch -t 201503221530 timestamp_file
find . ! -newer timestamp_file > .git/info/exclude

Однако, если не слишком хлопотно, я бы обычно советовал отслеживать все в git:

  • Неизмененные файлы обычно не мешают
  • Получить список измененных файлов между коммитами просто (git diff --name-only <sha1> <sha2> или git diff --name-only <sha1> HEAD)
  • Предположим, вы редактировали (таким образом, отслеживать) только файлы A и B, затем вы начинаете редактировать файл C. Вам нужно будет не забыть добавить и зафиксировать файл C до того, как вы начнете работать с C, чтобы отслеживать будущие изменения. Разве не будет легче уже отслеживать C? (Здесь должен быть способ использования некоторых git хуков , например, pre-commit хуков, чтобы проверить, что все файлы в .git/info/exclude старше timestamp_file, и отказаться от фиксации, если это не так.)
  • В этом примере AB C, когда вы хотите получить все ваши изменения, вы больше не можете сделать простой git diff --name-only <sha1> HEAD, потому что это будет включать добавление C до ваших изменений. Таким образом, ни в коем случае «проще не автоматически их упаковывать», это действительно намного сложнее.
...