Korzystanie co kan napisał wymyśliłem tego rozwiązania:
git clone cvs.git
cd cvs
git remote add svn ../../svn.git
git fetch svn
użytkowania git log --all
znaleźć niezwiązane historie:
...
|
* ab42f52 2011-09-14 06:03:07 +0000 | [svnuser]
|
* 1985b93 2011-09-14 06:00:00 +0000 | Migration from CVS [svnuser]
* 12e0ed4 2011-09-14 05:58:10 +0000 | *** empty log message *** (HEAD, origin/master, origin/HEAD, master) [cvsuser]
|
* 5060a7f 2011-04-18 14:07:03 +0000 | *** empty log message *** [cvsuser]
|
...
Znajdź pełny SHA1:
git show 1985b93
git show 12e0ed4
Tworzenie przeszczep:
echo 1985b9305ebc819e760f7ecf8e2abe7963eac055 12e0ed4c3dd75cec396a2d228825702eab73ba19 > .git/info/grafts
Teraz historie są połączone, ale jeszcze nie na stałe:
|
* ab42f52 2011-09-14 06:03:07 +0000 | [svnuser]
|
* 1985b93 2011-09-14 06:00:00 +0000 | Migration from CVS (grafted) [svnuser]
|
* 12e0ed4 2011-09-14 05:58:10 +0000 | *** empty log message *** (HEAD, origin/master, origin/HEAD, master) [cvsuser]
|
* 5060a7f 2011-04-18 14:07:03 +0000 | *** empty log message *** [cvsuser]
|
Zrób to trwały, jak pokazano na http://bugsquash.blogspot.co.uk/2010/03/stitching-git-histories.html:
git branch svnmaster svn/master
git filter-branch -- 12e0ed4c3dd75cec396a2d228825702eab73ba19..svnmaster
Stwarza to nowe rewizje, ale także pozostawia oryginalny svn zatwierdza. git log --all
pokaże:
* 849278b 2013-04-15 16:31:44 +0000 | Java 6 in Eclipse. Deployed. (svnmaster) [svnuser]
|
...
|
* c33f7cc 2011-09-14 06:03:07 +0000 | [svnuser]
|
* 7acb3ed 2011-09-14 06:00:00 +0000 | Migration from CVS [svnuser]
|
| * b3d5413 2013-04-15 16:31:44 +0000 | Java 6 in Eclipse. Deployed. (svn/master, refs/original/refs/heads/svnmaster) [svnuser]
| |
...
| |
| * ab42f52 2011-09-14 06:03:07 +0000 | [svnuser]
| |
| * 1985b93 2011-09-14 06:00:00 +0000 | Migration from CVS (grafted) [svnuser]
|/
|
* 12e0ed4 2011-09-14 05:58:10 +0000 | *** empty log message *** (HEAD, origin/master, origin/HEAD, master) [cvsuser]
|
* 5060a7f 2011-04-18 14:07:03 +0000 | *** empty log message *** [cvsuser]
|
Usuń przeszczep, duplikat historia zniknie:
rm -r .git/info/grafts .git/refs/original
Clean up:
git reset --hard svnmaster
git branch -D svnmaster
i wciśnij:
git push
Wszystko gotowe!
Wielkie dzięki, to się udało. Nigdy bym tego nie znalazł. Napiszę odpowiedź, jak w końcu to zrobiłem. –
@MichaelLemke Tak ... 'rebase' jest czerwonym śledziem - działa z różnicami i ponownie nakłada zestawy zmian, podczas gdy przeszczepy pozwalają bezpośrednio manipulować wykresem historii. – kan
Właściwie nigdy nie spotkałem się z przeszczepami (z tym gitem). –