2012-04-15 31 views
7

Tôi đang phát triển xác nhận và linting tiện ích được tích hợp với nhiều cam kết móc, bao gồm Git mộtGit pre-cam kết nối: nhận danh sách các tập tin thay đổi

https://github.com/miohtama/vvv

Hiện nay xác nhận và xơ đang chạy chống lại toàn bộ codebase dự án trên mọi cam kết. Tuy nhiên, sẽ tốt hơn nếu chạy chúng chỉ với các tệp đã thay đổi. Đối với điều này, tôi sẽ cần phải biết danh sách tập tin thay đổi trong móc precommit Git của tôi (bằng Python)

https://github.com/miohtama/vvv/blob/master/vvv/hooks/git.py

Những tùy chọn tôi phải trích xuất các danh sách tập tin thay đổi (bằng Python nếu có vấn đề)?

Trả lời

5

The pre-cam kết nối là một chút đau đớn, nếu bạn thực sự muốn làm cho mọi việc làm việc "đúng", bởi vì những gì trong cây công việc không nhất thiết phải giống như những gì là để được cam kết:

$ echo morestuff >> file1; echo morestuff >> file2 
$ git add file1 # but not file2 
$ git commit -m 'modified two files but check in just one' 

Bạn có thể sử dụng git diff-index --cached HEAD để nhận danh sách "những gì sắp được đăng ký". Xem thêm, ví dụ: http://newartisans.com/2009/02/building-a-better-pre-commit-hook-for-git/.

+0

Đối với liên kết bài viết: khá đau để giữ bản sao thứ hai của kho lưu trữ chỉ để kiểm tra xem tệp nào đã thay đổi: ( –

+0

Bạn không cần bản sao thứ hai của repo, nhưng bạn có thể Về cơ bản có hai lựa chọn thay thế: Về cơ bản có hai lựa chọn thay thế: kiểm tra chỉ mục ở nơi khác, để bạn có được một cây làm việc phù hợp với những gì cần kiểm tra; hoặc xác minh rằng cây công việc hiện tại là "sạch sẽ" ", để bạn có thể sử dụng thư mục hiện tại (móc trước cam kết được chạy trong cây công việc). – torek

+0

Hoạt động hoàn hảo, điều này đến nay. Đây là giải pháp đầy đủ https://github.com/miohtama/vvv/blob/ master/vvv/hooks/git.py –

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