#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 для сравнения развернутого снимка с каким-либо другим снимком. Это даст вам информацию, которую вы ищете. Вы можете использовать это для создания списка измененных файлов, а затем извлечь их из моментального снимка, который вы хотите развернуть. Обратите внимание, что вам нужно знать, какой коммит развернут в данный момент, и то, что развернуто, должно соответствовать этому коммиту. Может быть проще просто извлечь весь коммит и создать из него совершенно новое развертывание.