2009-03-01 34 views
10

Có ai biết của một hệ thống ống nước git (chắc chắn không phải sứ) có nghĩa là xác định xem:theo chương trình git status

  • có chỉnh sửa trong repo từ cam kết cuối cùng, và
  • dù ĐẦU địa phương là trước origin/HEAD

Tôi đang tìm cách xác định điều này theo chương trình, do đó mong muốn không giải quyết được điều này bằng sứ và nhiều loại sed-fu khác nhau.

Trả lời

9

Cập nhật: dưới dạng mentioned below bởi toupeira, bạn có thể sử dụng tùy chọn --porcelaingit status (vì cam kết 6f15787, tháng 9 năm 2009, git 1.7.0).

tôi đã đề cập trong câu trả lời của tôi "What does the term porcelain mean in Git?" rằng:

Có lẽ ý nghĩa của --porcelain ở đây là "sản xuất ra phù hợp cho tiêu thụ bởi các kịch bản sứ"

Tuy nhiên, đó sẽ không hiển thị thông tin trước/sau: xem "What to add to “git status --porcelain” to make it behave like “git status”?": cho rằng, bạn vẫn cần phải sử dụng các lệnh khác: xem "How to know if git repository has changes that have not been synchronized with server?"


câu trả lời ban đầu Tháng Ba 2009

Trong lệnh sứ, a:

$ git diff HEAD 

mang đến cho bạn những thay đổi kể từ khi cam kết cuối cùng (những gì bạn sẽ được cam kết nếu bạn chạy "git commit -a") .

Một tương đương có thể trong lệnh hệ thống ống nước sẽ là:

$ git ls-files -m 

niêm yết tất cả các sửa đổi (làm việc thư mục hoặc chỉ mục) tập tin


Nếu bạn tạo kho lưu trữ của bạn bằng cách nhân bản kho lưu trữ của người khác, các chi nhánh "master" từ xa được sao chép vào một nhánh địa phương có tên là "origin". Bạn nhận được nhánh "master" của riêng bạn mà không bị ràng buộc với kho lưu trữ từ xa.

Luôn có đầu hiện tại, được gọi là HEAD. (Điều này thực sự là một liên kết tượng trưng, ​​.git/HEAD, vào một tập tin như refs/con/chủ.)

chạy "tình trạng git" và phân tích kết quả:

# On branch master 
# Your branch is ahead of 'origin/master' by 11 commits. 
# 

Xem thêm chi tiết trong SO câu hỏi "Why is Git telling me “Your branch is ahead of ‘origin/master’ by 11 commits.” and how do I get it to stop?"

có thể tương đương trong lệnh hệ thống ống nước:

* git-for-each-ref 

niêm yết tất cả các cam kết, nhưng đòi hỏi phải phân tích đầu ra cũng ...

Một lần nữa, git ls-files could be used to produced the same result than a git status.

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude \ 
        --others \ 
        --modified \ 
        -t 
+0

Tuyệt vời. Cảm ơn rất nhiều. –

+5

"git ls-files --exclude-standard ..." sẽ đơn giản hơn một chút. –

2

git status nay đã có một cuộc tranh luận --porcelain cho các mục đích kịch bản (cũng như một sự thay thế -z cho máy phân tích), điều này được ưa thích để git ls-files mà không hiển thị tập tin thêm vào chỉ mục.

+0

Từ [tài liệu hướng dẫn cho '--porcelain'] (https://www.kernel.org/pub/software/scm/git/docs/git-status.html):" Cung cấp đầu ra theo cách dễ dàng định dạng phân tích cú pháp cho các tập lệnh. Điều này tương tự như đầu ra ngắn, nhưng sẽ vẫn ổn định trên các phiên bản git và bất kể cấu hình người dùng. " –

+0

Nó không phải là rõ ràng từ các ghi chú phát hành về khi cờ '--porcelain' được thêm vào, tuy nhiên. –

+0

Tôi đã tìm thấy nó! Tôi đã tìm kiếm nhật ký Git với 'git log --grep" --porcelain "--date-order' và chúng cho thấy cờ được thêm vào trong cam kết [' 6f15787181a163e158c6fee1d79085b97692ac2f'] (https://github.com/git/ git/commit/6f15787181a163e158c6fee1d79085b97692ac2f) vào ngày 5 tháng 9 năm 2009. Ngẫu nhiên, 'git tag --contains 6f15787 | sắp xếp -V | less' tiết lộ rằng điều này đã không thực sự được phát hành trong một phiên bản ổn định cho đến v1.7.0, mà là vào [Febuary 12th, 2010] (https://github.com/git/git/commit/e923eaeb901ff056421b9007adcbbce271caa7b6). –

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