Po podaniu wartości --stdlayout
, git svn clone
będzie zwracać uwagę tylko na svn commit, które modyfikują pliki w ścieżkach/trunk,/branches lub/tags - inne zatwierdzenia będą ignorowane. Wciąż otrzymujesz poprawny klon twojego repozytorium, ale historia od r1 aż do stworzenia twojego standardowego układu zostanie utracona, jak zauważyłeś. Ponieważ chcesz, aby twoje repozytorium Git zrozumiało trunk, gałęzie i znaczniki po zmianie układu, nadal chcesz --stdlayout
, inaczej klon git połączy wszystkie gałęzie w jedno drzewo z/trunk/branches/tagami, co nie jest tym, czego potrzebujesz.
Co możesz zrobić, jeśli naprawdę głęboko interesujesz się historią zmiany wcześniejszego układu (a jeśli jest to ściśle jednorazowa migracja, nie jest wymagana żadna SVN po przejściu na Git), to należy uruchomić dwukrotnie: git svn clone
- jeden raz --stdlayout
i raz bez. Wersja stdlayout stanie się twoim ostatecznym repozytorium, a wersja non-stdlayout może być używana tylko podczas migracji, aby zszyć historię zmiany wcześniejszego układu pod nowym układem w momencie reorganizacji. Można to zrobić, wybierając wszystkie swoje zatwierdzenia z okresu post-rego na migawkę repozytorium w czasie re-org.
Po sklonowaniu obu repozytoriów zauważysz, że w miejscu kopiowania do nowego layoutu znajduje się wspólny skrót drzewa dla pnia. Oto przykład (nie używając repo przykro, więc hashe się różnić):
(w stdlayout repo):
# git log --pretty=raw
commit 44f2f60e00117dfd51fd7d6431b697ec0ccc863d
tree 5cf62e006bb7b58171010fc0ffaba08ca97520da
parent d403c6ce0789cf584af9abb945bcfd88721e391e
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000
change 4 after folder structure & branch
git-svn-id: http://<redacted>/[email protected] 4ed80924-4846-11e4-8279-c5809b3f22e4
commit d403c6ce0789cf584af9abb945bcfd88721e391e
tree d6c0d6cf271be5146b26781ab9bd78736d86ace3
parent 0c5873eab204942ffe56370cc6e1d31e5372da13
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000
changed: moved to new folder structure
git-svn-id: http://<redacted>/[email protected] 4ed80924-4846-11e4-8279-c5809b3f22e4
commit 0c5873eab204942ffe56370cc6e1d31e5372da13
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000
new folder structure
git-svn-id: http://<redacted>/[email protected] 4ed80924-4846-11e4-8279-c5809b3f22e4
(w pełnej wersji, bez stdlayout repo):
commit ec52fff6ee1d65eadfa1d18aa4b74b553fc693e1
tree cfda32eb39248fa5969d15a21d2f8014189e88c2
parent 685fe9961abfee4d4913e83cf5a4a7e8d459a1a1
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000
change 4 after folder structure & branch
git-svn-id: http://<redacted>@9 4ed80924-4846-11e4-8279-c5809b3f22e4
commit 685fe9961abfee4d4913e83cf5a4a7e8d459a1a1
tree 817306fad0ed5466d877437cdda12ff39a0df725
parent 02caf52174c588f1d394815201b764f9abdaa640
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411565 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411565 +0000
created new branch
git-svn-id: http://<redacted>@8 4ed80924-4846-11e4-8279-c5809b3f22e4
commit 02caf52174c588f1d394815201b764f9abdaa640
tree c041405a580beaef0a4e50923e9279e179c917a8
parent 37d77b8f1168d00b943e0bca3cab277cf89e7e84
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000
changed: moved to new folder structure
git-svn-id: http://<redacted>@7 4ed80924-4846-11e4-8279-c5809b3f22e4
commit 37d77b8f1168d00b943e0bca3cab277cf89e7e84
tree d6c0d6cf271be5146b26781ab9bd78736d86ace3
parent 3a4784719bd95af5bf59de96310a1d6a38af562e
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000
new folder structure
git-svn-id: http://<redacted>@6 4ed80924-4846-11e4-8279-c5809b3f22e4
commit 3a4784719bd95af5bf59de96310a1d6a38af562e
tree d6c0d6cf271be5146b26781ab9bd78736d86ace3
parent 2fb41dab5a7389ab32419b8b270d955631aaaefa
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411421 +0000
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411421 +0000
update 4
... etc., continues.
Należy zauważyć, że w repozytorium stdlayout zatwierdzenie d403c6c
jest drzewem d6c0d6c
, a w pełnym klonie, oba zatwierdza 37d77b8
i jego rodzic 3a47847
również mają to samo drzewo.Na początku możesz pomyśleć, że to dziwne, dopóki nie zdasz sobie sprawy, że tworzenie/trunk/branches/tagów w kliencie git-svn faktycznie nie działa, ponieważ Git nie śledzi pustych katalogów.
W repo stdlayout można importować pełnym klon niestandardowego Klon:
# git remote add fullclone ../fullclone
# git fetch fullclone
Następnie KASY nowy oddział z „nowej struktury folderów” popełnienia od pełnej repo:
# git checkout -b fix-history 37d77b8
Następnie odtworzyć wszystkie rewizje od tego momentu w repo standardowego układu:
# git cherry-pick d403c6c..master
Uruchomienie tego może zająć trochę czasu, jeśli masz wiele ponownych zatwierdzeń po opublikowaniu, ponieważ każde zatwierdzenie jest ponownie zatwierdzane w nowym oddziale. Wynik powinien być połączoną historią pnia przed i po reorganizacji.
Dostaję dużo wyskakujących okienek i błędów wirusów z linkiem do pliku zip repo. Czy możesz opublikować go na stronie takiej jak dropbox.com, która nie ma wyskakujących okienek i reklam? –
zrobione. moje przeprosiny za zły link. –