2011-04-01 28 views
13

Tôi có một repo với một bố trí như
project1 SVN/trunk
project1/chi nhánh
project1/thẻ
project2/trunk
project2/chi nhánh
project2/thẻ
, vvTôi có thể git-svn bản sao một repo svn với nhiều bố trí thư mục tiêu chuẩn

Đối với một số lý do, tôi muốn một repo git-svn cho phép tôi để làm việc trên bất kỳ của các dự án và lấy/dcommit từ/đến tất cả chúng cùng Một lần. Điều này có thể xảy ra không? Tôi biết tôi chỉ có thể git-svn sao chép toàn bộ thứ mà không cần chỉ định nhánh, thẻ và thân cây, nhưng sau đó tôi sẽ mất rất nhiều lợi thế khi sử dụng git.

Trả lời

9

Đây là cách tôi đã làm. Tuy nhiên, có thể có những cách đơn giản hơn.

  1. Chọn dự án đầu tiên với cách bố trí tiêu chuẩn mà bạn muốn làm việc trên và git svn clone nó:

    git svn clone --stdlayout http://sample.com/svn/repository-name/project-name repository-name

  2. Đi vào thư mục repository-name và chỉnh sửa tập tin .git/config của nó. Bạn cũng có thể làm điều này với các lệnh git-config, nhưng tôi thấy nó dễ dàng hơn trong trình soạn thảo văn bản.

  3. Bạn sẽ thấy phần [svn-remote "svn"] đã được xác định cho dự án đầu tiên của mình. Đổi tên svn-remote thành một cái gì đó độc đáo hơn "svn", có thể giống với tên dự án của bạn. Ví dụ: [svn-remote "project-name"].

  4. Tạo thêm [svn-remote "project-name"] phần cho từng dự án, theo mẫu của dự án đầu tiên. Cung cấp cho mỗi một tên duy nhất! Bạn sẽ cần thay đổi cài đặt fetch, branchestags để sử dụng tên thư mục Subversion chính xác cho từng dự án.

  5. Khi bạn đã hoàn tất, hãy lưu tệp của bạn và chạy git svn fetch --fetch-all. Các dự án khác sẽ được lấy làm bộ điều khiển từ xa trong kho lưu trữ cục bộ của bạn.

  6. Để chuyển đổi master giữa các dự án, hãy thực hiện git reset --hard other-project-name/trunk, giống như khi bạn chuyển sang làm việc trên bất kỳ nhánh Subversion từ xa nào khác.

+0

Will một rebase git svn rebase tất cả các dự án? Liệu một git svn dcommit có cam kết tất cả các thay đổi không? –

+1

'git svn rebase' chỉ giúp bạn sửa đổi cho HEAD hiện tại của bạn, vì vậy không, tất cả những gì bạn nhận được là nhánh hiện tại trên dự án hiện tại. Tương tự cho 'git svn dcommit'. Để có được mọi dự án bạn cần thực hiện 'git svn fetch --fetch-all' và sau đó rebase HEAD hiện tại của bạn. Thật không may tôi không biết tương đương với cam kết tất cả các chi nhánh địa phương đang ở phía trước của điều khiển từ xa của họ, nhưng tôi chắc chắn nó có thể được kịch bản. –

+2

Đây là những gì tôi đang tìm kiếm. Để đơn giản hóa, trong bước 1 thêm -R project1-name --prefix = project1-name/vào lệnh git svn clone để có bản sao ban đầu sử dụng tên svn-remote và tiền tố nhánh ngay từ đầu. –

Các vấn đề liên quan