2014-04-22 17 views
7

Tôi là người dùng Git đang cố gắng tìm hiểu Perforce.Phân nhánh lực lượng so với phân nhánh git

Trong Git người dùng có thể thanh toán từ nhánh chính, thay đổi một số tệp và đẩy mã của mình tới máy chủ trên một nhánh khác với ID cam kết cụ thể.

Người dùng Git khác có thể thanh toán chi nhánh mới bằng ID cam kết của mình và làm việc trên đầu trang.

Làm cách nào để thực hiện điều này bằng Perforce?

+2

Bạn có đang sử dụng luồng hoặc chỉ các nhánh truyền thống không? Rất nhiều điều này phụ thuộc vào phương thức hoạt động và cấu trúc của bạn. Có các nhánh nhẹ trong các dòng suối và cũng sử dụng giá để tạo các thay đổi giả tạm thời. Vì vậy, nhiều là phụ thuộc vào cấu trúc của tổ chức của bạn. – gaige

Trả lời

13

Tôi là người dùng Git đang cố gắng tìm hiểu Perforce.

Tôi rất tiếc.

Làm cách nào để thực hiện điều này bằng Perforce?

Tôi là người dùng Git tốt hơn tôi là người dùng Perforce, vì vậy hãy sửa tôi nếu có điều gì đó không đúng. Tôi khuyên bạn nên đọc các trang của người đàn ông và a tutorial.

Nó "không thể", ít nhất là không hoàn toàn như cách Git thực hiện.

Trong git, khi bạn tạo chi nhánh, bạn đang phân nhánh toàn bộ trạng thái của kho lưu trữ. Perforce không hỗ trợ điều này, thay vào đó, "phân nhánh" là nhiều hơn mỗi tệp: tức là bạn chi nhánh tệp A vào tệp B, tại đó tệp B chứa tham chiếu ngược đến tệp A nói "Tôi đến từ đây". Tham chiếu ngược này sau đó có thể được sử dụng để xác định một tổ tiên chung cho mục đích sáp nhập. Tuy nhiên, sự hiểu biết của tôi là các tham chiếu ngược này là mỗi tệp và bạn được tự do tích hợp (hợp nhất) bất kỳ tệp nào vào bất kỳ tệp nào khác. (So ​​sánh với git, trong đó "Parent commit" là tham chiếu ngược của bạn, nhưng nằm trên quy mô toàn bộ kho.)

Bạn có thể chi nhánh toàn bộ tệp bằng p4 integrate, sử dụng cú pháp Perforce điển hình (ví dụ: //depot/some/path/...) . Thông thường, bạn sẽ chi nhánh toàn bộ thư mục vào toàn bộ thư mục khác, chẳng hạn như //depot/main/my_project thành //depot/release-1.0/my_project hoặc tương tự. Perforce, theo như tôi biết, không thực sự quan tâm đến các đường dẫn: nó chỉ là "chi nhánh" các tập tin từ một địa điểm khác. Bất kỳ mô hình hoặc sự tỉnh táo nào trong các đường dẫn đều tùy thuộc vào bạn.

Ngoài ra, bạn có thể sử dụng p4 branch để tạo "chi tiết kỹ thuật chi tiết", về cơ bản là cách ghi lại tập hợp nguồn của tệp và đích đến để phân nhánh dễ dàng hơn. (Nếu bạn lấy ví dụ phát hành, cuối cùng bạn có thể muốn hợp nhất các thay đổi trở lại hoặc hợp nhất các thay đổi khác vào bản phát hành, v.v.)

Cả hai lần tôi đã làm việc với Perforce, các chi nhánh là một con thú có bản chất khác trong Git, và có một chút khác biệt về văn hóa ở đây. Chi nhánh tương đối hiếm. (Tôi chỉ nhìn thấy chúng được sử dụng để phát hành, bao giờ.) Chúng tôi đã không sử dụng chúng cho các chi nhánh tính năng, ngoại trừ có lẽ là lớn nhất của các tính năng; so sánh với git, ở đâu đối với tôi "nhánh chi tiết" thường là "mất> 1 lần commit".

+0

Như gaige nói trong một bình luận cho câu hỏi ban đầu nó phụ thuộc vào tổ chức của bạn. Perforce được tổ chức tập trung, do đó, nó là một trường hợp trung tâm để quyết định nếu các tính năng chi nhánh, chi nhánh QA, chi nhánh phát hành vv là muốn hay không. Đó là thực tế chung để không cho phép người dùng của một tổ chức lớn hơn quyết định chi nhánh (bao nhiêu và ở đâu). Tuy nhiên bạn có thể nghĩ đến việc sử dụng cầu git-p4. – pitseeker

+0

@pitseeker: "Thực hành chung là không cho phép người dùng [kiểm soát] trên các nhánh (bao nhiêu và ở đâu)" Điều này có lẽ cực hơn một chút so với những gì tôi thấy (nhưng âm thanh không đáng tin cậy, đáng buồn) ... (org thường có một mô hình để làm theo, cho rằng những thứ khác có thể bị vô tổ chức một cách nhanh chóng). Cách bạn mô tả nó là không may, và dường như để ngăn chặn một phần quan trọng của công việc của một kỹ sư. – Thanatos

+0

* Tôi xin lỗi. * Làm tôi cười nhiều hơn tôi nên có. – DevNull

1

Nếu bạn coi thường Perforce nhiều như tôi làm thì bạn nên tiếp tục sử dụng Git. Tôi nên nói rằng tôi cảm thấy thoải mái hơn khi sử dụng Git.

Tôi hiện đang sử dụng Git-P4 + một tập hợp các kịch bản Bash tôi đã viết (git-p4-helpers)

Tôi làm theo một biến thể đơn giản của this workflow:

$ git checkout p4-integration 
$ git p4 sync 
$ git p4 rebase 
$ git tag last-green <SHA1> # last green build 
$ git rebase last-green develop 
$ git checkout -b <my-feature> 
$ git commit # as needed 
# Sync Git->P4 (see Github:git-p4-helpers) 
# Submit using P4 

Vẫn còn một điều tôi có không có thể tìm ra, cụ thể là làm thế nào để gửi từ Git-P4 đến P4 nhanh (mỗi lần tôi đã thử nó mất mãi mãi để làm git p4 sync sau đó một loạt các công cụ khác mà làm cho nó rất khó chịu để gửi từ repo Git của tôi trực tiếp đến P4. Vì vậy, tôi đã viết một kịch bản để đồng bộ hóa repo Git của tôi với không gian làm việc P4 của tôi và sau đó gửi bằng P4.

Hiện tại, điều này cho phép tôi sử dụng tất cả các tính năng của Git trong khi tôi đang thực hiện các thay đổi, sau đó tôi chỉ gửi bằng P4.

0

Hãy nhớ rằng lực lượng tạo ra một bản sao cho một chi nhánh mà Git chỉ tạo một con trỏ tới nhánh mới, nhanh hơn rất nhiều.

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