Spring и GitHub: скрыть конфиденциальные данные

У меня есть репозиторий на GitHub, который я хотел бы опубликовать, чтобы рекрутеры могли его просматривать. Этот репозиторий, тем не менее, содержит мой SMTP и URI MongoDB, которые не должны использоваться совместно с другими. Эта информация находится в моем файле application.properties.

Каков самый простой способ скрыть эти конфиденциальные данные, а также убедиться, что никто не сможет просмотреть старые коммиты и посмотреть, как они были до того, как их скрыли?

Я видел несколько способов в Интернете, но все они выглядят довольно сложными...

Спасибо за ваш опыт и время


person Community    schedule 13.11.2020    source источник
comment
Я могу написать это как полноценный ответ, когда у меня будет время позже, но, похоже, это именно то, что вы запрашиваете: stackoverflow.com/a/19873725/1108305   -  person M. Justin    schedule 14.11.2020


Ответы (4)


Создайте файл .gitignore в корне вашего проекта и внутри перечислите все файлы, которые вы не хотите, чтобы git имел к нему доступ при отправке в GitHUb, например:

/public/packs
/node_modules/
.pnp.js

/ (косая черта) используется для папок и . (точка) используется для файлов

Ниже следует изображение расположения файла .gitignore.

введите здесь описание изображения

person R_D    schedule 13.11.2020
comment
Привет, Р_Д. Кажется хорошей идеей, но что, если в файле application.properties есть важные настройки, которые рекрутер должен иметь возможность просмотреть? - person ; 14.11.2020
comment
Если push представляет собой полную историю коммитов git (что, похоже, хочет запрашивающий), я полагаю, что файл все равно будет виден при проверке старых коммитов. Это просто новейший коммит, в котором его не будет. - person M. Justin; 14.11.2020
comment
Есть два способа: 1) Вы разделяете их: то, что завербованные могут видеть, и одно с конфиденциальными данными, и вы игнорируете его. 2) Вы можете заменить свою секретную информацию на «ВАШ СЕКРЕТ». Как заполнитель. - person R_D; 14.11.2020
comment
После того, как вы отправили данные, вам нужно удалить репо и начать заново выполнять описанные выше параметры. - person R_D; 14.11.2020

Если цель состоит только в найме, будет ли приемлемо иметь вторую копию для найма, оставив исходную копию в покое?

Хотя, безусловно, есть более идиоматические способы достижения этого с помощью git, простым решением с минимальными знаниями git или передовыми методами будет:

  1. Создайте новый пустой проект git на GitHub.
  2. Клонировать новый проект локально
  3. Скопируйте файлы (не .git) из существующего проекта в новый проект (используя либо консоль, либо оконный пользовательский интерфейс вашей ОС)
  4. Удалите или отредактируйте оскорбительные записи из нового проекта.
  5. Зафиксируйте изменения как один коммит
  6. Отправьте новый проект обратно на GitHub
person M. Justin    schedule 13.11.2020

Используйте переменные среды, чтобы скрыть ваши конфиденциальные данные. Нравиться

spring.data.mongodb.host=${MONGO_DB_HOST}
spring.mail.host=${MAIL_HOST}

Установите значения в вашей среде разработки.
Я понятия не имею, как скрыть ваши старые коммиты.

person Shawrup    schedule 14.11.2020

Сам я им не пользовался, но BFG Repo-Cleaner с открытым исходным кодом выглядит так: это может удовлетворить ваши требования простоты, сохраняя при этом диаграмму активности для просмотра рецензентами. Это можно сделать в общедоступной копии репозитория, если вы хотите сохранить свою личную рабочую копию, сохраняя при этом возможность просмотра истории активности.

Следуя инструкциям по использованию инструмента, вы сможете сделать следующее (при условии, вы хотите, чтобы эти изменения были в новой копии репо):

Первый шаг — продублировать репозиторий на GitHub, следуя инструкции в документации GitHub.

Для этого сначала создать новый репозиторий.

Затем зеркалируйте репозиторий, следуя инструкциям GitHub:

  1. Откройте Терминал.
  2. Создайте голый клон репозитория.
$ git clone --bare https://github.com/exampleuser/old-repository.git
  1. Зеркальная отправка в новый репозиторий.
$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git
  1. Удалите созданный ранее временный локальный репозиторий.
$ cd ..
$ rm -rf old-repository.git

Теперь, когда у вас есть дубликат репозитория, вы можете запустить BFG Repo-Cleaner, чтобы заменить все экземпляры текста, которые вы хотите скрыть, на ***REMOVED***.

$ java -jar bfg.jar --replace-text replacements.txt  my-repo.git

Файл replacements.txt будет содержать SMTP, MongoDB URI и любой другой текст, который вы хотите скрыть.

mongodb://my-username:[email protected]:27017,host2.example.com:27017/my-database
[email protected]

Обратите внимание, что это не обновляет последнюю фиксацию в ветке master/HEAD, поэтому ее нужно будет изменить вручную, а затем зафиксировать. Этого можно добиться либо с помощью окончательной фиксации с параметром --amend, либо путем создания новой фиксации перед запуском BFG Repo-Cleaner с измененными вручную файлами.

$ git commit --amend

Теперь, когда изменения внесены, их можно отправить на GitHub.

$ git push
person M. Justin    schedule 14.11.2020
comment
Привет, Джастинг. Итак, я попробовал это, и хотя это выглядело так, как будто это сработало, и что bfg внес изменения в файлы application.properties, конфиденциальные данные все еще там. Я сообщу вам, если мне удастся выяснить, почему. Ps: я думаю, что записи в файлах replaces.txt должны иметь другой разделитель, потому что BFG сообщил мне, что не может найти текст для изменения, но не жаловался, когда я использовал одну запись за раз в файле. замены.txt - person ; 14.11.2020