Git toàn cầu bỏ qua không hoạt động


83

Tôi đã tạo tệp .gitignore_globalvà đặt nó vào thư mục cài đặt git của mình. Khi tôi chạy lệnh:

git config --global core.excludesfile ~/.gitignore

các quy tắc trong tệp bỏ qua không được áp dụng cho các cam kết của tôi.

Khi tôi đổi tên tệp .gitignorevà đặt nó vào thư mục gốc dự án của mình, các quy tắc sẽ được áp dụng.

Có gì sai ở đây?


@Jarrod `~ / .gitignore_global` là ý của OP và chỉ là lỗi đánh máy trong bài đăng, mặc dù anh ấy đã chấp nhận câu trả lời của tôi, vì vậy bản chỉnh sửa của bạn không tốt
CharlesB

Câu trả lời:


167

Có thể bạn cần làm:

git config --global core.excludesfile ~/.gitignore_global 

Và uống cà phê.


Xin lỗi, đó là ý tôi. Cái mà tôi đã sao chép chỉ đang lộn xộn để xem cái gì hoạt động.
user880954

Đúng cho cà phê và răng. Bạn có chắc chắn .gitignore_global có trong $ HOME của bạn không? bạn nói bạn đã cài đặt nó trong thư mục cài đặt git?
CharlesB

