2009-08-27 2 views
25

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

Есть ли способ создать ветку в git, а затем удалить из нее файлы таким образом, чтобы их невозможно было получить с помощью журнала?

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

ответ

29

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

Для получения дополнительной информации см. --depth вариант git clone.

+0

Я думаю, что это решение будет работать лучше для ситуации Бена. Легче управлять доступом на основе репозитория, чем на основе филиала. – Apreche

+4

'git clone --depth 1 [email protected]: project/projectname.git' - копировать и вставлять – YumYumYum

5

Использование filter-branch:

Предположим, что вы хотите удалить файл (содержащий конфиденциальную информацию или нарушение авторских прав) от всех фиксаций:

мерзавец фильтр-филиал --tree-фильтр «п.м. filename 'HEAD

+0

1.)' --index-filter' должен быть быстрее, чем '--tree-filter' для удаления файлов. 2.) если вы не хотите менять репозиторий, сначала создайте новую ветвь и перепишите ее. –

+0

Да, есть очень хорошее обсуждение различных методов документации, с которой я связан –

0

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

Другое дело - клонировать новый репозиторий и использовать инструменты удаления git для удаления конфиденциальных данных. Это создало бы отдельный репозиторий, который не мог бы взаимодействовать, кроме как с помощью патчей с первым, но имел бы всю историю.

5

мерзавец клон --depth 1 url_of_your_remote_repository

Ограничение неглубокого хранилища

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

  • Вы не смогли просмотреть всю историю, используя команду git log.

  • Его работоспособное решение, ваш партнер может внести некоторые изменения и сделать его «патчи» и отправить его вам, если вы хотите, чтобы ваш партнер менялся. Затем примените эти исправления в текущем рабочем дереве/любых ветвях, которые вы хотите применить.

    More