2013-05-31 34 views
20

Tôi đang làm việc trên một dự án mà mọi người sử dụng SVN làm máy chủ tập trung và mọi người đẩy những thay đổi họ thực hiện trên máy chủ đó. Tôi muốn sử dụng Git tại địa phương và tôi khá mới với git svn. Tôi đã làm một git svn clone của kho lưu trữ với git svn clone -r HEAD https://svn.repo/app/branch một Tôi muốn cập nhật thông qua git.Git-SVN: Cập nhật Git repo từ máy chủ SVN tập trung

Tôi cần lệnh 'git pull like' nhưng để kéo từ bản sửa đổi cụ thể của repo máy chủ SVN. Cũng có lệnh 'tìm nạp như' để tìm nạp từ một phiên bản cụ thể của repo máy chủ SVN?

Tôi không có bất kỳ thư mục .svn nào trong dự án nhân bản vô tính của mình và git remote không cho tôi bất kỳ thứ gì. Tuy nhiên tôi đã làm một git config -l và tôi nhận được URL của máy chủ SVN, vì vậy bằng cách nào đó tôi được liên kết với máy chủ SVN. Tôi không biết làm thế nào để lấy hoặc kéo mặc dù.

Cảm ơn!

Trả lời

37

Cách tốt nhất để làm việc trên một Repository Subversion qua Git:

  1. git svn init -s https://svn.repo/app/ myrepo giả định rằng dưới https://svn.repo/app/ repo chứa các tiêu chuẩn /trunk, branchestags thư mục con
  2. Thực hiện git svn fetch trong myrepo cho đến khi không còn cam kết là tìm nạp (có thể mất khá nhiều thời gian và đôi khi hủy bỏ trong Windows).
  3. Thanh toán một chi nhánh Subversion cụ thể hoặc thân cây qua git checkout -b trunk remotes/trunk

Sau đó, bạn có thể dễ dàng duyệt, hack và cam kết vào Git Repo của bạn có chứa tất cả Subversion cam kết và chi nhánh.

  • Để kéo trong cam kết mới từ SVN sử dụng git svn rebase
  • Để đẩy địa phương cam kết của bạn vào SVN sử dụng git svn dcommit

Để nhảy đến một phiên bản Subversion cụ thể mà bạn chỉ cần duyệt qua lịch sử qua git log và tìm kiếm một cam kết phản ánh cam kết subversion theo. Bạn có thể dễ dàng phát hiện bản sửa đổi Subversion trong dòng git-svn-id: của thông báo cam kết. Chỉ cần sử dụng một số git checkout <commithash> để kiểm tra rõ ràng phiên bản đó.

10

Một khởi đầu tốt:

Để lấy svn mới cam kết vào repo địa phương của bạn: git svn rebase

Để đẩy bạn địa phương cam kết SVN: git svn dcommit

Bạn có thể sẽ phải sử dụng git stashgit stash pop, trước khi sử dụng hai lệnh trên khi bản sao làm việc của bạn có những thay đổi không được tuân thủ.