Переключение всего проекта в предыдущий коммит - PullRequest
3 голосов
/ 01 января 2012

Рассмотрим приложение для управления проектами, которое использует git на сервере.

Новые версии всегда создаются с использованием git add ., за которым следует git commit.

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

Какэто может быть выполнено?

Дополнительная информация (может не потребоваться): это веб-приложение для хранения академических проектов, которые запускаются на php, на удаленном сервере и доступны по сети.

Ответы [ 2 ]

8 голосов
/ 01 января 2012

Это одна из базовых функций git: git checkout.

$ git checkout branch_or_tag_name

изменяет ваш рабочий каталог в соответствии с этой веткой или тегом.

$ git checkout commit_hash

заставляет ваш текущий каталог отражать состояние вашего хранилища, когда произошла эта фиксация. (Осторожно, если вы сделаете это, вы будете в режиме «отсоединенная голова» - вам не следует изменять файлы в этом состоянии.)

Вы также можете просто создать ветку специально для этой «оценки» и проверить ее за одну операцию:

$ git checkout -b evaluation commit_hash

Когда вы закончите, просто извлеките ветку, в которой вы были ранее, и рабочий каталог будет обновлен.

$ git checkout master # or whatever your main branch is.

(И, возможно, git branch -d evaluation, если вам это больше не нужно.)

3 голосов
/ 01 января 2012

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

Сначала создайте свой ref с git branch (на самом делелюбые ветки в git, они называются refs, которые указывают на коммит и, следовательно, на всю историю, стоящую за ним):

git branch oldversion <refspec>

См. git help branch, что такое refspec (SHA1, относительный"путь" из другого refspec и т. д.).

Затем создайте каталог, в котором вы хотите разместить ваши старые файлы (назовем его /path/to/oldstuff), и используйте архив git из каталога проекта:

git archive oldversion | tar xvf - -C /path/to/oldstuff

Пример: я все время использую последнее ядро ​​Linux, и у меня есть его git-репозиторий плюс стабильное дерево Грега К.Х.Когда я хочу иметь дерево самого последнего стабильного дерева для его компиляции, вот что я делаю (здесь, для стабильного ядра 3.1.6):

$ cd /usr/src/linux-git
$ su
# git archive --prefix=linux-3.1.6/ v3.1.6 | tar xvf - -C ../
...