Подтвердить что ты не робот

Git: есть разные файлы .gitignore для каждого пульта

У меня есть удаленное репо, в котором я хочу зафиксировать определенные файлы (скомпилированные файлы для их развертывания на платформе облачных вычислений), но я не хочу их развертывать в github...

Есть ли способ иметь разные файлы .gitignore, по одному для каждого пульта?

4b9b3361

Ответ 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 нажмите в этих подпапках на основе входящих аргументов.