Làm cách nào để kiểm tra, trong tập lệnh, nếu có thay đổi cục bộ? Có lẽ kết hợp với git describe
?Cách tạo "git describe" đề cập đến sự hiện diện hoặc vắng mặt của các thay đổi cục bộ?
Trả lời
Bạn sẽ cần phải chắc chắn rằng cả hai thuộc tính sau được đáp ứng:
Đó không có sự khác biệt giữa đầu và bộ nhớ cache index
git diff-index --cached HEAD
Đó có không có sự khác biệt giữa chỉ mục và cây đang hoạt động:
git diff-files
thông số sẽ đặt mã thoát theo liệu có sự khác biệt hay không (bắt đầu một thời gian sau git 1.4). Nếu bạn cần làm cho nó hoạt động trên git 1.4, bạn cần chạy các lệnh mà không cần --quiet
và kiểm tra xem chúng có tạo ra bất kỳ đầu ra nào không.
Lưu ý:git diff
là lệnh sứ và do đó không được sử dụng trong tập lệnh. Thay vào đó, hãy sử dụng các lệnh đường ống dẫn nước trên.
Ví dụ mã vỏ, lấy từ git_version.sh script tôi:
git_dirty=yes
# git-1.4 does not understand "git-diff-files --quiet"
# git-1.4 does not understand "git-diff-index --cached --quiet HEAD"
if [ "x$($GIT diff-files)" = "x" ] && [ "x$($GIT diff-index --cached HEAD)" = "x" ]; then
git_dirty=no
fi
Nếu bạn có thể yêu cầu một phiên bản git> = 1.5, if git diff-files --quiet && git diff-index --quiet --cached HEAD; then
có thể thay thế ở trên so sánh.
Lưu ý: Giải pháp này (giống hệt như Antony của tương tác git diff HEAD --quiet
) chỉ phát hiện ra những thay đổi địa phương so với HEAD. Tuy nhiên, các cam kết cục bộ có thể lập luận cũng được coi là thay đổi cục bộ và tự nhiên sẽ không hiển thị ở bất kỳ điểm nào khác với HEAD. Bạn sẽ cần phải kiểm tra giá trị SHA1 git describe
sử dụng để phát hiện xem HEAD có từ một tập hợp các cam kết mà bạn cho là không phải là thay đổi cục bộ hay không.
git status
thoát với trạng thái khác 0 nếu không có thay đổi cục bộ.
Nhưng tôi không hiểu ý bạn là "kết hợp với git mô tả".
v1.1-5-g1234567 có nghĩa là không có thay đổi địa phương và v1.1-5-g1234567 (+) có nghĩa là với thay đổi cục bộ. trạng thái git trả về 1 ở đây khi các thay đổi cục bộ không được thay đổi là hiện tại –
git diff --quiet
trả về với trạng thái thoát 1 nếu có thay đổi và 0 nếu không có.
Hãy nhớ rằng nó sẽ hiển thị khác biệt giữa các thay đổi theo giai đoạn và thư mục hoạt động. Nếu bạn quan tâm đến các thay đổi giữa HEAD và thư mục làm việc, bạn nên sử dụng git diff HEAD --quiet
.
--quiet
ngụ ý --exit-code
.
Tôi thấy hai vấn đề với giải pháp này: a) 'git diff' là sứ, và git ngược dòng đề nghị sử dụng sứ trong kịch bản. b) 'git diff' sẽ bỏ qua bất kỳ thay đổi không được cam kết nào trong bộ đệm chỉ mục. Xem câu trả lời của tôi tại http://stackoverflow.com/questions/1985301/how-to-make-git-describe-mention-the-presence-or-absence-of-local-changes/1989142#1989142 để biết cách giải quyết những vấn đề này. – ndim
Câu hỏi đặt ra là tìm các thay đổi _local_. 'git diff HEAD --quiet' tìm các thay đổi _local_ chính xác là kết quả của hai lệnh hệ thống ống nước bạn đã khuyên. Sự khác biệt giữa sứ/hệ thống ống nước không quá quan trọng ở đây. –
Các nhà phát triển git nói rằng để sử dụng lệnh đường ống dẫn nước cho các tập lệnh, vì vậy tôi căn cứ các tập lệnh của tôi trên các tập lệnh đó. Đối với các thay đổi * cục bộ *, 'git diff HEAD --quiet' chắc chắn có chức năng tương đương với hai lệnh của tôi, nhưng tôi vẫn thích API git upstream đề xuất cho các kịch bản lệnh. – ndim
Vì git 1.6.6, git-describe
đã chấp nhận tùy chọn --dirty
.Nếu bạn có thay đổi không bị giam trong cây làm việc của bạn sau đó bạn sẽ nhận được kết quả như thế này:
$ git describe --dirty
1.0.2-2-g215081f-dirty
- 1. Chuyên mẫu C++ dựa trên sự hiện diện/vắng mặt của một thành viên lớp học?
- 2. Kiểm tra sự vắng mặt của siêu lớp trong bộ xử lý chú thích
- 3. git kéo giữ các thay đổi cục bộ
- 4. GIT: Thêm các thay đổi cục bộ vào chi nhánh không phải hiện tại
- 5. Làm cách nào để theo dõi các thay đổi/thay đổi chỉ cục bộ bằng git-svn?
- 6. Git: Hoàn tác thay đổi cục bộ; git add. + git rm?
- 7. Cách đẩy các thay đổi cục bộ vào kho lưu trữ git từ xa trên bitbucket
- 8. Git subtree hợp nhất, nhưng giữ các thay đổi cục bộ?
- 9. Không thể thực hiện thay đổi đối với kho git cục bộ
- 10. GPathResult ..presence hay vắng mặt của một nút
- 11. vắng mặt của chú thích @Temporal trong ngủ đông
- 12. git pull (chỉ cập nhật tệp cục bộ)
- 13. TFS: gửi các thay đổi được thực hiện cục bộ trong một chi nhánh đến một chi nhánh khác
- 14. git: Làm cách nào để ghi đè tất cả thay đổi cục bộ khi hợp nhất?
- 15. Rò rỉ bộ nhớ có hoàn toàn vắng mặt trong các ứng dụng Java không?
- 16. Git Pull trong khi bỏ qua các thay đổi cục bộ?
- 17. Thay đổi vị trí bộ nhớ đệm cục bộ của gradle cho tạo đám mây Jenkins
- 18. Truy cập tệp biến (cục bộ hoặc toàn cục) của PHP từ smarty
- 19. Tại sao tồn tại WeakHashMap, nhưng WeakSet vắng mặt?
- 20. Làm cách nào để ghi đè các thay đổi cục bộ của mình trong TortoiseSVN?
- 21. Cách thay đổi màu mặt trong Three.js
- 22. Chuyển đổi các mảnh vỡ hoặc hoạt động (ví dụ: bố cục) về thay đổi hướng
- 23. Git: Làm cách nào để ghi đè thay đổi cục bộ?
- 24. Trong bảng kết nối, giải pháp nào tốt nhất cho sự vắng mặt của Rails đối với khóa tổng hợp?
- 25. git chọn lọc hoàn nguyên thay đổi cục bộ từ một tệp
- 26. Khởi động lại Git không thành công, 'Các thay đổi cục bộ của bạn đối với các tệp sau sẽ bị ghi đè bằng cách hợp nhất'. Không có thay đổi cục bộ?
- 27. Mẫu dữ liệu cốt lõi: cách cập nhật hiệu quả thông tin cục bộ với các thay đổi từ mạng?
- 28. Luồng công việc thực tế để giữ các thay đổi cục bộ không được yêu cầu trong git là gì?
- 29. Cách truy cập các tệp cục bộ trong dự án
- 30. Thay đổi khoảng cách ngang giữa các mặt (ggplot2)
Xem thêm nhận xét của tôi tại http://stackoverflow.com/questions/1985301/how-to-make-git-describe-mention-the-presence-or-absence-of-local-changes/1985431#1985431 –