Tôi đã thêm dòng sau vào .gitignore:
sites/default/settings.php
nhưng khi tôi gõ git statusnó sẽ hiển thị tệp dưới dạng tệp không được sắp xếp.
Có vấn đề gì vậy? Tất cả các mẫu khác hoạt động tốt.
Tôi đã thêm dòng sau vào .gitignore:
sites/default/settings.php
nhưng khi tôi gõ git statusnó sẽ hiển thị tệp dưới dạng tệp không được sắp xếp.
Có vấn đề gì vậy? Tất cả các mẫu khác hoạt động tốt.
Câu trả lời:
Hãy chắc chắn rằng bạn .gitignoređang ở trong thư mục gốc của thư mục làm việc và trong thư mục đó chạy git statusvà sao chép đường dẫn đến tệp từ đầu ra trạng thái và dán nó vào .gitignore.
Nếu điều đó không hoạt động, thì có khả năng tệp của bạn đã được Git theo dõi. Bạn có thể xác nhận điều này thông qua đầu ra của git status. Nếu tập tin không được liệt kê trong phần Tập tin không bị chặn của tập tin , thì nó đã được Git theo dõi và nó sẽ bỏ qua quy tắc từ .gitignoretập tin.
Lý do bỏ qua các tệp trong Git là để chúng sẽ không được thêm vào kho lưu trữ. Nếu trước đây bạn đã thêm một tệp mà bạn muốn bỏ qua, thì nó sẽ được theo dõi bởi Git và các quy tắc bỏ qua phù hợp với nó sẽ bị bỏ qua. Git thực hiện điều này vì tệp đã là một phần của kho lưu trữ.
Để thực sự bỏ qua tập tin, bạn phải mở khóa và xóa nó khỏi kho lưu trữ. Bạn có thể làm điều đó bằng cách sử dụng git rm --cached sites/default/settings.php. Thao tác này sẽ xóa tệp khỏi kho lưu trữ mà không xóa tệp (thực tế là như --cachedvậy). Sau khi cam kết thay đổi đó, tệp sẽ bị xóa khỏi kho lưu trữ và bỏ qua nó sẽ hoạt động đúng.
.gitthư mục và chính thư mục gốc của kho lưu trữ. Giống như khi bạn sao chép một kho lưu trữ để /xy/sau đó /xy/là thư mục làm việc của bạn với /xy/.git/bên trong.
git add .sau git rm --cachedđể xây dựng lại chỉ mục.
Tôi gặp phải vấn đề này, đó là một câu hỏi cũ, nhưng tôi muốn tập tin đó được theo dõi nhưng không theo dõi nó trên một số bản sao đang hoạt động, để làm điều đó bạn có thể chạy
git update-index --assume-unchanged sites/default/settings.php
.gitignore sẽ chỉ bỏ qua các tệp mà bạn chưa thêm vào kho lưu trữ của mình.
Nếu bạn đã làm git add .và tệp đã được thêm vào chỉ mục, .gitignore sẽ không giúp bạn. Bạn sẽ cần phải làm gì git rm sites/default/settings.phpđể loại bỏ nó, và sau đó nó sẽ bị bỏ qua.
git rmnên làm điều đó, nhưng nó có thể yêu cầu bạn sử dụng tùy chọn -f sẽ loại bỏ nó khỏi thư mục làm việc. Tôi đã không tìm ra điều này ngoài việc tạo một bản sao của tệp, làm git rm -fvà sau đó khôi phục bản sao.
Vui lòng sử dụng lệnh này
git rm -rf --cached .
git add .
Đôi khi các tệp .gitignore không hoạt động mặc dù chúng đúng. Lý do Git bỏ qua các tệp là chúng không được thêm vào kho lưu trữ. Nếu bạn đã thêm một tệp mà bạn muốn bỏ qua trước đó, nó sẽ được theo dõi bởi Git và mọi quy tắc khớp bỏ qua sẽ bị bỏ qua. Git làm điều này bởi vì tập tin đã là một phần của kho lưu trữ.
Tôi đã từng gặp vấn đề tương tự. Các tệp được xác định ở .gitingorenơi được liệt kê là các tệp không bị theo dõi khi chạy git status.
Lý do là các .gitignoretệp đã được lưu trong UTF-16LEmã hóa, và không UTF8mã hóa.
Sau khi thay đổi mã hóa của .gitignoretập tin thành UTF8nó làm việc cho tôi.
Những gì tôi đã làm nó để bỏ qua các tập tin settings.php thành công:
Tôi nghĩ rằng nếu có tệp cam kết trên Git thì bỏ qua không hoạt động như mong đợi. Chỉ cần xóa các tập tin và cam kết. Sau đó nó sẽ bỏ qua.
Có những trường hợp, ví dụ như các tệp Cấu hình ứng dụng mà tôi muốn theo dõi trong git (vì vậy .gitignore sẽ không hoạt động), nhưng tôi cần thay đổi cho các cài đặt cục bộ. Tôi không muốn git quản lý các tệp này hoặc hiển thị chúng dưới dạng sửa đổi. Để làm điều này, tôi sử dụng Skip-worktree:
git update-index --skip-worktree path/to/file
Bạn có thể xác nhận các tệp bị bỏ qua bằng cách liệt kê các tệp và kiểm tra các dòng bắt đầu bằng S để bỏ qua
git ls-files -v | grep ^S
Nếu trong tương lai bạn muốn có git quản lý tệp cục bộ một lần nữa, chỉ cần chạy:
git update-index --no-skip-worktree path/to/file
Mescalito ở trên đã có một câu trả lời tuyệt vời, điều đó dẫn tôi đi đúng hướng nhưng
git update-index - tệp không thay đổi / đến / ign.php
Có một hợp đồng với git trong đó: người dùng hứa sẽ không thay đổi tệp và cho phép Git giả định rằng tệp cây làm việc khớp với những gì được ghi trong chỉ mục.
Tuy nhiên, tôi thay đổi nội dung của các tệp, vì vậy trong trường hợp của tôi --skip-worktree là lựa chọn tốt hơn.
Trang web của Toshiharu Nishina đã cung cấp một lời giải thích tuyệt vời về Skip-worktree so với giả định không thay đổi: Bỏ qua các tệp đã được quản lý với Git cục bộ
Một lý do khác có thể - một vài trường hợp khách hàng git chạy cùng một lúc . Ví dụ: "git shell" + "GitHub Desktop", v.v.
Điều này đã xảy ra với tôi, tôi đã sử dụng "GitHub Desktop" làm máy khách chính và nó đã bỏ qua một số cài đặt .gitignore mới: commit sau commit:
Lý do : trình soạn thảo Visual Studio Code đang chạy trong nền với cùng một kho lưu trữ đã mở. Mã VS có kiểm soát git tích hợp và điều này tạo ra một số xung đột.
Giải pháp : kiểm tra kỹ nhiều máy khách git ẩn, chỉ sử dụng một máy khách git cùng một lúc, đặc biệt là trong khi xóa bộ đệm git.
Đảm bảo .gitignore không có tiện ích mở rộng !! Nó không thể là .gitignore.txt, trong windows chỉ cần đặt tên tệp .gitignore. và nó sẽ hoạt động.
Tôi vừa thử điều này với git 1.7.3.1 và đưa ra một cấu trúc như:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
nơi reponhư vậy là "gốc" được đề cập ở trên (tôi sẽ gọi nó là gốc rễ của cây làm việc của bạn), và .gitignorechỉ chứa sites/default/settings.php, các công trình bỏ qua cho tôi (và nó không quan trọng cho dù .gitignoređược thêm vào repo hay không). Điều này có phù hợp với bố trí repo của bạn? Nếu không, có gì khác?
Chỉ trong trường hợp bất cứ ai trong tương lai có cùng một vấn đề mà tôi đã làm:
Nếu bạn sử dụng
*
!/**/
!*.*
mẹo để xóa các tệp nhị phân không có phần mở rộng, hãy đảm bảo rằng TẤT CẢ các dòng gitignore khác đang DƯỚI ĐÂY. Git sẽ đọc từ .gitignore từ đầu, vì vậy mặc dù tôi đã có 'test.go' trong gitignore của mình, nó đã xuất hiện đầu tiên trong tệp và trở thành 'không được xếp hạng' sau
!*.*
Tôi đã thử hầu hết các lệnh trên trên thiết bị đầu cuối VS Code và tôi gặp lỗi như:
fatal: pathspec '[dir]/[file]' did not match any files
Tôi đã mở dự án trên GitHub Desktop và bỏ qua từ đó và nó đã hoạt động.