Utworzono prosty skrypt do migracji dość dużego repozytorium SVN. Zamiast używać git svn clone
, używam git svn init
i git svn fetch
, dzięki czemu mogę określić wersję i pobrać porcję przez porcję. Bardziej lub mniej, to jest coś takiego:Jak wykonać pobieranie git-svn i zachować pusty katalog?
while [ "$CURRENT_REVISION" -lt "$MAX_REVISION" ]; do
END_REVISION=$((CURRENT_REVISION + 100))
if [ "$END_REVISION" -ge "$MAX_REVISION" ]
then
END_REVISION=$MAX_REVISION
fi
git svn fetch -r "$CURRENT_REVISION":"$END_REVISION" --authors-file="$AUTHORS_FILE"
#increasing the current and end revision
CURRENT_REVISION=$END_REVISION
END_REVISION=$((CURRENT_REVISION + 100))
done
Jednak rozumiem, że domyślnie zachowanie zwrcania/klon nie zachowa pustych katalogów. Tak więc, być może będę musiał ręcznie sprawdzić w tych pustych katalogach (* których staram się ominąć).
Istnieje parametr --preserve-empty-dirs
w git svn clone
, ale nie w git svn fetch
.
Czy istnieje sposób obejścia tego problemu?
UPDATE
Mimo że nie są one wymienione w dokumentacji urzędowej, które możemy wykorzystać klucz konfiguracyjny dla sprowadzić, to faktycznie działa
Istnieje szczegółowe wyjaśnienie przez @Vampire związane z tym pytanie. Uproszczę to.
Po wykonaniu repozytorium startowy, musiałem zmienić konfigurację mojego odległego oddziału:
git config svn-remote.<remote name>.preserve-empty-dirs "true"
git config svn-remote.<remote name>.placeholder-filename ".gitkeep"
Można sprawdzić konfigurację patrząc na /.git/config. Po prostu wykonaj normalne pobieranie i katalog zostanie zachowany.
Czy używasz tego do jednorazowej konwersji, czy też chcesz użyć git-svn do używania Git jako frontendu do repozytorium Subversion, które nadal będzie kanonicznym źródłem twojego kodu? – Vampire
Tak, mogę powiedzieć, że to jednorazowa konwersja. – alfonzjanfrithz