Mercurial (hg) chỉ cam kết một số tệp nhất định


119

Tôi đang cố gắng chỉ cam kết một số tệp nhất định với Mercurial. Vì hg có tự động thêm bất cứ khi nào tôi cố gắng thực hiện một thay đổi, nó muốn cam kết tất cả các tệp. Nhưng tôi không muốn điều đó vì một số tệp nhất định chưa "sẵn sàng".

hg commit -I thefile.foo

nhưng điều này chỉ dành cho một tệp. Cách tốt hơn cho tôi là nếu tôi có thể tắt tính năng tự động thêm như trong Git. Điều này có khả thi không?


5
sử dụng phần mở rộng hồ sơ? hoặc bạn có thể chỉ định các tệp trên dòng lệnhhg ci foo bar baz
tonfa

4
@tonfa, repost nhận xét của bạn như một câu trả lời
Andrei Dziahel

Xin đừng phá hoại bài viết của bạn.
Glorfindel

Tại sao bạn lại phá hoại một câu hỏi hay như vậy?
Praveen Kumar Purushothaman

Câu trả lời:


155

Bạn có thể chỉ định các tệp trên dòng lệnh, như tonfa viết:

$ hg commit foo.c foo.h dir/

Điều đó chỉ hoạt động và đó là những gì tôi làm mọi lúc. Bạn cũng có thể sử dụng --includecờ mà bạn đã tìm thấy và bạn có thể sử dụng nó nhiều lần như sau:

$ hg commit -I foo.c -I "**/*.h"

Bạn thậm chí có thể sử dụng một fileset để chọn các tập tin bạn muốn cam kết:

$ hg commit "set:size(1k - 1MB) and not binary()"

Không có cài đặt nào sẽ tắt hành vi tự động thêm và làm cho Mercurial hoạt động như Git. Tuy nhiên, phần mở rộng mq có thể được quan tâm. Đó là một tiện ích mở rộng nâng cao, nhưng nó cho phép bạn làm

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Tuy nhiên, bản thân tôi không thực sự sử dụng MQ cho mục đích này, vì tôi nghĩ chỉ cần chỉ định tên tệp trên dòng lệnh là đủ.


Hành vi "tự động thêm hành vi" nào? Hg có sử dụng để tự động thêm tệp không? Bởi vì bây giờ bạn phải làm như vậy một cách rõ ràng nếu không chúng sẽ không được theo dõi.
mpen

1
@mpen tôi nghĩ anh ấy có nghĩa là như thế nào gh tự động thêm mỗi tập tin sửa đổi để một cam kết, git không giống như trong đó bạn phải tự thêm các tập tin sửa đổi để tiếp theo cam kết, và có thể để lại một số tập tin sửa đổi không bị giam
simpleuser

24

Nếu bạn muốn cam kết một vài tệp và loại trừ nhiều tệp khác, hãy liệt kê rõ ràng các tệp bạn muốn cam kết. -Ichỉ cần thiết nếu bạn muốn sử dụng các mẫu thay vì tệp.

Nếu bạn muốn cam kết nhiều tệp và chỉ loại trừ một vài tệp, việc sử dụng -Xsẽ thuận tiện hơn.

Ví dụ: được cung cấp một kho lưu trữ có chứa "tệp_1", "tệp_2" và "tệp_3", các giá trị sau là tương đương, nhưng dễ dàng hơn / nhanh hơn để nhập:

hg commit file_1 file_2
hg commit -X file_3

8

Kể từ 3.8, bạn cũng có thể sử dụng hg commit --interactiveđể chọn tệp (trước 3.8, bạn có thể sử dụng phần mở rộng crecord cho chức năng tương tự). Các --interactive(hoặc chỉ -i) cờ sẽ gây hg để nhắc bạn cho các tập tin bạn muốn bao gồm trong các cam kết. Như một phần thưởng bổ sung, bạn thậm chí có thể bao gồm / loại trừ các phần trong tệp.

Đây là một ví dụ về giao diện trông như thế nào. Lưu ý rằng đây là một ảnh chụp màn hình cũ (của crecord thực sự) nên giao diện đã thay đổi một chút (nhưng cơ bản là như nhau). ảnh chụp màn hình crecord

Lưu ý để có được giao diện đó bạn cần kích hoạt giao diện lời nguyền. Bạn có thể làm điều đó cho một lần chạy với hg commit --config ui.interface=curses --interactivehoặc nói chung bằng cách thêm những thứ sau vào .hgrc:

[ui]
interface = curses
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.