Могу ли я сделать резервное копирование с git? Если нет, знаете ли вы инструмент для этого? - PullRequest
0 голосов
/ 11 января 2020

Мой вопрос может быть необычным, позвольте мне объяснить,

  • Я впервые git сделал версию очень большой папки (20 go), которую я положил на свой хост.
  • Я уменьшил размер этой папки (не полезные данные) и создал вторую версию.
  • Проблема в том, что git сохраняет в памяти первую версию, поэтому папка .git / остается очень тяжелый.
  • Мне больше не нужна первая версия.

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

Для меня проще было бы просто стереть мою папку .git / и создать новую, но все равно она остается очень тяжелой (от 20 go до 13 go) и мне понадобятся часы, чтобы сэкономить.

Так вот мой вопрос:

? Знаете ли вы, если мы можем сделать резервное копирование «Decmental» или «Syntheti c полная разница резервного копирования» с помощью git, и если нет, то знаете ли вы инструмент, с помощью которого это возможно?

Спасибо

PS: Я видел это решение на git:

  • git оформить заказ --orphan latest_branch
  • git add -A
  • git commit -am "commit message"
  • git ветвь -D master
  • git ветвь -m master
  • git pu sh - f origin master

Стирает историю журналов в репо git, но на самом деле не историю данных, поэтому это не решение.

Ответы [ 2 ]

1 голос
/ 11 января 2020

Git не выполняет «инкрементное резервное копирование». Это делает «совершает». Коммит, как правило, состоит из га sh (воспринимается как адрес), который позволяет вам, среди прочего,

  • предыдущий адрес фиксации (ха sh)
  • автор коммита
  • дерево во время коммита

Последнее, как правило, наиболее интересное, так как дерево эффективно описывает всю иерархию каталогов / файлов при использовании того же ха sh -> система контента ! (На самом деле, git был описан как VCS, построенный поверх файлово-адресуемой файловой системы. Далее, git экономит некоторое пространство (я полагаю), когда файлы в деревьях не различаются, потому что их адреса одинаковы, и поэтому требуется только один объект в базе данных git.)

Для вас все это означает

  1. Хватит думать о git как о программном обеспечении для резервного копирования; это программное обеспечение для контроля версий, и понимание хотя бы части базовой модели поможет вам в этом. @torek написал много SO ответов на этот счет, и есть несколько хороших разговоров.
  2. Удаление истории означает создание совершенно нового коммита, который указывает на коммит, отличный от предыдущего.

Я могу придумать несколько разных способов достижения (2). Первый - git rebase -i @~2 (при условии, что у вас есть только два коммита), а затем удалите первый, как в рецепте ребазирования. Это говорит git переписать историю, но пропустить первый коммит. Я ожидаю, что это потерпит неудачу, но я был бы готов ошибаться.

Другой альтернативой является git filter-branch, и есть сотни целых rnet страниц, которые охватывают, как использовать его для удаления определенных файлов из всей истории.

Впоследствии git gc должен помочь сэкономить некоторое пространство, но делать это только тогда, когда вы уверены, что все сработало.

0 голосов
/ 11 января 2020

Спасибо за ваши ответы. Я не нашел пути, поэтому я просто решил стереть и воссоздать свой репозиторий .git /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...