Как вы «переписываетесь» в Git - PullRequest
1 голос
/ 06 июня 2011

У меня есть случаи, когда мне нужно 'copyout' старая версия (commit) моего кода для параллельного сравнения с моим текущим кодом.

Действие должно быть не просто переключением между ветвями, что не обеспечивает одновременный доступ.

Каковы хорошие способы сделать copyout старого коммита из Git, чтобы я получил копию этой старой версии вне репо?

Просто чтобы прояснить: это не сравнение стилей проверки кода, а сравнение работающего программного обеспечения со всеми мигающими индикаторами, воспроизводимыми видео, взаимодействиями с пользователем и т. Д. - это указывает на необходимость полной копии.

Ответы [ 4 ]

5 голосов
/ 06 июня 2011

В дистрибутив git входит прилагаемый скрипт под названием git-new-workdir.Вы можете использовать его следующим образом:

git-new-workdir project-dir new-workdir branch

, где project-dir - это имя каталога, в котором находится ваше хранилище .git.Этот сценарий позволяет избежать клонирования всего хранилища , настроив несколько символических ссылок.

4 голосов
/ 06 июня 2011

Я не уверен, что именно вы хотите сделать с этим файлом, но вот несколько вещей, которые могут вам помочь.

  • Если вы просто хотите сравнить файлы по веткам, вы можете сделать git diff branch1:file branch2:file, чтобы увидеть их различия.
  • Если вам нужна физическая копия файла, находящегося в другой ветке, вы можете сделать git cat-file -p otherbranch:file > tmp, чтобы получить ее в tmp. Тогда делай с ней что хочешь.
  • Если вы хотите различать коммиты, вы можете просто сказать git diff treeish1 treeish2, чтобы увидеть различия (где treeish - это хеш, ветвь, тег и т. Д.).
  • Если вам нужна физическая копия хранилища во время фиксации полностью, чтобы вы могли взглянуть, вы можете сделать git archive --format=tar treeish path | (mkdir /tmp/foo && cd /tmp/foo && tar xvf -), чтобы получить «экспортированную» копию в / tmp / foo. Это не будет копия с контролем версий. Просто снимок файлов при коммите, на который указывает treeish.
  • Существует также очевидный способ, упомянутый Beaks , который состоит в том, чтобы сделать два клона и использовать их.
3 голосов
/ 06 июня 2011

Филипп, Git не предоставляет хорошего способа сделать это, я могу только предложить вам сделать следующее;предполагая, что "directory-a" - ваша рабочая копия.

cd directory-a
git status # make sure it's clean
cd ../
git clone directory-a directory-b

Тогда у вас будет две копии репозитория (это рекомендуемый способ Git), если простой diff не подойдет.

Затем вы можете откатить, объединить, разветвить и связать с обоими индивидуально без риска или ущерба для другого.directory-b будет содержать новую рабочую копию, взятую из статуса directory-a, и не будет знать о origin, так что на самом деле это просто клон directory-a со всей историей до этого момента.

Интересный факт: Некоторые SCM не поддерживают ветвление, это то, как вы выполняете ветвление в этих системах.

0 голосов
/ 06 июня 2011

Вы всегда можете клонировать хранилище в другое место, а затем откатить эту копию хранилища.

Вы также можете удалить файлы, которые делают его хранилищем, если вы действительно хотите отключить его - но я сомневаюсь, что вам нужно сделать этот шаг.

...