2013-04-16 23 views
7

Tôi đang làm việc với hệ thống xây dựng tùy chỉnh quản lý một số lượng lớn kho lưu trữ git và được viết chủ yếu bằng python.Git đơn giản nhất có thể xuất ra số lần commit giữa "branch" và "remote/origin/branch"

Nó sẽ giúp tôi tiết kiệm rất nhiều thời gian nếu tôi có thể viết lệnh báo cáo nhánh hiện tại của tất cả các kho, sau đó báo cáo nếu người đứng đầu "chi nhánh" giống như người đứng đầu "từ xa/nguồn gốc/chi nhánh ".

Chúng tôi đã có lệnh chạy lệnh shell bên trong mỗi kho git, những gì tôi đang tìm kiếm là một phương thức nhận thông tin được định dạng đơn giản từ git liên quan đến vị trí tương đối của nhánh và điều khiển/origin/chi nhánh. Một cái gì đó hoặc là sẽ là số của sự khác biệt cam kết hoặc một giá trị boolean đơn giản.

Phương pháp lấy thông tin này ra khỏi git để giảm thiểu số lượng phân tích cú pháp và xử lý tôi phải làm ở phía bên python là gì?

Trả lời

1

git status cho biết số lượng cam kết bạn đang đi trước/sau chi nhánh theo dõi từ xa. Bạn cần phải thực hiện git fetch đầu tiên mặc dù, bởi vì nếu không git không thể biết nếu bất cứ điều gì mới đi vào từ xa.

1

Nếu branch được đảm bảo là tổ tiên của origin/branch (nghĩa là nhanh forwardable), sau đó

git log --oneline branch..origin/branch 

nên in các cam kết trong giữa chúng, mỗi trong một dòng. Bạn có thể đếm các dòng trong python hoặc wc -l.

Không chắc chắn nếu giải pháp đơn giản và chung tồn tại. Có thể không có tổ tiên chung cho origin/branchbranch, nếu chi nhánh trẻ mồ côi có liên quan.

18

Nếu bạn có một phiên bản đầy đủ mới của git, bạn có thể sử dụng:

$ git rev-list --count --left-right branch...origin/branch 
2 1 

Con số đầu tiên nếu số lượng cam kết branch là trước origin/branch, và thứ hai là số lượng cam kết phía sau. Vì vậy, chi nhánh này có hai cam kết không phải là thượng nguồn, và có một cam kết ngược dòng mà không phải là trong chi nhánh địa phương của tôi được nêu ra.

Tôi tin rằng đó là 1,6 hoặc 1,7 khi --count được giới thiệu.

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