Как справиться с конфликтами слияния в файлах учетных данных rails ENCRYPTED

С зашифрованными учетными данными rails 6 (или 5.2) у меня возникают трудности с управлением и разрешением конфликтов слияния в файле credentials.yml.enc. Как указано в документации, предполагается, что зашифрованные учетные данные могут быть добавлены в систему управления версиями (https://guides.rubyonrails.org/security.html#custom-credentials)

Например. branch_a добавляет учетные данные для service a и объединяется с мастером branch_b добавляет учетные данные для service b и при перебазировании конфликт в файле credentials.yml.enc выглядит примерно так:

<<<<<<< HEAD
sahdkajshdkajhsdkjahsdkjahsdkajhsdkjahsdkjahdskjahsdjkahsdencryptedstring-a09dpjmcas==
=======
laskdjalksjdlakjsdlaksjdlakjsdlaksjdlakjsdlajsdlkajsdlkjasdljalsdajsdencryptedstringrere=
>>>>>>> branch_b

Я могу просматривать незашифрованные credentials.yml.enc в каждой ветке и разрешать конфликты вручную, но есть ли лучший способ управлять учетными данными в целом, чтобы избежать этих конфликтов учетных данных.


person cash22    schedule 21.11.2019    source источник


Ответы (3)


Это возможно. Из использования rails credentials:

=== Set up Git to Diff Credentials

Rails provides `rails credentials:diff --enroll` to instruct Git to call `rails credentials:diff`
when `git diff` is run on a credentials file.

Running the command enrolls the project such that all credentials files use the
"rails_credentials" diff driver in .gitattributes.

Additionally since Git requires the driver itself to be set up in a config file
that isn't tracked Rails automatically ensures it's configured when running
`credentials:edit`.

Otherwise each co-worker would have to run enable manually, including on each new
repo clone.
person Escapeit    schedule 15.02.2021
comment
Ответ @ekampp был правильным ответом во время вопроса. С тех пор эта функция была добавлена. Ссылка на документацию: github.com/rails/ рельсы/блоб/главная/рельсы/библиотека/рельсы/команды/ - person cash22; 23.02.2021
comment
И PR github.com/rails/rails/pull/36777 - person cash22; 23.02.2021

Я не верю, что есть лучший способ, нет.

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

Когда вы выполняете слияние, вы должны разрешить все конфликты в исходном файле, а затем повторно запустить команду, которая создает зашифрованный файл, а затем завершить слияние.

person ekampp    schedule 26.11.2019
comment
Спасибо за этот ответ. По этой причине я также решил использовать другую систему для непроизводственных учетных данных. Еще не реализовано, но я намерен использовать файл учетных данных только для управления производством, и, конечно, только некоторые члены команды имеют доступ. Это также устранит проблему конфликтов - person cash22; 12.12.2019

Обычно рекомендуется игнорировать учетные данные в системе контроля версий, т. е. .gitignore, и настраивать их с помощью переменной среды.

person Justin White    schedule 21.11.2019
comment
Весь смысл зашифрованных учетных данных в Rails 6 заключается в том, что они могут находиться в системе контроля версий. guides.rubyonrails.org/security.html#custom-credentials - person cash22; 22.11.2019