Một chiến lược tốt để giữ máy tính xách tay IPython dưới sự kiểm soát phiên bản là gì?
Định dạng máy tính xách tay khá phù hợp với kiểm soát phiên bản: nếu một người muốn phiên bản kiểm soát máy tính xách tay và các đầu ra thì điều này hoạt động khá tốt. Sự khó chịu xuất hiện khi người ta chỉ muốn phiên bản kiểm soát đầu vào, ngoại trừ đầu ra ô (hay còn gọi là "sản phẩm xây dựng") có thể là các đốm nhị phân lớn, đặc biệt là cho phim và cốt truyện. Cụ thể, tôi đang cố gắng tìm một quy trình làm việc tốt:
- cho phép tôi chọn giữa bao gồm hoặc loại trừ đầu ra,
- ngăn tôi vô tình cam kết đầu ra nếu tôi không muốn nó,
- cho phép tôi giữ đầu ra trong phiên bản địa phương của tôi,
- cho phép tôi xem khi nào tôi có thay đổi trong đầu vào bằng hệ thống kiểm soát phiên bản của mình (nghĩa là nếu tôi chỉ kiểm soát phiên bản đầu vào nhưng tệp cục bộ của tôi có đầu ra, thì tôi muốn xem liệu đầu vào có thay đổi không (yêu cầu cam kết ). Sử dụng lệnh trạng thái kiểm soát phiên bản sẽ luôn đăng ký chênh lệch do tệp cục bộ có đầu ra.)
- cho phép tôi cập nhật sổ ghi chép làm việc của mình (có chứa đầu ra) từ sổ ghi chép sạch được cập nhật. (cập nhật)
Như đã đề cập, nếu tôi chọn bao gồm các kết quả đầu ra (điều mong muốn khi sử dụng nbviewer chẳng hạn), thì mọi thứ đều ổn. Vấn đề là khi tôi không muốn phiên bản kiểm soát đầu ra. Có một số công cụ và tập lệnh để tước đầu ra của sổ ghi chép, nhưng tôi thường gặp phải các vấn đề sau:
- Tôi vô tình cam kết một phiên bản với đầu ra, do đó làm ô nhiễm kho lưu trữ của tôi.
- Tôi xóa đầu ra để sử dụng kiểm soát phiên bản, nhưng thực sự sẽ giữ đầu ra trong bản sao cục bộ của tôi (đôi khi phải mất một thời gian để sao chép chẳng hạn).
- Một số tập lệnh dải đầu ra thay đổi định dạng một chút so với
Cell/All Output/Clear
tùy chọn menu, do đó tạo ra tiếng ồn không mong muốn trong các khác biệt. Điều này được giải quyết bằng một số câu trả lời. - Khi kéo các thay đổi sang phiên bản sạch của tệp, tôi cần tìm một số cách kết hợp những thay đổi đó trong sổ ghi chép làm việc của mình mà không phải chạy lại mọi thứ. (cập nhật)
Tôi đã xem xét một số tùy chọn mà tôi sẽ thảo luận dưới đây, nhưng vẫn chưa tìm thấy một giải pháp toàn diện tốt. Một giải pháp đầy đủ có thể yêu cầu một số thay đổi đối với IPython hoặc có thể dựa vào một số tập lệnh bên ngoài đơn giản. Tôi hiện đang sử dụng đồng bóng , nhưng muốn một giải pháp cũng hoạt động với git : một giải pháp lý tưởng sẽ là thuyết bất khả tri kiểm soát phiên bản.
Vấn đề này đã được thảo luận nhiều lần, nhưng không có giải pháp rõ ràng hoặc rõ ràng từ quan điểm của người dùng. Câu trả lời cho câu hỏi này sẽ cung cấp chiến lược dứt khoát. Sẽ ổn nếu nó yêu cầu một phiên bản (thậm chí phát triển) gần đây của IPython hoặc một phần mở rộng dễ cài đặt.
Cập nhật: Tôi đã chơi với phiên bản máy tính xách tay đã sửa đổi của mình , tùy chọn lưu .clean
phiên bản với mỗi lần lưu bằng các đề xuất của Gregory Crosswhite . Điều này đáp ứng hầu hết các ràng buộc của tôi nhưng không giải quyết được những điều sau đây:
- Đây chưa phải là một giải pháp tiêu chuẩn (yêu cầu sửa đổi nguồn ipython. Có cách nào để đạt được hành vi này với một phần mở rộng đơn giản không? Cần một số loại móc lưu.
- Một vấn đề tôi gặp phải với quy trình làm việc hiện tại là kéo theo những thay đổi. Những thứ này sẽ đến
.clean
tập tin và sau đó cần được tích hợp vào phiên bản làm việc của tôi. (Tất nhiên, tôi luôn có thể thực hiện lại sổ ghi chép, nhưng điều này có thể gây khó khăn, đặc biệt là nếu một số kết quả phụ thuộc vào tính toán dài, tính toán song song, v.v.) Tôi không biết cách giải quyết vấn đề này . Có lẽ một quy trình công việc liên quan đến một phần mở rộng như ipycache có thể hoạt động, nhưng điều đó có vẻ hơi phức tạp.
Ghi chú
Loại bỏ (tước) đầu ra
- Khi máy tính xách tay đang chạy, người ta có thể sử dụng
Cell/All Output/Clear
tùy chọn menu để loại bỏ đầu ra. - Có một số tập lệnh để loại bỏ đầu ra, chẳng hạn như tập lệnh nbstripout.py loại bỏ đầu ra, nhưng không tạo ra đầu ra giống như sử dụng giao diện máy tính xách tay. Điều này cuối cùng đã được bao gồm trong repo ipython / nbconvert , nhưng điều này đã được đóng lại nói rằng những thay đổi hiện được bao gồm trong ipython / ipython , nhưng chức năng tương ứng dường như chưa được đưa vào. (cập nhật) Điều đó đang được nói, giải pháp của Gregory Crosswhite cho thấy điều này khá dễ thực hiện, ngay cả khi không gọi ipython / nbconvert, vì vậy cách tiếp cận này có thể khả thi nếu nó có thể được nối đúng cách.
Nhóm tin
Các vấn đề
- 977: Yêu cầu tính năng Notebook (Mở) .
- 1280: Xóa - tất cả tùy chọn lưu (Mở) . (Theo các cuộc thảo luận này .)
- 3295: sổ ghi chép tự động: chỉ xuất các ô được đánh dấu rõ ràng (Đã đóng) . Được giải quyết bằng phần mở rộng 11 Thêm ma thuật writeandexecute (Sáp nhập) .
Yêu cầu kéo
- 1621: xóa Trong các dấu nhắc [] trên "Xóa tất cả đầu ra" (Đã hợp nhất) . (Xem thêm 2519 (Đã hợp nhất) .)
- 1563: cải tiến ClearDefput (Sáp nhập) .
- 3065: khả năng khác biệt của máy tính xách tay (Đóng) .
- 3291: Thêm tùy chọn bỏ qua các ô đầu ra khi lưu. (Đóng cửa) . Điều này có vẻ rất phù hợp, tuy nhiên đã bị đóng với đề xuất sử dụng bộ lọc "sạch / nhòe". Một câu hỏi có liên quan bạn có thể sử dụng cái gì nếu bạn muốn loại bỏ đầu ra trước khi chạy git diff? dường như chưa được trả lời
- 3312: WIP: Máy tính xách tay lưu móc (Đã đóng) .
- 3747: ipynb -> biến ipynb (Đóng) . Điều này được phản đối trong 4175 .
- 4175: nbconvert: cơ sở xuất khẩu Jinjaless (Sáp nhập) .
- 142: Sử dụng STDIN trong nbstripout nếu không có đầu vào nào được đưa ra (Mở) .
--script
tùy chọn, nhưng nó đã bị xóa. Tôi đang đợi cho đến khi các móc hậu lưu được triển khai ( đã được lên kế hoạch ) tại thời điểm đó tôi nghĩ rằng tôi sẽ có thể cung cấp một giải pháp chấp nhận được kết hợp một số kỹ thuật.