2012-10-31 24 views
5

Kể từ gitmodules đã được giới thiệu trong Git, tôi muốn thêm họ như vậy:Làm thế nào để làm cho git bỏ qua những thay đổi để submodules theo mặc định

[submodule "actionbarsherlock"] 
path = actionbarsherlock 
url = git://github.com/JakeWharton/ActionBarSherlock.git 
ignore = dirty 

Phần quan trọng ở đây là ignore = dirty.

Khi sử dụng lệnh git submodule add, tôi buộc phải tự thêm dòng này vào tệp .gitmodules.

Tôi làm cách nào để thực hiện hành vi mặc định này cho mỗi git submodule add Tôi sẽ thực hiện trong tương lai?

Tôi biết về cấu hình submodule.<name>.ignore, nhưng làm cách nào để áp dụng cấu hình cho tất cả theo mặc định?

+0

Không biết nếu có cách nào để thực hiện việc này theo mặc định, nhưng bạn có thể dễ dàng thêm bí danh hoặc tập lệnh để thực hiện việc này cho bạn. – Christopher

+0

Tôi không thấy cách thực hiện điều đó bằng bí danh. Và đối với kịch bản, tôi chỉ hy vọng git có một tùy chọn mặc định cho nó – shkschneider

+0

Git sẽ xem như một bí danh bất kỳ tập lệnh nào trong $ PATH bắt đầu bằng 'git- ' như 'git '. Bạn chỉ có thể viết một kịch bản lệnh shell chấp nhận tên submodules, thêm nó, sau đó phát ra 'submodule. Cấu hình .ignore' và chỉ gọi nó là 'git supersubmodule' hoặc cái gì đó. – Christopher

Trả lời

3

Vì vậy, để đóng này, không, không có tùy chọn mặc định cho nó (thật đáng buồn).

+0

Điều này vẫn có vẻ đúng trên git v2.7.0. –

1

Tôi không chắc về tùy chọn mặc định. Được nó một trạng thái nhị phân (bỏ qua hay không), bạn có thể nhận được lực kéo với:

diff.ignoreSubmodules 
    Sets the default value of --ignore-submodules. Note that this affects only git diff Porcelain, and not lower level diff commands such as git diff-files. git checkout also 
    honors this setting when reporting uncommitted changes. 

Nhưng khi bạn đang sử dụng dirty Tôi không chắc chắn có một cách để thiết lập mặc định. Bất kể, bạn có thể làm điều này với một bí danh git trong $PATH của bạn. Viết tập lệnh chấp nhận mô-đun con làm đối số và đặt giá trị cấu hình dirty thích hợp, sau đó thêm tập lệnh đó vào $PATH của bạn. Gọi nó là git-<command> và nó sẽ có sẵn dưới dạng git <command>.

+0

Ok, tôi biết các tùy chọn cho khác biệt và tình trạng, nhưng muốn một điều tốt hơn. Một kịch bản là một lựa chọn posible. – shkschneider

+0

Đây là một ứng cử viên tốt cho danh sách git. Họ có thể cho bạn một câu trả lời nhất định, và nếu câu trả lời đó là "không", một bản vá có thể được đề xuất. – Christopher

-1

Ý của bạn là gì?

git config --global core.ignore dirty

mà viết những ưu tiên cho tập tin ~/.gitconfig của bạn.

+0

Tôi không nghĩ rằng nó hoạt động. Ít nhất nó không làm việc cho tôi (git 1.8.5). –

+0

@brianclements Phiên bản nào hỗ trợ tùy chọn này? – shkschneider

+0

Tôi sử dụng git 1.9.1 trên Ubuntu 14.04. Nhưng lần thứ hai, tôi nghĩ điều này cũng không hiệu quả với tôi. Nhưng sau đó một lần nữa, cảnh báo tôi với "những cam kết mới" và "nội dung không được bảo vệ" cho các mô-đun con của tôi là hành vi tôi muốn dù sao có lẽ tôi đã hiểu lầm câu hỏi của OP. – brianclements

4

Lưu ý rằng ngay cả khi có cấu hình như vậy, git 2.0.1 (ngày 25 tháng 6 năm 2014) sẽ vẫn hiển thị cho bạn một mô-đun con đã được tổ chức.

Xem commit 1d2f393 bởi Jens Lehmann (jlehmann)

Hiện nay thiết submodule.<name>.ignore và/hoặc diff.ignoreSubmodules để "all" ngăn chặn tất cả các kết quả của sự thay đổi submodule cho gia đình khác, tình trạng và cam kết.

Đối với trạng thái và cam kết điều này thực sự khó hiểu, vì ngay cả khi người dùng chọn ghi lại cam kết mới cho mô-đun con bị bỏ qua bằng cách thêm thủ công thay đổi này sẽ không hiển thị dưới các thay đổi được cam kết.
Để thêm sự xúc phạm đến thương tích, sau đó "git commit" sẽ lỗi với "nothing to commit" khi chỉ bỏ qua các mô-đun con bị bỏ qua.

Khắc phục bằng cách thực hiện wt_status luôn in các thay đổi mô-đun theo giai đoạn, bất kể cài đặt bỏ qua nào được định cấu hình.
Ngoại lệ duy nhất là khi người dùng sử dụng rõ ràng tùy chọn dòng lệnh "--ignore-submodules=all", trong trường hợp đó, đầu ra submodule vẫn bị chặn.
Điều này cũng làm cho "git commit" hoạt động trở lại khi chỉ sửa đổi mô-đun con bị bỏ qua là được tổ chức, vì lệnh đó sử dụng thành viên "có thể cam kết" của cấu trúc wt_status để xác định xem có thay đổi theo giai đoạn hay không.

Xem thêm commit c215d3d cho phần git commit.

+0

Thỏa thuận tương tự cho git-gui: https://github.com/git/git/commit/e0db1dd7d4bc87825f0d7d743f1a01b4461a59ff – VonC

1

Hôm nay tôi phát hiện ra rằng có thể sử dụng git config để thay đổi các tập tin .gitmodules, và do đó có thể thêm phớt lờ cờ bẩn mà không đi sâu vào tập tin và thêm dòng bằng tay:

git config -f .gitmodules submodule.actionbarsherlock.ignore dirty 

Trong trường hợp của tôi, tôi đã có thể tự động hóa hai bước trong một kịch bản lệnh đó.