GIT - Không thể bỏ qua tệp .suo


84

Tôi đang cố gắng làm việc bằng Git với một đồng nghiệp, trong một ứng dụng được viết bằng C #.

Chúng tôi đã thêm mục nhập "project1.suo" vào tệp .gitignore nhưng mỗi khi một người trong chúng tôi phải cam kết dự án, Git dường như cũng yêu cầu chúng tôi cam kết tệp "project1.suo".

Chúng tôi đã thử nhiều phương pháp để thêm tệp trong .gitignore như vậy:

*.suo
project1.suo
c:\project\project1.suo

Chúng tôi không thể khắc phục sự cố này.


2
tệp .gitignore có được thêm vào repo không?
Steve B,

vâng là trong kho
Laxedur

3
Tôi đoán tệp đã được thêm một lần, hãy thử một git rm trên tệp này một cách rõ ràng, cam kết và xem liệu nó có còn được đề xuất dưới dạng tệp đã thêm hay không.
Steve B,

bạn có thể cho tôi biết làm thế nào tôi có thể sử dụng rm lệnh, bởi vì tôi đã cố gắng nhưng không thể tìm thấy lệnh tập tin ...
Laxedur

@SteveB .gitignore không cần phải được thêm vào kho lưu trữ để có hiệu lực.
Ikke

Câu trả lời:


165

git không bỏ qua các tệp đã được thêm vào kho lưu trữ. Nếu bạn muốn bỏ qua nó, bạn phải xóa tệp khỏi kho lưu trữ:

git rm --cached project1.suo
git commit -m "Delete suo file from repository"

Thao tác này sẽ xóa tệp khỏi kho lưu trữ trong khi tệp vẫn còn trên ổ cứng của bạn.


nếu bạn rm các tệp * .suo, chắc chắn nó sẽ không đẩy các tệp đó từ xa. Nó sẽ gây ra vấn đề cho những người sao chép dự án này?
Waqas

Nếu bạn đang sử dụng ứng dụng khách studio trực quan, không có cách nào để thực hiện việc này từ đó, bạn phải sử dụng trình bao cmd. Nhưng nếu tôi sử dụng lệnh rm từ shell, tôi sẽ thấy tệp .suo có gạch ngang, nhưng nếu tôi thực hiện thay đổi thông qua VS UI, nó sẽ xuất hiện lại. Bạn phải thực hiện cả hai lệnh trên thông qua dòng lệnh.
Michael Blackburn

1
@Waqas không, visual studio sẽ chỉ tạo một tệp mới cho họ. Đây là khi .gitignore loại trừ * .suo như một phần của kho lưu trữ là quan trọng. Khi họ cam kết, .gitignore mà họ đã kiểm tra sẽ ngăn họ (hoặc ít nhất là không khuyến khích họ) kiểm tra trong tệp SUO của chính họ.
Michael Blackburn

3
Điều này có thể không rõ ràng đối với một số người mới. Điều này hoạt động như một sự quyến rũ. Để thực hiện lệnh này, bạn phải ở trong thư mục chứa .suo. Lệnh đầu tiên bạn cần chạy trong cmd.exe là thay đổi thư mục "CD <gõ đường dẫn đầy đủ đến thư mục gốc của .suo> sau đó nhấn enter .. Theo mặc định, bạn có thể không thấy thư mục .vs có .suo nên hãy chắc chắn rằng file ẩn được kích hoạt trong thư mục gốc thư mục kho lưu trữ của bạn tập tin của tôi không có một cái tên dự án chỉ là phần mở rộng git rm --cached .suo git commit -m "Xóa tập tin Suo từ kho lưu trữ"...
moto_geek

nếu cần bỏ qua thư mục và nó đã ở trong kho lưu trữ từ xa. sử dụng tùy chọn -r trong lệnh, git rm -r --cached <đường dẫn đến thư mục>
Somnath Kadam

3

Tôi luôn quay lại câu hỏi này để sử dụng phương pháp trong câu trả lời nhưng tôi đã tìm thấy một giải pháp tốt hơn đó là bỏ qua các thay đổi đối với tệp này. Phương pháp là

git update-index --assume-unchanged project1.suo

hoặc là

git update-index --assume-unchanged .vs/config/applicationhost.config

Để hoàn tác việc sử dụng này - không-giả-định-không thay đổi


Tôi nhận được thông báo "nghiêm trọng: Không thể đánh dấu tệp Web <directory> / <filetoexclude>"
dancerjude

Lưu ý rằng điều này sẽ dẫn đến sự cố khi ai đó cập nhật tệp. Git sẽ cố gắng cập nhật tệp, nhưng nhận thấy tệp đã thay đổi và sẽ đưa ra thông báo lỗi cho bạn. Trong mọi trường hợp, --skip-worktreetốt hơn --assume-unchanged, chỉ nên được sử dụng vì lý do hiệu suất.
Ikke

-4

Tôi đã từng gặp vấn đề tương tự. Giải pháp của Ikke hữu ích, nhưng đừng quên xóa mục * .suo khỏi .gitignore của bạn, nếu nó ở đó. Sau khi tệp được sửa, hãy làm

git add **/*.suo

1
KHÔNG nên xóa .suo khỏi .gitignore để đáp ứng các yêu cầu của OP.
Caltor
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.