Git: есть разные файлы .gitignore для каждого пульта
У меня есть удаленное репо, в котором я хочу зафиксировать определенные файлы (скомпилированные файлы для их развертывания на платформе облачных вычислений), но я не хочу их развертывать в github...
Есть ли способ иметь разные файлы .gitignore, по одному для каждого пульта?
Ответы
Ответ 1
Это не имеет смысла в модели git. Commits содержит множество файлов; все файлы .gitignore сообщают, что пользовательский интерфейс не будет автоматически добавлять файлы, соответствующие определенным шаблонам. То, что это фактически означает, - это иметь параллельные наборы коммитов, которые почти одинаковы, но содержат только подмножество файлов.
Можно было бы сделать это с помощью схемы ветвления, где у вас есть ветвь "развертывания", которая отделяется от основного и одинакова, но содержит дополнительные скомпилированные файлы. Это может быть даже автоматизировано с помощью git hooks для автоматической компиляции файлов и добавления их в репо. Я предполагаю такую структуру:
master: A ---> B ---> C ---> D
\ \ \ \
\ \ \ \
deployment: -> A' -> B' -> C' -> D'
то есть. каждый раз, когда определенный сервер получает новую фиксацию на master, он создает проект, добавляет встроенные файлы к новому фиксации из D и фиксирует это для ветки развертывания, которая затем не должна быть нажата на github.
Ответ 2
Я выясню, как это сделать.
В моем случае мне нужно было синхронизировать проект с heroku и github (как публичное репо).
Но некоторые файлы с личной информацией не представляли интерес для совместного использования в публичном репозитории
Обычно простой проект имеет следующую структуру папок
Project folder (remote heroku)
- .git
- .gitignore
- (folders and files)
То, что я сделал, это добавить еще один уровень, и в нем создать еще один репозиторий git, с gitignore, который опускал бы некоторые файлы из моего проекта.
Project public (remote github)
- .git
- .gitignore
- Project folder (remote heroku)
- .git
- .gitignore
- (folders and files)
Таким образом, это не репозиторий git с двумя удаленными репозиториями с разными gitignores.
Существует два разных репозитория.
В самой внутренней части я исключаю только файлы, сгенерированные IDE, и некоторые файлы, созданные во время выполнения.
На самом внешнем уровне я исключаю все файлы, которые нельзя публиковать.
Ответ 3
Другим вариантом является git подмодули.
Это может быть полезно, если, например, вы хотите, чтобы ваш код и документация находились в двух разных репозиториях с независимым контролем доступа и т.д. Таким образом, у вас было бы 3 общих РЕПО, репозитория подмодуля для документов, другое для кода, и "master" (не подмодуль git), содержащий оба (для загрузки pypi, возможно). Это достойный способ организовать проект учебника CS. Оба проекта могут успешно запускаться независимо друг от друга и синхронизировать их с основными выпусками, руководствуясь ведущим разработчиком репо.
Ответ 4
Автоматическое решение для методов, упомянутых здесь:
- Настройте корень .git, чтобы игнорировать вложенную папку (ы), которую вы хотите передать по-другому.
- Инициализировать новый git в подпапке (-ах) и назначить удаленную конфигурацию
- Измените корневую папку .git/hooks/pre-push файл для exec git нажмите в этих подпапках на основе входящих аргументов.