Нет хорошего способа сделать это. Не делай этого. Сделай что-нибудь еще - см. Ответ Криса .
Если вы все равно настаиваете на этом
Есть несколько плохих способов сделать это. Вероятно, самое простое - создать потерянную ветвь, в которой нет файлов, зафиксировать PDF как один файл в этой ветви (чтобы при проверке этой ветви вы получили рабочее дерево только с одним файлом PDF, который вы затем необходимо скопировать куда-нибудь еще и затем git checkout
ветку, которую вы действительно хотите, что немедленно удалит файл PDF из вашего рабочего дерева):
$ git status
Убедитесь, что вам нечего делать, и ваше дерево работы чистое, потому что вы собираетесь их временно уничтожить. Тогда:
$ cp built.pdf /tmp/built.pdf # save the PDF somewhere
$ git checkout --orphan pdfbranch # create branch for one commit holding PDF
$ git read-tree --empty -u # clear index and work-tree
$ cp /tmp/built.pdf built.pdf # restore PDF to work-tree
$ git add built.pdf # copy to otherwise-empty index
$ git commit -m 'create built pdf' # make one commit on branch
$ git checkout master # or whatever - PDF file goes away again
Теперь вы можете удалить ветку pdfbranch
(из всех клонов этого репозитория Git) в любое время в будущем, чтобы больше не сохранять старый построенный файл PDF, а затем создать новый pdfbranch
для повторного хранения одного построенного файла.
(Вы можете упростить вышесказанное, используя git worktree add
, если ваш Git не меньше 2,5: используйте git worktree add --detach ../pdf-worktree master
, чтобы создать место, в котором нужно выполнить шаги git checkout --orphan
и git read-tree --empty -u
, после чего вы можете оставить добавлено рабочее дерево как место для следующего обновления. Но в целом это плохая идея.)
Вы можете использовать тег вместо имени ветви; эффект тот же. Тем не менее, имена тегов не должны перемещаться, поэтому этот метод сложнее.
Общая идея здесь и причина того, что это плохая идея, состоит в том, что история является коммитами; коммиты являются историей в репозитории. Чтобы иметь файл, который не имеет другой истории, этот файл должен быть точно в одном коммите.
Еще одним методом является git add
pdf как одиночного объекта BLOB, а затем прикрепление тега (легкий или аннотированный) к объекту BLOB. Удалите тег, чтобы освободить объект (в конечном итоге он будет удален). Это имеет те же недостатки, что и раньше, плюс проблема с тем, что теги не должны перемещаться, плюс тот факт, что для извлечения файла вам нужно быть немного Git-гуру.