Эквивалентность Perforce "p4 sync -p ... @ Changelist" в Git - PullRequest
1 голос
/ 16 февраля 2011

В Perforce вы можете создать клиентскую спецификацию (рабочую область) и использовать опцию «-p» при синхронизации кода Perforce. Таким образом, он не касается таблицы файлов на сервере Perforce и значительно ускоряет синхронизацию. Это в основном копирование и вставка файлов с сервера Perforce.

Мы экспериментируем с такой операцией на стороне Git, но не можем найти точную копию этой команды Perforce.

Есть ли эквивалентность этому?

Я знаю, git reset --hard <commit> будет работать, но это если вы уже использовали git clone и получили локальную копию файлов. В наших случаях предположим, что мы никогда не запускаем git clone на локальной машине.

Я спрашиваю в этой ситуации, потому что я делаю сборку релиза SCM, и исходный код из Git должен синхронизироваться с машиной сборки на определенном SHA, но в прошлом git clone не запускался .

Спасибо.

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Вы можете настроить git-daemon для разрешения службы «upload-archive» (см. Справочную страницу git-daemon), и это позволяет клиенту просто запрашивать архив определенного снимка из репозитория git, используя git archive --remote, вместо того, чтобы загружать всю базу данных.

например. это загрузит снимок некоторого проекта под названием "cmstool" в версии 1.0.0 с удаленного сервера:

git archive --format=tar \
            --prefix=cmstool-1.0.0/ \
            --remote=git://git/cmstool.git v1.0.0 | tar xf -
0 голосов
/ 16 февраля 2011

git предназначен не только для получения определенных версий файлов, но и для истории.Действительно ли проблема с выполнением git clone сначала и git fetch, когда должны произойти обновления?Обновления используют diff, поэтому могут быть намного быстрее, чем копировать все файлы, а репозиторий git часто не намного больше текущего состояния.

  1. git clone --depth 1 получит только недавнюю историю, но все равно выберет все ветви.Это также не очень полезный клон, так как многие обычные операции не будут работать.Это может не быть проблемой в вашем сценарии использования.
  2. Вы можете настроить эфемерную ветвь только с одним коммитом, который имеет состояние, которое вы хотите скопировать.Затем клиент git init; git remote add -t <branch> origin <url>; git fetch origin/branch; git checkout origin/branch
  3. git archive может создать снимок, который можно загрузить в виде отдельного файла, а затем извлечь.
...