2012-03-17 33 views
9

Để tích hợp liên tục của tôi được xây dựng, tôi muốn đảm bảo không có tệp đi lạc nào được gửi trong hộp cát git của tôi và không có tệp nào bị vô tình thay đổi.Cách hiệu quả nhất để có được một hộp cát git sạch sẽ là gì?

Tôi biết về git reset --hard HEAD và điều này giải quyết một phần vấn đề. Nhưng tôi đoán những gì tôi muốn làm là xóa tất cả các tập tin untracked và bỏ qua. Tôi có thể làm theo cách bạo lực và chỉ cần làm:

rm -rf * 
git checkout -f 

Nhưng phải có cách hiệu quả hơn để thực hiện. Bất kỳ ý tưởng?

+2

'git reset --hard HEAD' + 'git sạch -f' -d ? – madth3

+0

@ madth3, cảm ơn, tôi nghĩ điều đó thực sự hiệu quả! – mpontillo

Trả lời

12

(mở rộng cho hậu thế)

Vấn đề của bạn có thể được chia làm hai: Quay trở lại tập tin sửa đổi trạng thái của họ trong cam kết cuối cùng và loại bỏ bất kỳ tập tin bổ sung mà không thuộc trong kho:

git reset --hard HEAD 

sẽ mất tập tin của bạn trở lại trạng thái mà họ có trong HEAD, loại bỏ bất kỳ sửa đổi (ngay cả khi họ là sân khấu để được cam kết)

git clean -f -d -x 

sẽ xóa mọi tệp hoặc thư mục không được theo dõi, bao gồm các tệp bị bỏ qua (Cảm ơn @Jefromi)

+0

Cảm ơn; Tôi đã quên lệnh 'git clean'. Tôi biết tôi đã nhận được deja vu khi tôi đang viết câu hỏi đó. =) – mpontillo

+0

Vâng, tôi đã sử dụng lệnh 'reset' thường xuyên hơn nhưng tìm kiếm' clean' để hoàn thành yêu cầu của bạn thật dễ dàng. – madth3

+1

Bạn sẽ muốn sử dụng '-x' với git-clean quá; điều đó làm cho nó cũng xóa các tập tin bị bỏ qua. Điều này có thể đáng kể, nếu những tệp bị bỏ qua đó là các sản phẩm xây dựng trung gian và quá trình xây dựng của bạn không hoàn hảo. – Cascabel

-1

Không phải là bản sao riêng biệt của repo cho CI giải pháp tốt hơn?

Bạn chỉ cần lấy | clone từ của bạn-lao động repo tất cả thay đổi cam kết trước khi CI-công việc (không có bất kỳ hiện vật và thay đổi cục)

+0

"bản sao riêng biệt"? Chúng tôi đang nói gigabyte, vì vậy tôi không muốn tái sao chép mọi lúc. – mpontillo

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