удалить историю файлов с базара - PullRequest
6 голосов
/ 14 февраля 2010

Кто-то вложил все двоичные файлы в наш ствол базара, и я хочу от него избавиться. `bzr del file 'удаляет только файл из текущей ревизии, но не историю файла.

Есть ли способ удалить историю файлов, чтобы нам не приходилось загружать сотни МБ данных?

Ответы [ 3 ]

6 голосов
/ 15 февраля 2010

Есть 2 способа. Но вы должны быть готовы к тому, что заново создадите часть (или даже полную) истории ветвей, поэтому ваши текущие (локальные) ветки станут несовместимыми с новой веткой после удаления файла.

1) Ручной способ. Вы можете создать копию своей ветви для ревизии непосредственно перед добавлением больших файлов. Затем вам нужно заново вручную зафиксировать ваши дальнейшие изменения и исключить большие файлы. Используйте команду replay из плагина bzr-rewrite (бывший bzr-rebase), чтобы воспроизвести те ревизии, в которых нет изменений в больших файлах. И используйте merge -cN для ревизий, где присутствуют изменения в больших файлах, удалите эти файлы вручную и подтвердите. Таким образом, вы сохраните большую часть своей истории в целости и сохраните уникальные идентификаторы для других файлов вашей ветви.

2) Используйте плагин bzr-fastimport, чтобы экспортировать свою историю как поток быстрого импорта с помощью команды bzr fast-export. Затем отфильтруйте большие файлы с помощью команды bzr fast-import-filter -x FILE. И в конце заново создайте новую ветку без больших файлов с помощью команды bzr fast-import. Этот метод уничтожит всю вашу историю, и все ваши файлы получат новые идентификаторы файлов, поэтому ваша новая ветвь будет полностью несовместима со старой веткой.

В любом случае, если у вас есть общий репозиторий с большой историей файлов, вам нужно создать новый пустой общий репозиторий и поместить туда свою новую отфильтрованную ветвь.

3 голосов
/ 15 февраля 2010

Если бинарные файлы были добавлены в последнем коммите, вы можете отменить его.

<code>bzr uncommit

Это оставит ваше рабочее дерево в том состоянии, в котором оно было до того, как вы написали «bzr commit». Затем удалите файлы и повторите фиксацию.

Проверьте документ на базаре на отмена ошибок для более подробной информации.

Вы можете использовать опцию -r для отмены нескольких коммитов в одной операции: bzr uncommit -r -4

Другой вариант, если вам не нужна история изменений:
Вы можете выполнить экспорт своей ветви (bzr export DESTINATION), а затем создать новый ствол.
Команда экспорта просто экспортирует главный репозиторий без какой-либо истории.

0 голосов
/ 17 сентября 2014

Я искал способ избавиться от CVS / dirs, который пробил себе путь во все мои коммиты bzr. Я новичок в bzr, поэтому в то время я еще не знал, как с ними справиться. (На работе центральный репозиторий - CVS, но я использую bzr локально, чтобы помочь мне). Вот пример того, что я сделал, чтобы избавиться от некоторых каталогов CVS в моем проекте, он не должен быть идеальным, но быстрый взлом:)

У вас есть проект с именем 'projAAA' в каталоге dir / home / user / dev

Экспорт текущего проекта bzr (для импорта bzr)

cd /home/user/dev  
bzr fast-export --no-plain projAAA export.gz

Переместить этот экспорт в пустой каталог (фильтр почему-то просматривает другие каталоги, в которых он запущен)

cp export.gz ~/tmp/rewrite/  
cd ~/tmp/rewrite

Script_1

Этот скрипт принимает экспорт и фильтрует все, что вы поставляете с -x
К сожалению, -x не работает с подстановочными знаками, поэтому вы должны указать точные значения / пути / файлы
Работает в ~ / tmp / rewrite

#!/bin/bash  
rm -r new.import/ out.filtered  
bzr fast-import-filter -x gradle/wrapper/CVS -x gradle/CVS -x .cvsignore* -x .cvsignore -x ChangeFile -x src/main/groovy/cvs/util/CVS -x src/main/groovy/cvs/CVS -x src/main/groovy/CVS -x src/main/java/cvs/util/CVS -x src/main/java/cvs/CVS -x src/main/java/CVS -x src/main/resources/CVS -x src/main/CVS -x src/test/groovy/cvs/util/CVS -x src/test/groovy/cvs/CVS -x src/test/groovy/CVS -x src/test/resources/CVS -x src/test/CVS -x src/CVS -x CVS export.gz > out.filtered  
bzr fast-import out.filtered new.import

Теперь каталог "new.import" будет содержать все, кроме того, что вы отфильтровали.
Запустите следующий скрипт, чтобы просмотреть всю историю ревизий этого нового импорта для вещей, которые все еще могут быть там, которые вам не нужны, для которых вам нужно добавить еще одно значение -x в Script_1 (которое я буду перезапускать, пока я не буду счастлив)

Script_2:

Запустите это в ~ / tmp / rewrite:

#!/bin/bash  

THISDIR=$(pwd)
pushd new.import/trunk/

#clean file
echo `date` > $THISDIR/search.out

# I manually enter the revisions that exist here, if you only have 1 to 19, change this accordingly:
for i in `seq 1 70`;
do
  echo $i
  printf "\n============== rev $i =================\n" >> $THISDIR/search.out
  bzr revert -r$i
  # Change this find to look for things you want to filter out
  find . -name CVS -type d >> $THISDIR/search.out 2>&1
done

popd

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

Итак, по сути, я делаю это пару раз, пока не стану счастливым;

  • Запустите Script_1 для экспорта, фильтрации, перезаписи ветви.
  • Затем Script_2 для поиска новой ветви, чтобы убедиться, что все прошло, если нет, добавьте еще -x записи
  • Перезапустить исправленный Script_1.
  • Повторите
...