2010-07-21 25 views
5

Tôi mới sử dụng Git và tôi đang sử dụng nó để sao lưu dự án iPhone mà tôi đang thực hiện. Tôi đã thêm một danh sách các tệp mà Git phải bỏ qua (tệp xcode) khi tôi cập nhật, nhưng tệp .perspectivev3 (trong tệp .gitignore) của tôi sẽ hiển thị khi tôi thực hiện các thay đổi của mình. Có ai biết tại sao điều này là, hoặc những gì tôi đang làm sai?Git không bỏ qua một số tệp Xcode nhất định trong .gitignore

Cảm ơn,

Zach

Đây là những gì có trong tập tin .gitignore tôi:

# xcode noise 
*.mode1v3 
*.pbxuser 
*.perspective 
*.perspectivev3 
*.pyc 
*~.nib/ 
build/* 

# Textmate - if you build your xcode projects with it 
*.tm_build_errors 

# old skool 
.svn 

# osx noise 
.DS_Store 
profile 
+0

Ý của bạn là "đi cam kết thay đổi của tôi"? Các tệp không được bỏ qua không hiển thị chỉ hiển thị với "trạng thái git" và như vậy –

+1

Nó có thể là một câu hỏi ngớ ngẩn, nhưng bạn đã bao giờ cam kết .perspectivev3 trước đây hoặc thêm nó vào chỉ mục trước khi bạn cập nhật tệp gitignore của mình chưa? –

Trả lời

9

Nếu nó giữ hiển thị trong tình trạng git, nó phải được thêm vào hoặc cam kết trước .

Bạn cần phải

  • git rm --cached rằng tập tin, để cho git status để không liệt kê nó nữa (nó được chỉ thêm vào, nhưng không cam kết nào).
  • git rm rằng tập tin, nếu nó đã cam kết trước đó (xem this question for instance)
+0

Lời khuyên về git rm --cached là không chính xác. Xin vui lòng xem câu trả lời của tôi dưới đây. – jpswain

+0

git rm --cách được sử dụng để xóa tệp khỏi chỉ repo địa phương của bạn. Đây là chính xác những gì tôi muốn làm –

3

.gitignore chỉ áp dụng cho các tập tin được theo dõi. Nếu bạn đã thêm các tệp git-add'ed không được theo dõi do .gitignore, chúng sẽ vẫn là một phần của kho lưu trữ.

Đơn giản chỉ cần loại bỏ các tập tin từ các kho lưu trữ mà bạn không muốn nữa:

git rm *.perspectivev3 
+1

Hey, tôi đã thêm tập tin pesky trước khi tôi thêm nó vào tập tin bỏ qua. Tôi đã xóa tệp và khi tôi cố gắng thực hiện thay đổi, tệp không còn ở đó nữa, vì vậy lời khuyên của bạn đã hoạt động. Cảm ơn các bạn. – agentbanks217

+0

@Zach Banks Tôi hiện đã đánh dấu một trong những câu trả lời này là được chấp nhận, vì vậy họ nhận được tín dụng và những người dùng khác biết câu hỏi được giải quyết. – Edd

8

Bạn có thể sử dụng

$ git rm --cached ./whatever1.txt

sau khi một cái gì đó đã được dưới sự kiểm soát phiên bản.

Trong thực tế, nếu bạn có "whatever1.txt" dưới sự kiểm soát phiên bản và bạn muốn loại bỏ nó từ git, nhưng để lại cây làm việc của bạn không bị ảnh hưởng, sau đó chỉ cần làm điều này:

$ git rm --cached ./whatever1.txt 
$ echo /whatever1.txt >> ${PROJECT_ROOT}/.gitignore 
$ git status # this will now show ./whatever1 as "deleted" (from git, not your working tree, and will show gitignore as modified or created) 
$ git commit -a 

Và đó là nó.

Chỉ sử dụng

$ git rm

khi bạn muốn loại bỏ các tập tin từ cả hai cây làm việc repo git.

CAVEAT: Kịch bản có khả năng bạn sẽ sử dụng điều này là để xóa các tệp IDE cụ thể khỏi git. Trong ví dụ này "whatever1" đại diện cho (các) tệp IDE bạn đang xóa. Nếu bạn đang làm việc trên một dự án với một số người và bạn đẩy changeset này vào một repo được chia sẻ, thì các tệp "./whatever1" của họ S DEL ĐƯỢC XÓA khi họ kéo changeset này. Điều dễ dàng để làm từ đây cho người dân vào cuối nhận là:

$ git checkout 1215ef -- ./file-you-want-to-restore ./another-file ./another-etc 

(nơi 1215ef đại diện cho cam kết cuối cùng trước khi xóa)

này có tác dụng khôi phục những file mà đã có mặt tại cam kết cuối cùng của họ trước khi kéo.Sau khi họ đã làm điều này những tập tin đó sẽ được an toàn và không hiển thị như b/c không cam kết họ sẽ thuộc loại trừ gitignore.

Chúc may mắn!

Các vấn đề liên quan