Tôi đã thêm dòng sau vào .gitignore
:
sites/default/settings.php
nhưng khi tôi gõ git status
nó 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 status
nó 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 status
và 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ừ .gitignore
tậ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ư --cached
vậ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.
.git
thư 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 rm
nê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 -f
và 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 ở .gitingore
nơ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 .gitignore
tệp đã được lưu trong UTF-16LE
mã hóa, và không UTF8
mã hóa.
Sau khi thay đổi mã hóa của .gitignore
tập tin thành UTF8
nó 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 repo
như 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à .gitignore
chỉ 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.