Không thể bỏ qua UserInterfaceState.xcuserstate


301

Tôi đang sử dụng Git cho kiểm soát phiên bản dự án Xcode 4. Tôi đã dứt khoát thêm ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstateđể .gitignore, nhưng Git nó sẽ không bỏ qua nó. Bất cứ ý tưởng tại sao điều này là như vậy?

Câu trả lời:


669

Git có lẽ đã theo dõi các tập tin.

Từ các tài liệu gitignore :

Để dừng theo dõi một tệp hiện đang được theo dõi, hãy sử dụng git rm --cached .

Sử dụng cái này, thay thế [project][username]với thông tin của bạn:

git rm --cached [project].xcodeproj/project.xcworkspace/xcuserdata/[username].xcuserdatad/UserInterfaceState.xcuserstate
git commit -m "Removed file that shouldn't be tracked"

Ngoài ra, bạn có thể sử dụng -atùy chọn để git committhêm tất cả các tệp đã được sửa đổi hoặc xóa.

Khi bạn đã xóa tệp khỏi git, nó sẽ tôn trọng bạn .gitignore.


3
Tôi gặp vấn đề này nhưng khi tôi cố gắng xóa tệp xcuserstate thì nó báo 'không khớp với bất kỳ tệp nào'. Chuyện gì đang xảy ra vậy?
Rob Caraway

Tôi có cùng một vấn đề như @RobCaraway
MaxGabriel

24
Điều này giúp tôi: 1) thoát xcode; 2) đi đến thư mục dự án và thực hiện "ls -la" từ ứng dụng đầu cuối để đảm bảo bạn thấy các tệp .git và .gitignore; 3) thay đổi "ProjectFolder" trong ví dụ trên thành tên dự án của bạn ; 4) thực hiện hai lệnh git mà matt hiển thị; 5) Khởi chạy lại XCode và thực hiện cam kết và xác minh rằng tệp xcuserstate không còn được liệt kê.
Brainware

1
Bất cứ ý tưởng làm thế nào để làm tương đương trong svn? Tôi đang gặp vấn đề tương tự, trong đó svn không bỏ qua tập tin
bpn

Cảm ơn bạn @Brainware !! Cuối cùng nó đã làm việc nhờ đề nghị của bạn. Tôi nghĩ việc đóng Xcode trước là rất quan trọng.
Jay Versluis

52

Trong trường hợp tệp bị bỏ qua tiếp tục hiển thị trong danh sách không bị theo dõi, bạn có thể sử dụng git clean -f -d để xóa mọi thứ.

1.

git rm --cached {YourProjectFolderName}.xcodeproj/project.xcworkspace/xcuserdata/{yourUserName}.xcuserdatad/UserInterfaceState.xcuserstate

2.

git commit -m "Removed file that shouldn't be tracked"

3. CẢNH BÁO thử lần đầu tiên git clean -f -d --dry-run, nếu không bạn có thể mất các thay đổi không được cam kết.

Sau đó: git clean -f -d


github hiện cung cấp cho bạn một tệp .gitignore mặc định bao gồm tệp này trong số những người khác nhưng bạn vẫn phải thực hiện các bước của mình. loại gây phiền nhiễu
cspam

3
Cảm ơn đàn ông, git sạch -f -d vừa xóa. xcodeproj và các tệp khác từ dự án của tôi ...
Jeremy Luisetti

1
Chúng tôi khuyên bạn nên sử dụng cờ --dry-run trước khi chạy git sạch, tức là git clean -f -d --dry-run để xem điều gì xảy ra
zero0cool 23/03/18

Không gì git clean -f -dlàm gì?
allenlinli

Đừng sử dụng git clean -f -dnếu bạn có các thay đổi tệp không được cam kết! Tôi đã sử dụng nó và nó đã loại bỏ các tập tin mới tạo của tôi với nội dung đã được tạo! :) Vì vậy, trước tiên hãy cam kết và sau đó dọn dẹp
kalafun

44

Tất cả Câu trả lời là tuyệt vời nhưng đây là câu trả lời sẽ xóa cho mọi người dùng nếu bạn làm việc ở các máy Mac khác nhau (Gia đình và văn phòng)

git rm --cache */UserInterfaceState.xcuserstate
git commit -m "Never see you again, UserInterfaceState"

20

Có một người bạn chỉ cho tôi trang web tuyệt vời này https://www.gitignore.io/ . Nhập IDE bạn chọn hoặc các tùy chọn khác và nó sẽ tự động tạo một gitignoretệp bao gồm các bỏ qua hữu ích, một trong số đó là xcuserstate. Bạn có thể xem trước gitignoretập tin trước khi tải xuống.


17

Trong trường hợp tệp tiếp tục hiển thị ngay cả sau khi thực hiện mọi thứ được đề cập ở đây, hãy đảm bảo rằng hộp kiểm này trong cài đặt Xcode không được chọn:

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



7

Dưới đây là một số bản demo & cắt ngắn nếu bạn sử dụng GitHub, các ý tưởng cơ bản đều giống nhau.

1. Mở terminal như thế này

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

2. Dán lệnh bên dưới vào thiết bị đầu cuối theo sau là khoảng trắng và sau đó dán đường dẫn của tệp .xcuserstate đơn giản như thế này

git rm --cached nhập mô tả hình ảnh ở đây

3. Hãy chắc chắn rằng bạn đã bỏ qua git chính xác và sau đó cam kết mã :)

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


4

Dưới đây là một lời giải thích rất hay về cách xóa các tệp trong câu hỏi theo cách đệ quy khỏi lịch sử git của bạn: http://help.github.com/remove-sensitive-data/

Rất hữu ích, vì nếu không các công cụ có xu hướng 'treo' trong khi cố gắng hiển thị độ lệch trên các tệp khổng lồ không nên được kiểm tra ở vị trí đầu tiên ...

Dưới đây là những gì bạn có thể làm (nói ngắn gọn) để loại bỏ những thứ lớn nhất:

cd YourProject
git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r YourProject.xcodeproj/project.xcworkspace' HEAD
# see what you want to do with your remote here...
# you can: git push origin master --force
# or you can delete it and push a fresh new one from your cleaned-up local...
rm -rf .git/refs/original
git gc --prune=now
git gc --aggressive --prune=now

Làm việc rất tốt cho tôi :)


2

Đối với tôi không có gì làm việc, nhưng điều này

thêm dòng này vào gitignore của bạn

*.xcuserdata

1

Điều này làm việc cho tôi

  1. Mở thư mục chứa tệp dự án project.xcworkspacetừ thiết bị đầu cuối.

  2. Viết lệnh này: git rm --cached *xcuserstate

Điều này sẽ loại bỏ các tập tin.


0

Đối với xcode 8.3.3 tôi vừa kiểm tra thử đoạn mã trên và quan sát rằng, bây giờ trong casewe này phải thay đổi các lệnh để như thế này

trước tiên, bạn có thể tạo tệp .gitignore bằng cách sử dụng

 touch .gitignore

sau đó bạn có thể xóa tất cả tệp userInterface bằng cách sử dụng lệnh này và bằng cách sử dụng lệnh này, nó sẽ tôn trọng tệp .gitignore của bạn.

 git rm --cached [project].xcworkspace/xcuserdata/[username].xcuserdatad/UserInterfaceState.xcuserstate
 git commit -m "Removed file that shouldn't be tracked"

-1

Tôi nghĩ sẽ tốt hơn nếu viết như thế này.

git rm --cache * / /UserInterfaceState.xcuserstate**

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.