Git: Как игнорировать / указывать файлы для * checkout * - PullRequest
13 голосов
/ 31 марта 2011

Если я не хочу, чтобы .html-файлы отслеживались, я могу добавить шаблон в .gitignore, и они будут игнорироваться.Я хотел бы знать, как я могу сделать обратное - на кассе, как я могу попросить git извлекать только определенные типы файлов или не извлекать определенные типы файлов?

Например, если я не сделалмне нужны html файлы, которые я мог бы написать:

git checkout HEAD . --no .html

, если таковой существует :) Есть ли уже встроенный способ, или мне просто нужно запустить что-то еще после оформления заказа?

Любая помощьочень ценится.

Ответы [ 4 ]

16 голосов
/ 31 марта 2011

Если вы хотите упаковать файлы для развертывания, вам, вероятно, не нужно - или вы хотите - само хранилище. Это именно то, для чего git archive. Несколько примеров из справочной страницы (по ссылке):

git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

Создайте архив tar, содержащий содержимое последнего коммита в текущей ветви, и извлеките его в каталог / var / tmp / junk.

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip > git-1.4.0.tar.gz

Создание сжатого архива для выпуска v1.4.0.

Вы должны иметь возможность заставить его делать именно то, что вы хотите, с помощью атрибута export-ignore:

export-ignore

Файлы и каталоги с атрибутом export-ignore не будут добавлены в архивные файлы. Подробности смотрите в gitattributes (5) .

Например, чтобы исключить каталог private и файлы mine.txt и secret.c, вы можете поместить в файл .gitattributes:

private/     export-ignore
secret.c     export-ignore

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

8 голосов
/ 29 июня 2017

Git's Sparse-Checkout

Если вы хотите извлечь только часть своего хранилища, вы можете использовать опцию git sparse-checkout, которая имеет мощные правила включения / исключения.

Следующий вопрос StackOverflow содержит несколько полезных инструкций:
GIT оформить заказ, кроме одной папки

Но как итог:

  1. Включить опцию sparseCheckout:

    git config core.sparseCheckout true
    
  2. Создайте файл с именем .git/info/sparse-checkout, содержащий:

    /*
    !node_modules
    

    , что фактически означает включение всего, кроме каталога node_modules при извлечении хранилища в рабочий каталог.

1 голос
/ 17 августа 2011

Итак, я хотел отправить свой код без тестовых файлов на рабочий сервер.

Самым простым способом для меня было просто удалить все тестовые файлы с: rsync --exclude 'tests' после распаковки архива.

0 голосов
/ 31 марта 2011

Вы не можете получить часть отдельного коммита в Git.Вы либо извлекаете коммит, либо нет - нет промежуточного шага.

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

Вы можете выбрать, какие коммиты вы хотите с git cherry-pick, но я подозреваю, что это не поможетв этом случае вам очень нравится.

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

(Если вы не возражаете переписать историю своего репозитория, вы можете выбрать коммит add, затем выполните git reset --mixed HEAD^1 и создавайте новые коммиты, которые пропускают файлы, которые вам не нужны ... но не делайте этого, если вы действительно не знаете, что делаете. Лучше просто удалить файлы и нажать новый коммит, который записывает удаление.)

РЕДАКТИРОВАТЬ: только что увидел ваш комментарий о желании конкретных частей для развертывания.В этом случае я бы предложил создать ветку развертывания, которая удаляет ненужные файлы.Вы можете перебазировать эту ветку с основной линии, когда это необходимо, и она каждый раз должна волшебным образом удалять файлы для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...