Не позволяйте 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 не предназначен для того, чтобы делать то, что вы просите. Еще одна вещь, которую вы можете сделать, - это создать фильтр, который автоматически шифрует ваш файл, когда он входит в индекс, и дешифрует его, когда он входит в ваш рабочий каталог.