git-svn: làm cách nào để tạo một nhánh svn mới thông qua git?


193

Tôi có một kho git theo dõi một kho svn. Tôi nhân bản nó bằng cách sử dụng --stdlayout.

Tôi đã tạo một chi nhánh địa phương mới thông qua git checkout -b foobar

Bây giờ tôi muốn chi nhánh này kết thúc trong …/branches/foobarkho svn.

Làm thế nào để tôi đi về điều đó?

(đã cắt rất nhiều văn bản điều tra. Xem lịch sử câu hỏi nếu bạn quan tâm)


Câu trả lời:


280

Tôi biết câu hỏi này đã được trả lời cách đây một thời gian, nhưng sau khi đọc nó, tôi có thể giúp thêm các ví dụ về lệnh nhánh git svn cụ thể và liên hệ nó với một quy trình công việc điển hình.

Thích kch trả lời, dùng git svn branch. Dưới đây là một ví dụ đầy đủ, (lưu ý -nchạy thử để chạy thử):

git svn branch -n  -m "Branch for authentication bug" auth_bug

Nếu điều này diễn ra tốt đẹp, máy chủ trả lời với câu trả lời như thế này:

Sao chép https://scm-server.com/svn/portal/trunk tại r8914 sang https://scm-server.com/svn/portal/branches/auth_orms ...

Và không có -nchuyển đổi, máy chủ có thể thêm một cái gì đó như:

Tìm thấy điểm nhánh có thể: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_orms , 8914

Tìm thấy nhánh cha: (refs / điều khiển từ xa / auth_orms)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Theo dõi phụ huynh với do_switch

Đã theo dõi thành công cha mẹ r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs / điều khiển từ xa / auth_orms)

Phần tốt nhất của nó, bây giờ bạn có thể tạo một nhánh cục bộ dựa trên nhánh từ xa của mình như vậy:

git checkout -b local/auth_bug auth_bug

Có nghĩa là "kiểm tra và tạo nhánh cục bộ có tên auth_bugvà làm cho nó đi theo nhánh từ xa (tham số cuối cùng)auth_bug

Kiểm tra xem nhánh cục bộ của bạn có hoạt động trên nhánh từ xa đó bằng cách sử dụng dcommitvới --dry-run( -n):

git svn dcommit -n

Và máy chủ SVN sẽ trả lời với tên chi nhánh mới:

Cam kết https://scm-server.com/svn/portal/branches/auth_orms ...


2
Vâng, git co có nghĩa là Jesper thiết lập một bí danh git.
Jason Axelson

3
cập nhật và thay thế git cobằng git checkoutđể ví dụ có thể làm việc cho ai
Jesper Ronn-Jensen

5
Tôi đã bỏ phiếu cho câu trả lời này, nhưng tôi không biết bao nhiêu lần tôi tiếp tục quay lại. Cảm ơn bạn!
Ben Doerr

35
Có một phần khó khăn trong git-svn branchlệnh - bạn phải trực tuyến để tạo chi nhánh mới theo cách này. Bạn có thể thực hiện các thao tác sau trong ngoại tuyến: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. Và khi trực tuyến đẩy sự thay đổi này bằng cách làm 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
vadishev

2
Vì vậy, thay thế bước 2 bằng git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Để kiểm tra để đảm bảo chi nhánh hiện cam kết với chi nhánh svn. git svn dcommit --dry-run6. Cuối cùng thực sự cam kết git svn dcommit7. Xóa chi nhánh tạm thờigit branch -D foobar-new
jjcf89

64

kể từ git v1.6.1, git svn branchcó sẵn.

Từ các tài liệu git:

    chi nhánh
        Tạo một nhánh trong kho SVN.

        -m,
            Cho phép chỉ định thông điệp cam kết.

        -t, --tag
            Tạo thẻ bằng cách sử dụng tags_subdir thay vì Branch_subdir
            quy định trong git svn init.

Các phiên bản trước của git không cung cấp cách tạo chi nhánh svn.


4

@kch Tôi vừa (7 tháng 12 năm 2008) đã biên dịch thẻ v1.6.1-rc1 của git và nó có chứa lệnh nhánh git svn và tài liệu cho nó. Vì vậy, phiên bản v1.6.1 của git nên (hy vọng) có chứa lệnh này.


Thật vậy, tôi đã cài đặt 1.6.1 ngay bây giờ và lệnh có sẵn. cập nhật câu trả lời của tôi cho phù hợp.
kch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.