Действительно ли возможно исключить определенные файлы (*.ai, *.psd) при продвижении в определенные репозитории с Мерзавцем?
Моя потребность прибывает из попытки использовать Мерзавца и для управления версиями и для развертывания на Heroku. Если я включаю свои графические активы в развертывание, размер краткого заголовка больше, чем желаемый. Однако я действительно должен включать все файлы проекта в свой основной репозиторий GitHub.
Самый простой способ решить вашу актуальную проблему - создать файл .slugignore
в корне репозитория, в котором перечислены файлы, которые не должны Не упаковывается в пулю.
Вы можете поддерживать вторую ветку для развертывания на Heroku, которая не содержит ни одного из этих файлов, но по-прежнему сливается с master. (Конечно, вам придется разработать систему разрешения конфликтов слияния, возникающих при изменении файлов .ai и .psd в master).
То, о чём вы спрашиваете, невозможно по той простой причине, что при push вы переносите точные коммиты из одного репозитория в другой, а два коммита, не имеющие одинакового дерева, по определению являются разными коммитами.
Совет: Последние версии git имеют опцию --porcelain
для git status
, которая даст легко разбираемую информацию типа "M file1" "DU file2" (изменённый и не изменённый/удалённый нами, соответственно). Вы можете написать обёртку git-merge для вашей ветки развёртывания, которая попытается выполнить слияние и автоматически очистит ожидаемые конфликты:
git checkout deploy
if ! git merge master; then
git rm $(git status --porcelain | awk '/^DU/ {print $NF}')
fi
(Причина, по которой я напечатал $NF
вместо $2
, в том, что если файл будет переименован, это будет выглядеть как "DU original_name -> new_name", и копия, помещённая в рабочее дерево, будет new_name, а не original_name. )
Конечно, скрипт можно усложнить, если у вас такая ситуация - вы можете искать только определенные расширения (добавить их в ограничивающий awk-шаблон), или даже перехватывать весь вывод в perl-скрипт, чтобы можно было легко сделать более причудливую логику...
Нет прямого простого способа сделать это. Это, конечно, управляемо, но с большой болью (git не предназначен для этого).
Вероятно, было бы проще, если бы вы попросили Heroku предоставить способ исключения некоторых файлов из развертывания.