2012-01-07 9 views
6

Nếu bạn sử dụng cực chẳng đả từ xa và mong muốn có tốc độ tuyệt vời của git để theo dõi diffs, đây là giải pháp: http://kb.perforce.com/article/1417/git-p4git-p4 - bất kỳ lời giải thích tuyệt vời cho cách thức hoạt động

Tuy nhiên, tôi đã nhận thấy sự sau:

  1. làm theo hướng dẫn chính xác
  2. Nó có thể mất một thời gian để nhập khẩu một cây lớn mà không nhận được lịch sử
  3. Trên một cây lớn, là người đầu tiên cam kết sẽ mất một thời gian dài như lệnh này sẽ đồng bộ toàn bộ cây.
  4. Nếu bạn thực hiện một cam kết mà bạn không muốn gửi cho lực lượng, bạn phải thực hiện "git rebase -i" và xóa bản ghi cam kết vi phạm. Bạn không thể thực hiện "git p4 submit" và sau đó "p4 hoàn nguyên" tệp bạn không muốn gửi.
  5. Nếu bạn làm phiền điều gì đó, mọi thứ có thể trở nên thực sự khó hiểu.

Và đó là câu hỏi của tôi. Có cách nào giải thích tốt về cách git-p4 sử dụng kho lưu trữ từ xa không? Và giải thích tổng thể về các tác phẩm nóng git-p4?

git-p4 không dành cho người yếu tim. Tôi đang học rằng bạn thực sự cần phải hiểu rõ git tốt để sử dụng nó tốt.

+3

Tôi muốn cho rằng bạn muốn hiểu rõ Git để sử dụng tốt, bất kể bạn đang giao tiếp với lực lượng ở phía bên kia hay không. – Cascabel

Trả lời

8

Có một số thông tin khác trong Documentation/git-p4.txt trong mã nguồn của dự án git.

git-p4 duy trì chi nhánh ref/remote/p4 để phản chiếu máy chủ Perforce từ xa. Theo mặc định git-p4 clonegit-p4 sync cập nhật điều khiển từ xa này và bạn rebase chủ của mình chống lại nó.

git-p4 submit yêu cầu định cấu hình thư mục địa phương bổ sung làm gốc ứng dụng khách Perforce để sử dụng bởi p4 submit.

git-p4 sync/clone sẽ ghi lại từng số thay đổi Perforce trong thông báo cam kết git tương ứng. Ví dụ:

[git-p4: depot-paths = "//depot/test/": change = 51]

Sử dụng những ký hiệu sách thay đổi, git-p4 sync mua lại danh sách thay đổi trên máy chủ cực chẳng đả chưa cam kết git, thêm ký hiệu sách thay đổi cho mỗi git mới cam kết thông báo.

git-p4 submit bắt đầu bằng cách xác định cam kết git địa phương mới - những người không có [git-p4: ...]. Sử dụng không gian làm việc cục bộ của máy khách Perforce, nó đồng bộ hóa các tệp Perforce và với git apply áp dụng các bản vá được lấy từ git format-patch trên cam kết chưa được gửi trước khi gọi p4 submit.

Sau đó, git-p4 submit gọi git-p4 sync để cập nhật chi nhánh ref/remote/p4 so với từ xa Perforce vừa cập nhật.

Cuối cùng git-p4 submit sẽ gọi git rebase trên nhánh chính đối với điều khiển từ xa được cập nhật. Điều này dẫn đến cùng một cây git đã được gửi, nhưng với các thư cam kết đã chỉnh sửa có chứa các ký hiệu thay đổi [git-p4...].

Làm cách nào để giữ một vài tệp được sửa đổi trong git mà không bao giờ gửi chúng đến p4?

git-p4 submit sẽ gửi tất cả các cam kết nhánh. Sử dụng các công cụ git thông thường để tổ chức các thay đổi vào và ra khỏi nhánh bạn chọn để gửi tới Perforce.

+0

Cảm ơn. Có câu trả lời cho "Cam kết nào đang chờ xử lý để thực thi cho lực lượng không?" Bất kỳ "gotchas" khác bằng cách sử dụng công cụ này? – justingordon

1

Tôi thỉnh thoảng sử dụng git-p4, vì tôi thường xuyên đi lại và không luôn có kết nối tốt với văn phòng. Sự hiểu biết của tôi, mặc dù tôi đã không đi sâu vào nó sâu sắc, là git-p4 duy trì một không gian làm việc Perforce cho bạn. Bất cứ khi nào bạn thực hiện rebit git p4, về cơ bản, bạn đang đồng bộ hóa mã vào không gian làm việc của mình, sau đó git-p4 phát lại dưới dạng các cam kết mới vào kho lưu trữ git của bạn. Bất cứ khi nào bạn thực hiện git p4, hãy gửi, nó sẽ phát lại một chuỗi các bản vá lỗi vào không gian làm việc Perforce của bạn và gửi chúng bằng cách sử dụng Danh sách thay đổi Perforce.

Tôi đoán bạn có thể nghĩ về nó như sử dụng máy chủ Perforce như một nhánh từ xa, nhưng thực tế nó là một sự thực thi rất hạn chế.

Nếu bạn có câu hỏi chi tiết hơn, tôi sẽ thử đăng bài trên diễn đàn Perforce. Có một vài người trong văn phòng đã nghiên cứu git-p4 một cách chi tiết và có thể giúp đỡ.

+0

Làm thế nào để git-p4 biết nội dung đang chờ xử lý để gửi cho p4? Làm cách nào để sửa đổi danh sách nội dung sẽ được gửi? Làm cách nào để giữ một vài tệp được sửa đổi trong git mà không bao giờ gửi chúng đến p4? – justingordon

+0

Tôi nghĩ câu trả lời mới hơn có nhiều chi tiết kỹ thuật hơn, nhưng danh sách những gì đang chờ gửi về cơ bản là git cam kết trên _master_ kể từ lần cuối bạn chạy _git p4 submit_. Bạn có thể sửa đổi những gì được gửi đến Perforce bằng cách làm việc trong các nhánh git và chỉ rebasing lên _master_ những gì bạn muốn gửi đến Perforce. Bạn có thể giữ các tệp được sửa đổi trên các nhánh git khác mà không cần gửi chúng đến Perforce. –

2

Về "Cam kết nào đang chờ xử lý để thực hiện cho lực lượng?"

Bất kỳ lệnh nào có thể chấp nhận phạm vi sửa đổi (xem gitrevisions(7)) đều hoạt động, bạn chỉ cần tham khảo điều khiển từ xa p4 làm điểm cuối cho phạm vi. Ví dụ:

  • git log remotes/p4/master..master
  • git diff remotes/p4/master..master

tôi có xu hướng sử dụng show-branch để có được một cái nhìn tổng quát về tình trạng của các chi nhánh của tôi, trong trường hợp này git show-branch --all làm việc là tốt.

-1

Có lẽ bạn sẽ tìm thấy công cụ này thay thế thú vị: http://lm1.github.io/git-p4s

Đây là một ngã ba của tiện ích git-p4 gốc với sự hỗ trợ cho Perforce tuy nhiên suối chỉ có một chiều đồng bộ làm việc tại thời điểm này.