2012-06-22 17 views
5

Công ty của tôi đang trong quá trình thay đổi công cụ kiểm soát phiên bản của chúng tôi từ Rational ClearCase sang Git. Chúng ta có kịch bản phát triển sau đây, và chúng ta tò mò nếu có một mẫu thích hợp để theo Git để đạt được cùng một hành vi mà chúng ta có trong ClearCase.Tương đương với Git đối với thành phần chỉ đọc trong ClearCase là gì?

Dưới đây là một số điểm cơ bản về tình hình của chúng tôi:

  1. Chúng tôi có một số ứng dụng rời rạc. Hãy gọi các AppA, AppB và AppC này.
  2. Chúng tôi cũng có một số tệp (xây dựng tập lệnh, v.v.) phổ biến cho tất cả các dự án. Hãy gọi Công cụ này.
  3. Đối với bất kỳ phần cắt nào của mã AppA, AppB hoặc AppC, chúng tôi cần một mã cụ thể của mã Công cụ.
  4. Hầu hết các nhà phát triển của chúng tôi không bao giờ sửa đổi mã Công cụ.

Đối với ClearCase, chúng tôi đã theo mô hình này như sau:

Components: app_a, app_b, app_c, dụng cụ

Dự án: AppA, AppB, APPC, cụ

Project AppA bao gồm app_a như một thành phần đọc/ghi và các công cụ như là một thành phần chỉ đọc.

Project AppB bao gồm app_b dưới dạng thành phần đọc/ghi và công cụ làm thành phần chỉ đọc.

Project AppC bao gồm app_c như một thành phần đọc/ghi và công cụ làm thành phần chỉ đọc.

Công cụ dự án bao gồm các công cụ làm thành phần đọc/ghi.

Mỗi đường cơ sở cho các dự án ứng dụng * tham chiếu đến đường cơ sở trên cả app_ * và các công cụ tổng hợp. Khi nhà phát triển khởi động lại đường cơ sở được đề xuất, họ kéo các thay đổi từ cả hai thành phần.

Đối với Git, chúng tôi cho rằng mô-đun con có thể là điều gần nhất với câu trả lời đúng. Tuy nhiên, khi kéo/rebasing một kho lưu trữ, có vẻ như nó đòi hỏi một bước bổ sung để cập nhật mã submodule. Lý tưởng nhất, chúng tôi muốn minh bạch. Ngoài ra, chúng tôi không nhất thiết phải quan tâm đến việc biết những gì đã thay đổi trong một mô-đun con từ quan điểm của kho lưu trữ gốc; chúng tôi chỉ quan tâm đến một thời điểm cho toàn bộ mô-đun con.

Trả lời

4

Trước tiên, hãy nhớ hiểu sự khác biệt giữa cấu hình (UCM giống) trong ClearCase và git (xem "Flexible vs static branching (GIT vs Clearcase/Accurev)").
Khi nhìn vào differences between ClearCase and Git, mỗi thành phần UCM phải được thể hiện trong Git dưới dạng kho lưu trữ.

Mô-đun con yêu cầu bước bổ sung nếu được sửa đổi, như được mô tả trong "true nature of submodules".
Nhưng họ ghi lại một SHA1 cụ thể, đó là những gì bạn muốn khi bạn kéo mỗi 'APP'.
gitslave sẽ cho phép bạn giữ Tools được liên kết chặt chẽ hơn với 'Appx', nhưng tôi không nghĩ nó phù hợp với kịch bản của bạn.

Lưu ý rằng việc sử dụng các môđun con sẽ:

  • make 'Tools' một thư mục con của 'APPx'
  • làm cho nó sửa đổi.
    Không có thành phần "chỉ đọc" với git: nếu bạn có thể truy cập vào repo, bạn có thể đẩy/kéo.
    Nếu bạn thực sự cần thực thi quyền truy cập đọc, thì bạn cần thêm "lớp ủy quyền" bổ sung, được gọi là gitolite.
Các vấn đề liên quan