Добавление выборочных файлов из одной ветви в другую
При разработке с использованием 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.