2010-09-08 4 views
8

WinXP + mysisGit1.7git bỏ qua ngoại lệ không làm việc như mong muốn

Trong file .gitignore của tôi, nhưng vẫn không thể nhìn thấy Demos/path/to/file/file.cpp đang được theo dõi bởi git.

Tôi có dưới mục:

Demos/ 
!Demos/path/to/file/file.cpp 

Đường dẫn tuyệt đối là: c:\Project\Demos\path\to\file\file.cpp

Điều gì có thể xảy ra? Xin vui lòng giúp đỡ, cảm ơn.


EDIT:

tôi thấy cách làm thế nào công việc .gitignore mysisGit trên WindowsXP chỉ có thể bỏ qua loại nhất định của tập tin, sau đó loại trừ một số tập tin có cùng loại. Ví dụ:

*.bak 
!tracking.bak 
!/path/to/file/tracking2.bak 

Nó không hoạt động bỏ qua thư mục và loại trừ một số tệp trong thư mục đó. Dưới đây sẽ không làm việc:

/folderUnderRepoRoot/ 
!/folderUnderRepoRoot/tracking.cpp 

Cũng

anyFolderNamedLikeThis/ 
!anyFolderNamedLikeThis/tracking.cpp 
!/anyFolderNamedLikeThis/tracking.cpp 

Tuy nhiên, tôi nhận thấy có một ngoại lệ. Có một cách xung quanh để loại trừ các tệp ngay bên dưới thư mục bị bỏ qua (không phải thư mục con của nó). Tính năng này hoạt động.

/folderUnderRepoRoot/* 
/folderUnderRepoRoot/tracking.cpp 

Nhưng cách này chỉ bị giới hạn khi tệp không nằm trong bất kỳ thư mục con nào, vì vậy nó không hữu ích.

Vì vậy, tôi cuối cùng vẫn cam kết hầu hết các tệp nguồn, thậm chí tôi chỉ quan tâm đến một vài tệp trong khi theo dõi một số dự án lớn khác. Điều đó có nghĩa là có một loạt các tệp mà tôi sẽ không liên lạc nhưng vẫn cần phải cam kết.

Đây là another thread có sự cố tương tự.

+0

Bạn có 'git add Demo/path/to/file/file.cpp' để bắt đầu theo dõi nó? – ewall

+0

Đã thử nhưng không may mắn. – Stan

+0

@Stan: bạn có tìm thấy giải pháp không? Tôi tìm thấy cùng một vấn đề trên git và ubuntu vì vậy nó không phải là nền tảng liên quan –

Trả lời

0

Bạn có thể thử thay thế bằng !/Demos/path/to/file/file.cpp (lưu ý dấu gạch chéo hàng đầu sau dấu chấm than) thay vào đó và thử lại?

+0

tính năng này không hoạt động. Cảm ơn mặc dù. – Stan

1

Đừng thêm vào .gitignore như sau:

folderUnderRepoRoot/**/* 
!folderUnderRepoRoot/tracking.cpp 

Nhưng chắc chắn, rằng ít nhất một tập tin một thêm vào chỉ mục git từ thư mục folderUnderRepoRoot.

7

Ngoại lệ .gitignore không hoạt động vì "Không thể bao gồm lại tệp nếu thư mục mẹ của tệp đó bị loại trừ" [source].

Là một workaround xấu xí-nhưng-làm việc, thực hiện điều này trên mọi cấp độ thư mục trên đường dẫn đến tập tin của bạn:

  1. loại trừ tất cả nội dung của thư mục
  2. lại bao gồm các thư mục con dẫn đến tệp của bạn (hoặc cuối cùng là tệp của bạn).

mục của bạn sẽ trông như thế này, với mỗi phần hai dòng thực hiện các bước này cho một mức độ phân cấp thư mục:

Demos/** 
!Demos/path/ 

Demos/path/** 
!Demos/path/to/ 

Demos/path/to/** 
!Demos/path/to/file/ 

Demos/path/to/file/** 
!Demos/path/to/file/file.cpp 

Vì vậy, bạn không bắt đầu bằng cách loại trừ Demos/ như câu hỏi tác giả đã làm. Đó là một thư mục cha của tập tin của chúng tôi, vì vậy bạn sẽ phải bao gồm nó ngay sau đó. Thay vào đó, hãy bắt đầu bằng cách loại trừ nội dung : Demos/**.

0

Nếu nó chỉ là một tập tin, tôi sẽ không bình thường sửa đổi .gitignore

Sau đây nên bỏ qua .gitignore và cho phép bạn thêm các tập tin

git add -f Demos/path/to/file/file.cpp