Sử dụng những gì kan viết tôi đã đưa ra giải pháp này:
git clone cvs.git
cd cvs
git remote add svn ../../svn.git
git fetch svn
Sử dụng git log --all
để tìm lịch sử chưa được nối:
...
|
* 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]
|
...
Tìm toàn bộ SHA1:
git show 1985b93
git show 12e0ed4
Tạo ghép:
echo 1985b9305ebc819e760f7ecf8e2abe7963eac055 12e0ed4c3dd75cec396a2d228825702eab73ba19 > .git/info/grafts
Bây giờ lịch sử được kết nối nhưng chưa vĩnh viễn:
|
* 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]
|
Làm cho nó vĩnh viễn như trong http://bugsquash.blogspot.co.uk/2010/03/stitching-git-histories.html:
git branch svnmaster svn/master
git filter-branch -- 12e0ed4c3dd75cec396a2d228825702eab73ba19..svnmaster
Điều này tạo ra các cam kết mới mà còn để lại các cam kết svn gốc. git log --all
sẽ hiển thị nó:
* 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]
|
Tháo ghép, lịch sử trùng lặp sẽ được đi:
rm -r .git/info/grafts .git/refs/original
Dọn dẹp:
git reset --hard svnmaster
git branch -D svnmaster
Và đẩy:
git push
Tất cả đã được làm xong!
Cảm ơn rất nhiều, điều đó đã xảy ra. Tôi sẽ không bao giờ tìm thấy điều này bản thân mình. Tôi sẽ đăng một câu trả lời như thế nào tôi cuối cùng đã làm nó. –
@MichaelLemke Có ... 'rebase' là một cá trích đỏ - nó hoạt động với những khác biệt, và áp dụng lại các thay đổi, trong khi ghép cho phép thao tác trực tiếp đồ thị lịch sử. – kan
Thực ra, tôi chưa bao giờ bắt gặp những mảnh ghép trước đây (với git đó). –