bất kỳ ý tưởng tại sao nó vẫn không hoạt động ở đây? Tôi có một tệp .7z mà tôi muốn bỏ qua; Tôi đã thêm các quy tắc này: gist.github.com/octocat/9257657 ; và sau khi tôi thay đổi tệp, nó vẫn được tạo phiên bản trên .git :(
Aquarius Power

2
Có, gitignoretệp chỉ hoạt động cho các tệp chưa được kiểm tra, không hoạt động cho những tệp đã được thêm trước đó
CharlesB

1
Một điều khác tôi vừa nhận thấy là mẫu của dòng trong tệp .gitignore_global phải khớp với đường dẫn từ thư mục chính của dự án CHÍNH XÁC. Ví dụ: nếu tên dự án là myProject, tạo mã SQL trong myProject / sql / init và bạn muốn bỏ qua myProject / sql / init / *. Sql thì mục nhập phải là * / sql / init /. Tương tự, đối với mã DAO / DTO được tạo trong myProject / msg / dao / và myProject / dao, phải có hai mục nhập để bắt TẤT CẢ các tệp trong thư mục con dao - phải thêm * / * / dao / và * / dao /.
Keith Kibler

80

Tôi nghĩ rằng tôi sẽ sửa chữa điều này. Có một lý do khác khiến tệp bỏ qua chung dường như không hoạt động. Đó là điều mà tôi không nghĩ rằng đã được đề cập trong các câu trả lời trước đó. Rõ ràng là - tất nhiên - rất dễ bỏ sót.

Đó là, git sẽ chỉ bỏ qua các tệp mới . Nếu tập tin đã được theo dõi bởi git, thì tất nhiên git sẽ không bỏ qua nó! Vì vậy, bất kỳ mẫu nào trong bất kỳ gitignorehoặc excludetệp nào không áp dụng .

Điều đó có lý. Tại sao git muốn bỏ qua các sửa đổi đối với các tệp mà nó đã theo dõi? Nếu tệp bị bỏ qua, trước tiên bạn phải yêu cầu git không theo dõi nó, sau đó git bỏ qua nó như được mô tả trong sách hướng dẫn. Để biết thông tin về cách bỏ theo dõi tệp, hãy xem câu trả lời này .

Tất cả những điều này khiến tôi phải hỏi, liệu có thể bỏ qua các thay đổi đối với các tệp được theo dõi không? Một lần nữa, git cung cấp. Câu trả lời này; Git: Bỏ qua các tệp được theo dõi cung cấp cho chúng tôi lệnh (thay thế filebằng tệp bạn muốn bỏ qua):

git update-index --assume-unchanged file

Cuối cùng, đây là một số thông tin bổ sung về gỡ lỗi git bỏ qua.

Các gitignore (5) Hướng dẫn sử dụng trang cho chúng ta biết:

Các mẫu mà người dùng muốn Git bỏ qua trong mọi trường hợp (ví dụ: tệp sao lưu hoặc tệp tạm thời được tạo bởi trình soạn thảo của người dùng lựa chọn) thường đi vào tệp được chỉ định bởi core.excludesfile trong ~ / .gitconfig của người dùng. Giá trị mặc định của nó là $ XDG_CONFIG_HOME / git / ignore. Nếu $ XDG_CONFIG_HOME không được đặt hoặc trống, thì $ HOME / .config / git / ignore được sử dụng thay thế.

Vì vậy, điều này là mới và thay thế trước đó ~/.gitignore_globalđã đề cập trước đó.

Tiếp theo, và điều này thực sự hữu ích, đó là kể từ 1.8.2, chúng tôi hiện có một số công cụ gỡ lỗi tuyệt vời. Hãy xem:

Git học cách bỏ qua tốt hơn - Mới trong 1.8.2

Điều này cho thấy cách sử dụng check-ignorecờ mới để xác minh rằng git đang bỏ qua thành công các mẫu của bạn, ví dụ:

git check-ignore bin/a.dll --verbose


7
git update-index --assume-unchanged filechính xác là những gì tôi đang tìm kiếm, Cảm ơn!
Jai

14

Tôi thấy rằng khi tôi đã xác định global core.excludesfilenhư thế này:

git config --global core.excludesfile $HOME/.config/git/ignore

nó đã không hoạt động. Thay đổi nó để không sử dụng $HOMEbiến, như sau:

git config --global core.excludesfile ~/.config/git/ignore

nó ngay lập tức bắt đầu hoạt động. Hy vọng điều này sẽ giúp người khác.

FYI:

$ git --version
git version 1.7.10.2 (Apple Git-33)

Tôi cũng quan sát điều này. Tôi đã đọc lướt tài liệu nhưng không tìm thấy gì: Ngoài .gitignore (per-directory) và .git / info /ceptions, git xem xét tệp này để tìm các mẫu tệp không được theo dõi. "~ /" được mở rộng thành giá trị của $ HOME và "~ user /" thành thư mục chính của người dùng được chỉ định.
rliu

9

Lưu ý: bắt đầu git1.7.12 (tháng 8 năm 2012) :

Giá trị của:

  • core.attributesfile mặc định thành thuộc tính $ HOME / .config / git / và
  • core.excludesfilemặc định $HOME/.config/git/ignoretương ứng khi các tệp này tồn tại.

Vì vậy, nếu bạn tạo một $HOME/.config/git/attributestệp, bạn thậm chí không phải thiết lập cài đặt của mình core.excludesfile.


4

Tệp phải nằm trong thư mục chính của bạn. Trên windows, nó thường có nghĩa là: C: \ tài liệu và cài đặt \ [người dùng].

Trên linux, nó là: / home / [user]


2

Tôi gặp sự cố này vì ban đầu tôi đã gọi 'git config core.excludefiles' mà không có --global và có giá trị sai, do đó nó đã lưu trữ cục bộ thuộc tính. Có vẻ như thuộc tính cục bộ đã ẩn thuộc tính toàn cục (có giá trị chính xác), hoàn toàn bỏ qua nó.


2

Một lý do khác khiến global git bỏ qua có thể không hoạt động: các ký tự ẩn trong đường dẫn.

Tôi chỉ phát hiện ra đây là vấn đề của mình khi dán thông báo cảnh báo từ git-check-ignore vào thanh địa chỉ của Chrome, nơi nó may mắn hiển thị:

nhập mô tả hình ảnh ở đây

(Nó không hiển thị trên thiết bị đầu cuối. Và đây có thể là một lỗ hổng lâu dài của việc gỡ lỗi ... 😅)


1

Tôi đang gặp vấn đề tương tự (trên Windows). Tôi đã kết thúc việc kiểm tra ~/.gitconfigtệp của mình và thấy rằng tệp của tôi excludesfileđã được đặt thành:

excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt

nhưng lẽ ra nó phải là:

excludesfile = C:\\Users\\myUserName\\.gitignore_global

Sau khi tôi thay đổi nó, mọi thứ hoạt động như bình thường.


1

Ngoài ra, tôi đã có một điều thú vị với việc mã hóa tệp này. Bằng cách nào đó Windows 10 của tôi (với Powershell) đã tạo tệp có mã hóa "UTF-16 LE" và bằng cách nào đó Git không thể xử lý điều này. Khi tôi thay đổi mã hóa thành một giá trị hợp lý hơn nhiều so với bất kỳ thứ gì khác nó hoạt động theo nghĩa đen.


0

Một lý do khó theo dõi khác khiến .gitignore (_global) dường như không hoạt động có thể là khoảng trắng ở đầu dòng. Tệp không tha thứ cho khoảng trắng ở đầu. Vì vậy, hãy đảm bảo mỗi dòng trong tệp của bạn không có dòng nào trừ khi đó là dòng trống. Tôi đã mất một lúc để tìm ra.

Chỉ cần thêm hai xu của tôi.


0

Gần đây tôi đã mắc lỗi và chạy lệnh sau, lệnh git config core.excludesfile tags này đã thay đổi đường dẫn tệp loại trừ thành tệp cục bộ trong kho lưu trữ hiện tại và cấu hình này đã được ghi vào tệp cấu hình cục bộ bên dưới .git/config, vì vậy để khắc phục, tôi chỉ cần mở.git/config tệp và xóa dòng excludesfile tagsvà mọi thứ trở lại bình thường.

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.