Добавление выборочных файлов из одной ветви в другую

При разработке с использованием Javascript в качестве практики мы загружаем минимизированный JS на сервер, и поэтому я хочу оставить только минимизированный JS в моей основной ветке, в то время как я делаю изменения в своей локальной (частной) ветке. Есть ли простой способ объединить только уменьшенный JS из локального филиала в Master?

Коммиты Cherry Pick не будут работать, так как я не хочу объединять все файлы из моего частного коммита. Этот метод предлагает собирать определенные файлы из одной ветви для фиксации в другой, мне было интересно, есть ли параметр / альтернативный способ автоматизировать это, то есть объединение требует только минимизированные файлы js (*.min.js)?

1 ответ

Решение

Похоже, у вас есть удаленное хранилище в корне документа, к которому вы обращаетесь и которое используется в качестве механизма развертывания на вашем действующем сайте. Я бы сказал, наличие git-репо в корне документа - не лучший способ для развертывания. (Любой может клонировать весь репозиторий, включая всю историю коммитов и потенциально неловкий неопубликованный код.) Может быть, вы настроили его по-другому, но я сделаю это предположение, основываясь на том, что вы написали.

Если вместо этого вы используете хук post-receive для извлечения master в корневой каталог вашего документа, но если ваш git-репозиторий живет где-то еще, вы можете без страха хранить минимизированный и не минимизированный JS-источник.

Переместите git-репо из корневого каталога документов на промежуточный сервер.

В .git/hooks/post-receive на вашем промежуточном веб-сервере:

#!/bin/sh
GIT_WORK_TREE=/path/to/your/docroot git archive master --format tar | tar -x "*.min.js"

Это приведет к git экспортировать чистую копию master перейдите в каталог по вашему выбору. Это будет сделано по трубопроводу tar, который вы можете использовать, чтобы отфильтровать, какие именно файлы вы хотите, а какие нет. post-receive это сценарий оболочки, так что вы действительно можете выйти из строя здесь, добавив последующие строки, чтобы выполнить любую домашнюю работу после развертывания.

Итак, вышесказанное - то, что я бы порекомендовал вам сделать. Если вы все еще хотите пойти дальше и сохранить только подмножество файлов в своей основной ветке, вы можете использовать метод, с которым вы связаны, в сценарии оболочки.

Предполагая, что ваше местное название филиала localи все, что вы хотите "развернуть" на master уже совершено, сделать deploy.sh (и добавьте его в .gitignore если ты хочешь):

#!/bin/sh
git checkout master
git diff-tree --name-only -r local | grep ".min.js$" > temp_file_list.txt
git checkout local `sed 'N;s/\n/ /' temp_file_list.txt`
git commit -m "Selective 'merge' of minified js from my local branch"

Тогда ты просто бежишь deploy.sh всякий раз, когда вы хотите обновить мастер с измененными файлами.min.js. Если вы используете Windows и храните свои локальные файлы в формате DOS, вы должны поставить \r\n вместо просто \n в sed Команда выше - и установить git-инструменты из командной строки на основе bash.

Другие вопросы по тегам