У меня есть старый репозиторий Subversion с множеством моих частных проектов.Некоторые его части были конвертированы из старого хранилища CVS несколько лет назад (с помощью cvs2svn или аналогичного).Его текущая структура выглядит следующим образом:
- транк
- латекс
- java
- awt-doku
- pps
- build.xml
- src
- ant
- de
- dclj
- faq
- Пол
- (около 20 других пакетов)
- ltxdoclet
- lua
- (другие каталоги)
- ветки
- метки
- import
Проблема в том, что я провел довольно реорганизацию этого хранилища - например, все содержимое
pps каталог был когда-то в подкаталоге
import (кажется, я импортировал его туда из CVS), и, возможно, были и другие движения.
Меня сейчас интересует содержимоекаталога ltxdoclet вместе с некоторыми другими файлами по пути, такими как build.xml,Каталог ant и так далее.И я хочу иметь всю их историю, включая любую историю, прежде чем перемещать файлы.И я хочу сейчас это как репозиторий git (поскольку я хочу опубликовать это на github).Тэги и ветки никогда не использовались, поэтому они не важны.
Я не хочу, чтобы остальная часть этого репозитория (иногда они получат отдельные репозитории git) - это слишком сильно взорвет мой репозиторий (и есть кое-что, что я не хочу публиковать).
В идеале мой полученный git-репозиторий (в состоянии HEAD) должен выглядеть следующим образом:
Меня не особо волнуют исторические конфигурации каталогов, но история не должна содержать коммитов, которые не касались ни одного из файлов в этих каталогах (или их предшественников).
OfКонечно, git svn
кажется инструментом выбора.(Есть ли другие?)
git svn clone
кажется правильной командой ... но с какими опциями?Я создал authors.txt
для преобразования имен пользователей CVS или SVN в мои имя и адрес.Чтобы иметь только интересные файлы и каталоги, я использую --ignore-paths
.
Это была моя попытка:
filter='^/xcb-src/|_00|src/resources|dclj/faq|dclj/paul/([^l]|l[^t])'
git svn clone svn+ssh://mathe-svn/ --trunk trunk/java/pps -A authors.txt --ignore-paths=$filter latexdoclet
Конечно, он показывает только историю после коммита 2306, когда я переехалimport/java-pps
до trunk/java/pps
... и в нем много коммитов, которые вообще не меняются.
Чтобы решить первую проблему, я подумал о том, чтобы присвоить старому каталогу также --trunk
:
git svn clone svn+ssh://mathe-svn/ --trunk trunk/java/pps --trunk import/java-pps -A authors.txt --ignore-paths=$filter latexdoclet
Это не работает, первый --trunk
здесь игнорируется, и он эффективно заканчивается при коммите 2305 (до перемещения).(И он также содержит много пустых коммитов.)
Моя текущая попытка - импортировать весь репозиторий, отфильтровывая все ненужное:
filter='/xcb-src/|_00|src/resources|dclj/faq|dclj/paul/([^l]|l[^t])|/esperanto|finanzen|diverses|homepage|konfig|lua|prog-aufgaben|CVSROOT|latex|tags/'
git svn clone svn+ssh://mathe-svn/ -A authors.txt --ignore-paths=$filter latexdoclet-neu
Преобразование все еще выполняется, но тамконечно, много коммитов я вообще не хочу.
Редактировать: преобразование завершено - у меня сейчас 2658 коммитов (3176 объектов в git), и только у 36 из них есть некоторые интересные изменения дерева, если янастроил мой фильтр gitk правильно.(+ еще около 3, которые были ошибочно отфильтрованы, поскольку наш исходный латексный файл был сначала в каталоге latex
.)
- У кого-нибудь есть лучшие идеи, как это сделать?
- Должен ли я лучше сначала импортировать весь репозиторий, а затем использовать
git filter-branch
, чтобы выбрать нужные файлы и коммиты?