2012-03-14 4 views
2

Я использовал git некоторое время на проекте и его время для очистки.Смягчение последствий рефакторинга кода в git repo

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

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

Мысли, мнения и решения приветствуются! Спасибо.

ответ

2

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

(Если вы хотите изменить или «скворовать» предыдущие версии вместе, вы можете посмотреть на использование git-rebase, но изменение истории git часто приводит к катастрофическим последствиям - я не советую, и это, безусловно, не для слабый от сердца.)

2

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

Это говорит о том, что размер репо является проблемой, поэтому вы не хотите хранить эти большие файлы. Если это так, возможно, вы можете сделать tarball текущего рабочего каталога, сэкономить его где-нибудь, где размер файла меньше, и запустить filter-branch command для очистки этих больших файлов.

Честно говоря, я попытался бы найти способы справиться с большим размером репозитория. Хранение всего в git - это, безусловно, самый чистый путь.

1

Я бы не ожидал, что ваш репозиторий будет расти таким образом. Помните ...

Git tracks content not files

Если объем вашего содержание не расширяется чрезвычайно, то объем вашего хранилища не должны либо.

1

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

  1. Git хранит разница между файлами, а не фактические копии всех файлов
  2. под капотом, git будет собирать мусор и собирать репозитории вместе. Для обычного текста (например, кода программы) это приведет к существенной экономии пространства.

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

Вкратце, рефакторинг прочь, вам, вероятно, не нужно беспокоиться о дискового пространства. Я УВЕРЕН, что он не будет удваивать размер.

+1

Пункт 1 на самом деле не так - git хранит файлы, а не дельта. (Это сильно отличается от многих старых SCM, которые сохраняют дельтах, таких как оригинальные SCCS, или обратные дельта, такие как RCS или «чередующиеся» дельта, как позже SCCS.) Однако он также сохраняет свое содержимое в сжатой двоичной форме, поэтому если большой кусок кода тот же, что и в файлах fileA и fileB, хотя файлы fileA и fileB различны (и даже в разных ветвях и т. д.), сжатие очень помогает. – torek

+0

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

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