У меня есть изменяющаяся / разрабатываемая программа, которая генерирует некоторые результаты для бумаги, которую мне нужно хранить, когда они меняются вместе с изменениями программы.Эти результаты могут быть довольно большими, и я не хочу, чтобы их отправляли на удаленный компьютер по разным причинам (я не хочу вмешиваться в git lfs и файловый хостинг, не хочу заставлять соавторов загружать его на клон, это может привести к конфликтус локальными результатами соавторов, не хотят постоянно увеличивать размер истории и т. д.).Обратите внимание, что эти результаты 1. не являются детерминированными и 2. занимают много времени для генерации, поэтому дело не только в том, «не могли бы вы просто перезапустить код?»
Хотя я, очевидно, мог бы просто сделать
mkdir ../results/
cp -r results ../results/results-some-description
Отслеживание этих файлов с помощью git имеет некоторые преимущества, которые я бы хотел:
- Он связывает результаты, которые я фиксирую, с конкретным окном кода, который их сгенерировал.Я мог бы отследить эту информацию вручную, вставив коммит, например, в README или другие метаданные, но его регистрация намного проще.
- Это дает мне
git log
возможность легко просматривать состояниевещей было, когда я генерировал какую-то версию результатов. - Мне нужно хранить только одну видимую копию и не иметь огромной папки с дюжиной каталогов, которые мне нужно пролистать, чтобы найти то, чтонужное мне состояние (не говоря уже о перекрестных ссылках и т. д.).
Я рассмотрел несколько методов, но выбросил их по разным причинам:
1.Создайте чисто локальный репозиторий, добавьте удаленный при соответствующей фиксации в качестве подмодуля или поддерева какого-то вида
Каждый раз, когда я генерирую результаты, это выглядит как несколько слишком много шагов (хотя возможно набор сценариев с шагами), а такжебыть немного хрупким, если я забуду один.Я чувствую, что могу просто скопировать их в отдельные папки, если я собираюсь сделать это.
2.Сделайте локальную ветвь, которую я никогда не нажимаю, которая содержит файлы результатов;Объединить рабочую ветку в то время, когда я готов зафиксировать новые результаты
Я думал, что это было многообещающе, пока я действительно не подумал об этом, и это проще всего проиллюстрировать с помощью следующего набора команд:
> mkdir tmp && cd tmp
> git init
> touch foo
> git add foo
> git commit -m "Add foo"
> touch result
> git checkout -b results
> git add result
> git commit -m "Add results"
> git checkout foo
> echo "new stuff" >> results
> git checkout results
error: The following untracked working tree files would be overwritten by checkout:
results
Please move or remove them before you switch branches.
Aborting
Ой ... ну ... верно, упс.Они даже не могут быть спрятаны, потому что они не отслеживаются в рабочей ветке.
На самом деле, я чувствую, что хочу, это своего рода (Github-совместимый) хук, который в основном говорит "игнорировать этот каталогполностью поддерево, как будто его вообще не было в истории, а только при удаленном нажатии / удалении. "Честно говоря, это не имеет большого значения, если он выдвигает жуткие фантомные пустые коммиты, когда единственные файлы, к которым прикасались, были файлы в этом наборе, или взрывается комично, если соавтор фиксирует конфликтующие файлы.Хотя было бы идеально, если бы у меня была возможность помещать файлы в это дерево, если бы я действительно хотел (например, сделать снимок окна кода + результатов и тега для совместного использования в будущем).
Есть ли способ управлять чем-то вроде этого?