Исключить определенные файлы при загрузке в определенный репозиторий Git - PullRequest
8 голосов
/ 19 марта 2010

Можно ли исключить определенные файлы (* .ai, * .psd) при отправке в определенные репозитории с помощью Git?

Мне нужна попытка использовать Git для управления версиями и развертывания на Heroku . Если я включу мои графические ресурсы в развертывание, размер слага будет больше, чем нужно. Однако мне нужно включить все файлы проекта в мой основной github репозиторий.

Ответы [ 3 ]

12 голосов
/ 20 марта 2010

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

4 голосов
/ 19 марта 2010

Вы можете сохранить вторую ветвь для развертывания в Heroku, которая не содержит ни одного из этих файлов, но все еще сливается с master. (Конечно, вам придется разработать систему для разрешения конфликтов слияния, возникающих при изменении файлов .ai и .psd в master).

Конкретная вещь, которую вы спрашиваете, невозможна, по той простой причине, что при нажатии вы передаете точные коммиты из одного репозитория в другой, и два коммита, которые не имеют одно и то же дерево, по определению являются разными коммитами.

Подсказка: в последних версиях 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», а копия, помещенная в дерево работы, будет иметь новое имя, а не имя-оригинала .)

Конечно, сценарий может стать более сложным, если ваша ситуация такова: вы можете искать только определенные расширения (добавить их в шаблон ограничения awk) или даже захватить весь вывод в сценарии perl, чтобы вы могли легко выполнить некоторые действия. более причудливая логика ...

3 голосов
/ 19 марта 2010

Нет прямого простого способа сделать это. Это, конечно, управляемо, но с большой болью (Git не был предназначен для этого).

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

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