У меня есть проект, который я внедряю в Heroku . Дерево исходного кода включает в себя множество mp3-файлов (сайт будет для проекта записи, с которым я был активно связан).
Я хотел бы разместить исходный код для этого на GitHub , но GitHub имеет ограничение 300 МБ для их бесплатных учетных записей. Я не хочу использовать 50 МБ своего лимита на кучу mp3-файлов. Очевидно, я мог бы добавить их в .gitignore
файл, чтобы они не попали в мой репозиторий.
Тем не менее, я развернуть в Heroku с помощью git push heroku
. Файлы MP3 должны присутствовать в ветке, которую я отправляю в Heroku, чтобы они были развернуты.
В идеале, я бы хотел, чтобы .gitignore
mp3-файлы были в моей локальной ветке master, чтобы при отправке этого файла на GitHub mp3-файлы не включались. Тогда я бы оставил местный производственный филиал, в котором mp3 записаны, а не проигнорированы. Чтобы развернуть, я бы слил мастера с производством, а затем отправил производственный филиал в Heroku.
Я не могу заставить это работать правильно.
Вот пример того, что я пытаюсь сделать ...
$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored
На данный момент Foo.ignored игнорируется в моей основной ветке, но он все еще присутствует, поэтому мой проект может его использовать.
$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"
Теперь у меня есть ветка с этими файлами, как я хочу. Однако, когда я переключаюсь обратно в свою основную ветку, Foo.ignored больше нет.
Кто-нибудь получил какие-либо предложения для лучшего способа установить это?
Изменить: просто чтобы уточнить, я хочу, чтобы mp3-файлы присутствовали в обеих ветках, чтобы при работе сайта локально (с использованием любой ветви) сайт работал. Я просто хочу, чтобы файлы игнорировались в одной ветке, поэтому, когда я отправляю на GitHub, они также не выталкиваются. Обычно .gitignore хорошо работает для такого рода вещей (т.е. для сохранения локальной копии файла, который не включается в push-уведомление на удаленном компьютере), но когда я переключаюсь на ветку с отмеченными файлами, а затем возвращаюсь к ветка с файлами игнорируется, файлы исчезают.
Ответы:
Я написал сообщение в блоге о том, как эффективно использовать его
excludesfile
для разных веток, например, для публичного github и для развертывания heroku.Вот быстрый и грязный:
затем в файле .git / config добавьте эти строки:
Теперь все глобальное игнорирование находится в
info/exclude
файле, а ветвь - вinfo/exclude_from_public_viewing
Надеюсь, это поможет!
http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches
источник
git init
, ...), и версии Git, которую вы использовали?Важный совет : принятый ответ Cognition.Mind не работает (больше, в течение нескольких лет или, возможно, для ванильных версий git); смотрите комментарии. Действительный ответ и обходной путь можно найти здесь:
https://stackoverflow.com/a/29583813/2157640
Другой альтернативный обходной путь (работающий для моей конкретной проблемы, но требующий ручных операций хранения или реализации хука) был бы
git stash -u -a
. Это утомительно, когда различия велики.И, наконец, решение, с которым я сейчас работаю, заключается в том, чтобы разбудить мою виртуальную машину, в которой мы храним нашу среду разработки, и настроить ее
info/excludes
соответствующим образом для ветви, соответственно удалив поврежденные, незафиксированные файлы / папки.источник
Я бы настоятельно рекомендовал рассмотреть возможность размещения этих файлов MP3 на S3. Если они будут частью вашего толчка Heroku (и, следовательно, частью вашего слизняка Heroku), это значительно замедлит время запуска динамометра. Поскольку Heroku использует EC2, если файлы находятся на S3 и доступны только вашему приложению (если пользователи не имеют прямой связи с S3), вы даже не будете платить никакую плату за пропускную способность, только плату за хранение 50 МБ.
источник
Допустим, мы хотим игнорировать
build
папку из всех других веток, кромеproduction
ветки. Как мы хотим запихнутьbuild
папку в производство.1) Не включать
build
в .gitignore. Если вы сделаете это, он всегда будет игнорироваться для всех ветвей.2) Создайте файл
exclude_from_public_viewing
в./.git/info
папке (эта папка уже существует)touch ./.git/info/exclude_from_public_viewing
3) Внутри
exclude_from_public_viewing
напишите одну строку (так как вы пытаетесь игнорироватьbuild
все ветки).!build
4) Есть существующий файл
.git/info/exclude
. Нам нужно добавить следующую строку в нем.Мы хотим игнорировать
build
папку, но не добавили ее в .gitignore. Так как мерзавец будет знать, что игнорировать? Ответ: мы добавляем его вexclude
файл и условно передаем этот файлgit config
5) Теперь мы должны условно проигнорировать
build
папку дляproduction
ветки. для этого выполните следующее6) Существует существующий файл, который
./.git/config
мы должны добавить следующее:а)
excludesfile = +info/exclude
ниже[core]
б) Создать новый раздел в конце
./.git/config
какЕсть одно умное альтернативное решение. Допустим, вы хотите добавить
build/
папку вproduction
ветку и игнорировать ее во всех других ветках.1) Добавьте его в свой
gitignore
файл.2) В производственной ветке, при этом
git add
, принудительно добавляемbuild
папку:git add -f --all build/
источник
branch.<name>.excludesfile
в git нет поддержки (больше?), Только дляcore.excludesfile
, и мои собственные тесты, казалось, подтвердили это.git version 2.7.4 (Apple Git-66)
и я не использовалbranch.<name>.excludesfile
в своем решении.Вы пробовали, чтобы .gitignore был другим в вашей ветке?
Вы должны иметь возможность игнорировать то, что вы хотите, основываясь на ветке, в которой вы находитесь, если файлы не отслеживаются в этой ветке.
источник
1. Резюме
Я добавляю в мой
.travis.yml
:Где
misc
- любая папка, содержит другую.gitignore
.mv
Команда перемещения файла UNIX ; перезаписать, если файл уже существует.Когда Travis CI развертывает проект, Travis CI не будет настаивать на развертывании файлов и папок провайдера , которые игнорируются
misc/.gitignore
(не в оригинальных.gitignore
источниках).2. Ограничения
3. Актуальность
Этот ответ актуален для апреля 2018 года. В дальнейшем данные этого ответа могут устареть.
4. Демонстрация
мой настоящий проект .
Пример успешного развертывания .
4.1. задача
Я развертываю свой проект из ветки src в ветку dest того же хранилища.
Я хочу, чтобы этот файл
PaletteMira.suricate-profile
:Если я правильно понял автора вопроса, у него схожая задача.
4.2. ЦСИ
Источники ветки - СашаЯМЛ .
Часть
.travis.yml
:Часть
.gitignore
:Часть
misc/.gitignore
*.suricate-profile
не вmisc/.gitignore
.PaletteMira.suricate-profile
не существует в этой ветке удаленно, но существует локально.4,3. Dest
филиал назначения - SashaDevelop
Часть
.gitignore
:*.suricate-profile
не вmisc/.gitignore
.PaletteMira.suricate-profile
существует для этой ветки удаленно и локально.4.4. Действия по воспроизведению
Я включаю хранилище PaletteMira GitHub для Travis CI → Я устанавливаю переменную среды
$GITHUB_TOKEN
со значением - мой токен GitHub → Я делаю любые коммиты в мою ветку src.Если нет ошибок, я должен получить ожидаемое поведение .
источник
Можете ли вы совершить и оттолкнуть от Heroku?
Например, добавьте аудио, вставьте их в github и в heroku, удалите файлы из рабочей копии на Heroku. Удалите аудио из репозитория, но не с диска, затем верните это изменение в github.
источник
Github теперь поддерживает хранилище больших файлов, подробнее здесь https://git-lfs.github.com/
источник