Как получить копию старой версии файла в репозитории git?
У меня есть версия файла .tex
из нескольких коммитов, которые я хотел бы получить. У меня есть хэш-значение sha1 для коммита, у которого есть версия этого файла, который я хочу. Я не хочу заменять текущую версию файла. Скорее, я хочу просто получить отдельную копию, которая отражает его состояние в более старой версии.
Многие похожие вопросы предполагают использование git checkout <sha1> -- file.tex
, но это просто продолжает давать "error: pathspec" file.tex "не соответствует ни одному файлу, известному как git."
Файл, который меня интересует, первоначально существовал в каталоге верхнего уровня репозитория. Я в настоящее время находится в подкаталоге репозитория, пытающегося запустить эту команду, чтобы получить более старую версию file.tex в подкаталоге.
Возможно ли это? Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать git cat-file
, чтобы выгрузить содержимое файла на стандартный вывод и перенаправить его в нужное место назначения:
git cat-file -p <sha1>:./file.tex > wherever.tex
./
необходим, если вы находитесь в подкаталоге репозитория, если вы находитесь на верхнем уровне хранилища, его можно опустить. Кроме того, это может не работать в более старых версиях git, и в этом случае вам нужно явно указать полный путь к файлу относительно корня репозитория.
Ответ 2
Я думаю, что лучшее решение - это временно перезаписать ваш файл. В вашем верхнем уровне вашего хранилища:
git checkout <sha1> file.tex
cp file.tex directory
git checkout HEAD file.tex
Ответ 3
Используйте git show
с абсолютными путями в репозитории:
workdir$ git show revision:repo/module/package/code.file > code.file.old
или пути относительно текущего каталога:
package$ git show revision:./code.file > workdir/code.file.old
В отличие от извлечения файла, show
по сути своей не меняет ваше рабочее пространство, вы можете делать с выводом все что угодно.
Сообщите этот ответ и, конечно же, ознакомьтесь с подробностями в руководстве.