Как навсегда удалить большой файл для всей команды - PullRequest
7 голосов
/ 14 марта 2011

Кто-то в моей команде отправил большой файл на git-сервер, и у всех в команде теперь есть клон проекта с большим файлом.

Я следовал руководству в http://help.github.com/removing-sensitive-data/ иэто работает в моем локальном исходном дереве так же как на удаленном сервере.Но как только другой человек получает новые данные с удаленного сервера, он легко вводит большой файл, отправляя новые коммиты на сервер.

Обычно один из членов команды делает следующее, чтобы поделиться своим коммитом с другими:

git fetch origin
git rebase origin/master
git push origin

На шаге «rebase» старый большой файл повторно вводится в его локальные коммиты.Конечно, прямой способ - потребовать от всех в команде повторного клонирования проекта после того, как я удалю большой файл, но не все будут рады сделать это.Я нахожу любой другой способ, кроме повторного клонирования всего проекта для всех.

Есть предложения?Спасибо.

Ответы [ 3 ]

3 голосов
/ 14 марта 2011

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

Альтернативой является выполнение git rebase --preserve-merges -i, где вы редактируете оскорбительный коммит.

0 голосов
/ 15 марта 2011

Книга Progit содержит подробный пример, использующий git filter-branch (не дерево фильтра, как упоминалось в других постах).Глава здесь

' Удаление объектов ' http://progit.org/book/ch9-7.html

0 голосов
/ 14 марта 2011

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

...