Как пометить один файл в GIT - PullRequest
12 голосов
/ 11 мая 2011

Я очень новичок в Git. В настоящее время я пытаюсь ознакомиться с ним, используя его для отслеживания изменений в некоторых файлах Excel, которые я поддерживаю, чтобы отслеживать некоторые постоянные действия, с которыми я связан. Все файлы находятся в одном хранилище. Я хочу пометить каждый файл отдельно с их версиями. Это возможно? Пока что я обнаружил возможность пометить весь репозиторий. Если то, что я пытаюсь сделать, неправильно, посоветуйте мне лучшую практику.

Заранее спасибо.

Редактировать

Когда я делал это, я намеренно удалил предыдущий тег, чтобы пометить весь репозиторий (так как я не нашел способа пометить отдельные файлы) как v1.0. Поскольку теперь я хочу сбросить имя тега с именем файла и вполне удобно, как все должно происходить, как я могу откатить удаление и переименовать предыдущий тег (удаленный тег)?

Ответы [ 5 ]

8 голосов
/ 11 мая 2011

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

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

Если вы все еще настаиваете на создании такого специального тега, вы делаете:

> git ls-tree HEAD
040000 tree 2c186ad49fa24695512df5e41cb5e6f2d33c119b    bar
100644 blob 409940768f2a684935a7d15a29f96e82c487f439    foo.txt

> git tag my-bar-tree 2c186ad49fa24695512df5e41cb5e6f2d33c119b
> git tag my-foo-file 409940768f2a684935a7d15a29f96e82c487f439
7 голосов
/ 11 мая 2011

Вы можете пометить только коммит, например, определенный снимок в истории вашего хранилища. Однако git хранит файлы в виде больших двоичных объектов, и вы можете использовать git notes для добавления заметки в большой двоичный объект, например:

$ git ls-tree HEAD
100644 blob 252f7c7df5bd181536a6c9d0f9c371ce1a5dd042    .gitignore
100644 blob 8150ada74aba86c983ac3f8f63ab26aaa76fdcb7    README
100644 blob c4b1ff6dcb2a8e50727df21ced8d2872cd91af79    TODO.txt

$ git notes add -m "Adding a note to TODO" c4b1ff6dcb2a8e507
$ git notes show c4b1ff6dcb2a8e507
Adding a note to TODO

Однако обратите внимание, что это примечание (без каламбура :)) прикреплено только к этому BLOB-объекту, поэтому при каждом изменении файла создается новый BLOB-объект (с другим значением хэша sha1), и у нового BLOB-объекта не будет этой заметки. .

4 голосов
/ 11 мая 2011

Теги размещаются на конкретных коммитах, а не на репозитории в целом, как вы предлагаете в своем вопросе.

Один из способов сделать то, что вы предлагаете, - убедиться, что вы фиксируете изменения только в одном файле скаждый коммит, то вы можете пометить, что коммит например.file1-v1.0 для представления v1.0 файла 1.

Что вы пытаетесь представить, пометив эти коммиты?Это повлияет на любой совет о том, как улучшить ваш процесс.

2 голосов
/ 11 мая 2011

Вы действительно должны исследовать наличие отдельных веток, которые отслеживают изменения в определенных файлах. Вы должны быть в состоянии работать с этим.

1 голос
/ 11 мая 2011

Не напрямую, нет.

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

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

...