2013-06-17 24 views
10

Tôi đang cố gắng triển khai giải pháp thay thế cho NuGet Package Restore Issues..gitignore gói thư mục NuGet ở mọi cấp độ nhưng bao gồm tệp .targets ở mọi cấp độ

Điều này liên quan đến việc bỏ qua nội dung của tất cả các thư mục gói, ở bất kỳ cấp nào trong cấu trúc phân cấp. Tuy nhiên, các tệp .targets (thường nằm trong thư mục con của các thư mục gói) không nên bỏ qua.

Ví dụ:

 
.gitignore 
YourProject/ 
    YourProject.csproj 
    packages/ 
    repositories.config 
    Microsoft.Bcl.Build.1.0.7/ 
     lib/ 
     foo.dll 
     tools/ 
     Microsoft.Bcl.Build.targets 

nên chỉ bao gồm các file:

  • .gitignore
  • YourProject.csproj
  • Microsoft.Bcl.Build.targets

của Windows , git phiên bản 1.8.1.ms ysgit.1.

Tôi đã đọc một số câu trả lời trên StackOverflow, đã kiểm tra trang người đàn ông và thử nhiều biến thể không thành công.

này không hoạt động:

packages/* 
!*.targets 

Cũng không này:

packages/* 
!packages/**/*.targets 

Cũng không này:

**/packages/* 
!**/packages/**/*.targets 

Cập nhật:

  • Điều này cần phải làm việc bất kể thư mục gói nằm ở đâu trong cấu trúc phân cấp.
  • Cần bỏ qua các tệp trong gói, thư mục con, thư mục con phụ, v.v.
  • Các dòng .gitignore khác, như bin/, phải tiếp tục hoạt động.
+0

Tôi nghĩ rằng bạn có thể sử dụng '* mục tiêu!. \ n/packages /*.* '(trong đó \ n là một dòng mới), tuy nhiên điều này sẽ không bỏ qua các tệp mở rộng. Vấn đề là '*' trùng khớp trên các thư mục, quá. – vcsjones

+0

@vcsjones Chỉ cần thử nó; điều đó cũng không hiệu quả. Nó thêm tất cả các dll theo gói. – TrueWill

Trả lời

7

Không có cách 'tốt' để làm điều đó (xem manpage làm bằng chứng), tuy nhiên có một sự cố xung quanh nó.

Vấn đề chính với bỏ qua packages/ của dơi là git thậm chí không kiểm tra thư mục con của nó do thư mục bị bỏ qua.

Giải pháp ở đây - bạn sẽ phải có 2 tệp gitignore. Một thông thường, và một bên trong thư mục gói trông như thế này:

# ignore all files 
* 
# do not ignore directories 
!*/ 
# do not ignore targets 
!*.targets 
# do not ignore gitignore 
!*.gitignore 

New dụ:

$ mkdir foo 
$ cd foo/ 
$ mkdir foo 
$ mkdir foo/bar 
$ mkdir foo/bar/baz 
$ touch foo/.foo 
$ touch foo/bar/.foo 
$ touch foo/bar/baz/.foo 
$ touch regular.txt 
$ touch foo/ignored.txt 
$ touch foo/bar/baz/ignored-2.txt 
$ cat foo/.gitignore 
* 
!*/ 
!*.foo 
!regular.txt 
!.gitignore 
$ git add . && git status 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
#  new file: foo/.foo 
#  new file: foo/bar/.foo 
#  new file: foo/bar/baz/.foo 
#  new file: regular.txt 
# 
+0

Cảm ơn bạn! Đối với ví dụ của bạn, bạn có thể muốn bao gồm một tập tin không mong muốn dưới baz để cho thấy rằng nó không được thêm vào. Ngoài ra, vì tôi không muốn chỉ định từng thư mục dự án, có vẻ như tôi có thể thay thế YourProject bằng '**'. Cuối cùng, nó phải là mục tiêu, không phải mục tiêu. (Không vì lợi ích của tôi nhưng đối với độc giả trong tương lai.) – TrueWill

+0

Khi thử nghiệm thêm, điều này không hoạt động (ít nhất là trong Windows). Để chứng minh, hãy tạo tệp 'unwanted.txt' trong 'baz \ fez'. Tập tin đó sẽ được thêm vào. – TrueWill

+0

Vị trí này đóng: '**/baz/* \ n **/baz/**/* \ n! */\ N! *. Foo'. Có ít nhất một vấn đề còn lại: không bỏ qua các thư mục ảnh hưởng đến các dòng .gitignore khác, như 'bin /'. – TrueWill

1

Các ưu tiên của con đường bỏ qua là rất quan trọng, tôi mang nó.

Tôi đã khắc phục sự cố này bằng cách chỉ định trước những gì cần giữ sau đó để bỏ qua phần còn lại của nội dung của gói.

Trong .gitignore tập tin chắc chắn rằng bạn nên có:

!packages/repositories.config 
packages/ 

Xem https://github.com/danyandresh/Research/commit/65291219a1c1fbcdb2216c686767e8c46451baa1

Xin lưu ý tập .gitignore của tôi là một bản sao đơn giản của Visual studio ignore list as found on github

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