удалить данные из синхронизированного хранилища SVN - PullRequest
1 голос
/ 05 октября 2009

у нас есть довольно огромный svn-репозиторий, к которому я обращаюсь, используя git. до сих пор все работало нормально. теперь кто-то случайно добавил несколько больших кусков двоичных данных в репозиторий SVN. (сотни МБ!) конечно git также засасывает эти куски (используя git-svn).

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

Ответы [ 3 ]

1 голос
/ 06 октября 2009

Я полагаю, что перезапись истории git с использованием git filter-branch --tree-filter "rm -rf unwanted_dir" не помешает синхронизации - насколько я могу судить, git-svn зависит только от git-svn-id в сообщениях фиксации, которые должны оставаться такими же. Я не пробовал, хотя. ☺

0 голосов
/ 25 апреля 2011

почти забыл об этом ... извините.

как оказалось, нет простого решения проблемы, которую я описал. Я экспериментировал с несколькими вариантами, но у каждого есть недостатки ... но, тем не менее, может быть полезно, если у кого-то еще есть такая же проблема:

удалить ненужный файл / папку из истории git

git filter-branch --tree-filter "[ -f hugefile.bin ] && rm hugefile.bin" -f

Плюсы:

  • эффективно удаляет файл из вашего хранилища

Минусы:

  • вам придется очистить свой репозиторий (избавьтесь от старых коммитов, так как они все еще находятся в git-репо). либо с git gc --prune=now или просто клонировать ваш репозиторий (по умолчанию не будет клонировать вашу удаленную ветку SVN)
  • ветка, которую вы получите, больше не будет синхронизироваться с svn (если вы сделаете другую git svn fetch, git все равно будет получать неизмененную историю

вырез истории SVN при первоначальном клонировании

git svn clone -r N http://yoursvnaddress myPartlyClonedRepo.git

где N будет самым ранним номером ревизии, который синхронизируется

Плюсы:

  • позволяет вам сохранить размер вашего хранилища небольшим (что я и хотел в первую очередь)

Минусы:

  • ранняя история "потеряна"

редкая проверка

это было последнее добавление в git 1.7 и позволяет вам выборочно изменять ваш рабочий каталог

git config core.sparsecheckout true
echo "*" > .git/info/sparse-checkout
echo '!path-to-huge-unwanted-dir/' >> .git/info/sparse-checkout
git read-tree -m -u HEAD

Плюсы

  • простая настройка

Против

  • не влияет на размер вашей базы данных (.git)
0 голосов
/ 05 октября 2009

Вы можете попробовать использовать 'ignore path' в git svn, чтобы указать имя двоичных файлов, которые были добавлены. Возможно, вам потребуется выполнить svn reset, чтобы вернуться к моменту времени, когда они были добавлены, а затем отфильтровать пути для удаления этих файлов.

...