git извлекает изменения в определенный каталог

#git #github #git-pull

#git #github #git-pull

Вопрос:

Я готовлю сценарий автоматизации развертывания для развертывания проекта Drupal в системе Linux. На этапе подготовки ветка является «главной», и я хочу перенести все последние изменения ветки «Release» в определенный каталог, и я хочу повторно синхронизировать изменения в моем веб-каталоге. Я пытаюсь использовать приведенную ниже команду:

 git -C /var/tmp/staging_12.21 pull
 

Эта команда не переносит измененные файлы в папку /var/tmp/staging_12.21, а обновляет файл .git напрямую. Есть ли способ загружать / извлекать только последние измененные файлы в определенный каталог? Также staging_12.21 — это пустая папка.

Ответ №1:

Вы пытаетесь использовать Git как систему развертывания, а также систему контроля версий. Это не система развертывания, поэтому обычно это работает плохо. Он хорошо работает как система контроля версий.

Есть ли способ загружать / извлекать только последние измененные файлы…

Не с помощью Git, нет. Контроль версий Git работает с коммит, а не с файлами. git fetch Команда загружает новые коммиты. Команды git merge и git rebase включают новые коммиты в некоторый существующий репозиторий, а git pull команда — это удобная команда, которая сначала выполняется git fetch , затем выполняется git merge или git rebase (в зависимости от того, как вы ее инструктируете), чтобы объединить новые коммиты с вашей собственной работой. (Если вы не выполняете свою собственную работу, это можно использовать в качестве системы развертывания для бедных, хотя это определенно излишне и, вероятно, не очень хорошая идея.)

Также staging_12.21 — это пустая папка.

Пустая папка не особенно полезна, за исключением, возможно, как вместилище для такой операции, как «извлечь некоторые или все файлы из коммита». Помните, что коммит — это объект из двух частей, состоящий из:

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

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

Поскольку фиксация является моментальным снимком, в ней нет «изменений». (Упражнение: вот фотография Парижа 1920 года. Нажмите на него, посмотрите и скажите мне, что изменилось. Какую еще информацию мне нужно вам предоставить? Что я вообще подразумеваю под изменением в первую очередь? Я имею в виду с 1919 года?)

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