2015-01-01 3 views
2

Я очистил историю репо больших файлов, используя использованный The BFG и выполнив описанные действия. Поэтому у меня теперь есть чистое репо, готовое к тому, чтобы его отбросили обратно в GitHub.Замена Prod Repo после перезаписи git-истории?

Производственный каталог является клоном этого репо.

Поскольку HEAD защищен, значит ли это, что в принципе, после нажатия на GitHub, я смогу вытащить существующий клон prod и получить «Уже обновленный». сообщение, и тогда я могу при необходимости, я также мог бы полностью оттолкнуться от этого prod repo обратно в GitHub?

Или у меня возникнут проблемы, если я сделаю горячие модификации производства, чтобы подтолкнуть к репо? (Это очень древний проект с большим количеством плохих практик, приготовленных в У меня есть разработчики без мерзавца навыка работы в проде непосредственно.).

+0

Если вы переписали историю, вам понадобится сделать силовой толчок. Но я не совсем понимаю, что вы подразумеваете под «вытаскиванием в этот каталог prod ничего не сделаете, и я могу прямо туда отступить?».Зачем вам нужно отойти от вашей производственной проверки? (И почему это имеет какое-либо отношение к вашему вопросу?) –

+0

Уточненный вопрос. Я верю, что голое репо, которое я возвращаю в GitHub, заменяет все рефери (таким образом, сила нажимает?). Но тогда у меня есть существующий оригинальный каталог/репо-клон в производстве, который я буду толкать и тянуть туда и обратно. Используя BFG, я переписал историю в совершенно другом месте, не связанном с оригинальным prod repo. Поэтому я хочу быть уверенным, что не увижу, что все «изменено, но не обновлено». – iJames

+0

Ну, вы не сможете обновить свою прод-чек, так как это принципиально другая история. Вам нужно будет создать совершенно новый заказ. –

ответ

3

Ok, чтобы понять ваши настройки, есть 3 копии вашего хранилища:

  1. Ваш локальная копия, убирали с BFG
  2. копии на GitHub
  3. производство копирования, который я думаю, сидит на живом сервере где-

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

BFG does protect the 'contents' (в частности, файловое дерево) вашего сообщения HEAD, но это не означает историю этой фиксации. Хотя он гарантирует файлы в том, что фиксация не изменилась, BFG имеет, чтобы изменить историю, чтобы сделать это. Поскольку Git осторожен, чтобы рассматривать историю как (обычно) неизменяемую, вы не можете просто изменить эти изменения в свою . копия - отличительная история будет замечена Git, а затем отклонена. Весь мусор, который вы пытались избавиться, также будет сохранен, и есть риск, что вы вернете его обратно в GitHub, если вы не будете осторожны.

Вместо выборку изменений, говоря Git явно заставить каждую местную историю филиальной к новой, очищенной, версии:

$ git fetch origin *:* -f --update-head-ok 

(--update-head-ok флага является, чтобы избежать Refusing to fetch into current branch ошибок)

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

+0

Получение проблем: * Игнорирование смешного ref 'HEAD' локально, отказ от вхождения в текущую ветку refs/heads/master не-голого репозитория. Это проблема с выпуском git? git версия 1.7.1 – iJames

+0

Пробовал с 2.2, без кубиков. Получил ли git источник происхождения -f (no *: *), который сработал, но попытка отталкивания привела к тому, что старый рывок все еще находился в репо. – iJames

+0

@ijames обновленный ответ, чтобы добавить флаг '--update-head-ok' - спасибо за указание проблемы! –

Смежные вопросы