Tôi cũng cần điều này, và với sự giúp đỡ của câu trả lời của Bombe + một số vấn đề xung quanh, tôi đã làm cho nó hoạt động. Đây là công thức:
Nhập Git -> lật đổ
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
Sau # 3, bạn sẽ nhận được một tin nhắn khó hiểu như thế này:
Sử dụng cấp độ URL cao hơn: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Chỉ cần bỏ qua điều đó.
Khi bạn chạy số 5, bạn có thể gặp xung đột. Giải quyết những điều này bằng cách thêm các tệp với trạng thái "chưa được trộn" và tiếp tục rebase. Cuối cùng, bạn sẽ được thực hiện; sau đó đồng bộ hóa trở lại kho SVN, sử dụng dcommit
. Đó là tất cả.
Giữ các kho lưu trữ đồng bộ
Bây giờ bạn có thể đồng bộ hóa từ SVN sang Git, sử dụng các lệnh sau:
git svn fetch
git rebase trunk
Và để đồng bộ hóa từ Git sang SVN, hãy sử dụng:
git svn dcommit
Lưu ý cuối cùng
Bạn có thể muốn thử điều này trên một bản sao cục bộ, trước khi đăng ký vào kho lưu trữ trực tiếp. Bạn có thể tạo một bản sao của kho Git của bạn đến một nơi tạm thời; chỉ cần sử dụng cp -r
, vì tất cả dữ liệu nằm trong chính kho lưu trữ. Sau đó, bạn có thể thiết lập kho lưu trữ thử nghiệm dựa trên tệp bằng cách sử dụng:
svnadmin create /home/name/tmp/test-repo
Và kiểm tra một bản sao làm việc, sử dụng:
svn co file:///home/name/tmp/test-repo svn-working-copy
Điều đó sẽ cho phép bạn chơi xung quanh với mọi thứ trước khi thực hiện bất kỳ thay đổi lâu dài nào.
Phụ lục: Nếu bạn gây rối git svn init
Nếu bạn vô tình chạy git svn init
sai URL và bạn không đủ thông minh để sao lưu công việc của mình (đừng hỏi ...), bạn không thể chạy lại cùng một lệnh. Tuy nhiên, bạn có thể hoàn tác các thay đổi bằng cách phát hành:
rm -rf .git/svn
edit .git/config
Và loại bỏ phần [svn-remote "svn"]
phần.
Sau đó bạn có thể chạy git svn init
lại.