Не позволяйте Git выдвигать секретные (но отслеживаемые) файлы

С помощью git Я отслеживаю совершенно секретный файл под названием top-secret.txt, Как я могу гарантировать, что этот файл никогда не покидает мою локальную систему при передаче на удаленный компьютер (но остается под контролем версий локально)?

пример

  • Допустим, у меня есть коммит, который изменяет секретный файл с именем top-secret.txt и другой файл под названием not-secret.txt,
  • При нажатии на эту фиксацию вносятся только изменения, внесенные в not-secret.txt должны быть переданы на пульт.
  • Изменение, внесенное в top-secret.txt останусь в моей локальной системе.

Дополнительная информация: отправка выполняется системой непрерывной интеграции, поэтому у меня есть возможность выполнить сценарии локально, прежде чем отправлять на удаленное устройство.

Мне нужно настроить подмодуль git для этого или есть более простое решение?

2 ответа

Решение

Ты не можешь Базовая объектная модель Git (что все является объектом одного из четырех типов: commit, tree, annotated-tag или "blob" - то есть, файл) запрещает различать "файл, который я вижу, но вы не можете" и "файл" все могут видеть ". Любой, у кого есть копия репозитория, может видеть каждый объект в репозитории.

Поэтому существует только два способа сохранить файл в секрете:

  • не включайте его в хранилище, во-первых, или
  • зашифровать это.

Метод подмодуля сводится к выполнению первого из них, а также дает подсказку, что чего-то не хватает (не то же самое, что "там, но зашифровано").

Я хотел бы создать подпапку для хранения вашего секретного файла и создать локальное Git-репо в этом каталоге, т.е. git init mysecretsubdir, Затем добавьте mysecretsubdir/ на ваш .gitignore, чтобы он никогда не связывался с основным хранилищем. Это позволяет вам сохранять историю версий вашего секретного файла, не делясь им с другими.

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

Другие вопросы по тегам