мерзавец ветка без истории - PullRequest
25 голосов
/ 28 августа 2009

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

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

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

Ответы [ 4 ]

29 голосов
/ 28 августа 2009

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

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

5 голосов
/ 07 февраля 2013

git clone --depth 1 url_of_your_remote_repository

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

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

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

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

    Подробнее

5 голосов
/ 28 августа 2009

Использование фильтр-ветвь :

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

git filter-branch --tree-filter 'rm filename' HEAD

0 голосов
/ 28 августа 2009

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

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

...