Poproś TFS o zignorowanie mojego folderu pakietów

332

Próbuję przekonać TFS (2013) do zignorowania mojego packagesfolderu. Namiętnie nie chcę, aby źródła były kontrolowane, ponieważ korzystam z NuGet i jest świetnie!

Próbowałem maskować (nie działa), próbowałem dodawać .tfignorepliki - nic nie jest ignorowane. Dlaczego zespół TFS po prostu nie dodaje opcji trwałego ignorowania folderu lub pliku, jak robi to wielu klientów Subversion ?!

Matt
źródło
Z jakich wersji TFS i Visual studio korzystasz? Czy używasz lokalnych lub serwerowych przestrzeni roboczych?
James Reed,
Najwyraźniej jest to błąd NuGet: docs.nuget.org/docs/reference/package-restore-with-team-build
user2864740,
1
Powinieneś zmienić odpowiedź na to pytanie
Chris Marisic,
3
Jeśli używasz NuGet, folder pakietów jest wymagany. Możesz jednak ustawić NuGet, aby przywracał brakujące pliki binarne podczas kompilacji (tak, abyś kontrolował źródła w folderze pakietów, ale ignorował pliki binarne). - Ale są z tym problemy: binarne NuGet może zostać zaktualizowane (bez zmiany numeru wersji) lub usunięte itp. - Możliwe są różne dziwne rzeczy. Nie pozostawiaj swoich wersji przypadkowi - sprawdź w całym folderze pakietów. Zaoszczędzisz sobie wiele bólów głowy.
BrainSlugs83

Odpowiedzi:

497

Oto umowa: musimy powiedzieć zarówno NuGet, jak i TFS, aby zignorowały pakiety, ponieważ NuGet próbuje robić rzeczy związane z kontrolą źródła, których absolutnie nie powinno robić (zła forma, Microsoft!). Więc musisz zrobić dwie rzeczy.

Najpierw dodaj plik o nazwie .tfignoredo folderu rozwiązania (zwróć uwagę na brak spo nim tf). Jego zawartość powinna wyglądać następująco:

\packages

To mówi TFS, aby zignorował folder pakietów. Można by pomyśleć, że to również zignoruje repositories.configplik. Ale nie będzie. Dlaczego? Kto wie, drogi Microsoftu są dziwne i tajemnicze. Właściwie myślę, że jest to część rzeczy NuGet, które przedstawię poniżej, ale jeśli kiedykolwiek zostanie to naprawione w przyszłości i chcesz zachować repositories.configplik zamiast pozwolić VS go zregenerować, powinieneś być w stanie użyć tego:

\packages
!\packages\repositories.config

OK, więc teraz dzięki naszemu .tfignoreplikowi TFS ignoruje twoje pakiety. Wszystko w porządku, prawda? ŹLE , bo Nuget jest mucking z kontroli źródła i dodając do swoich pakietów toczących się zmian. Teraz powiedzmy NuGet, żeby już to wycięło.

Utwórz folder o nazwie .nugetw katalogu głównym folderu rozwiązania. 1 Teraz utwórz plik o nazwie NuGet.configi umieść go w tym nowym folderze 2 . Jego zawartość powinna wyglądać następująco:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

A teraz twoje pakiety powinny pozostać poza kontrolą źródła. Pamiętaj tylko, aby dodać pliki NuGet.configi .tfignoredo kontroli źródła, aby nigdy się nie zgubiły.

EDYCJA: Jeśli masz problemy, możesz usunąć folder paczek, sprawdzić tę zmianę, a następnie wykonać powyższe kroki.

RÓWNIEŻ EDYCJA: Wygląda na to, że tak się nie stanie z nowszymi wersjami Nuget. Więc może po przejściu na VS / TFS 2017 ten problem zostanie rozwiązany bez przeskakiwania przez powyższe obręcze.

1 . Dodaj folder za pomocą Eksploratora kontroli źródła; kliknij prawym przyciskiem myszy rozwiązanie-> Dodaj folder -> .nuget
2 . Kiedy wymyśliłem to za pomocą VS 2013, okazało się, że NuGet.config musiał przejść do folderu .nuget. Nawet jeśli masz już plik NuGet.config w katalogu głównym folderu rozwiązania (ponieważ, powiedzmy, twoja firma ma wewnętrzny kanał nuget). Jednak w niektórych komentarzach wskazano, że działa dobrze w katalogu głównym rozwiązania w VS 2015. Osobiście przełączyłem się na używanie TFS w trybie git, więc nie mogę testować. Dodatkowo, jeśli masz niestandardowy kanał, upewnij się, że masz zarówno niestandardowy kanał, jak i nuget.org jako klucze w pliku Nuget.config, a czasem TFS losowo zdecyduje, że nie może przywrócić pakietów.

Pharylon
źródło
1
Uważam, że wymaga to przynajmniej TFS 2012. stackoverflow.com/questions/14365929/…
ClearCloud8
2
@zespri Jaki plik oczekuje na usunięcie? Pakiet NuGet? To nie powinno być w oczekiwaniu na usunięcie ... powinno zostać usunięte! Po zrobieniu tego, co zasugerowałem powyżej, przejdź do Eksploratora zespołu i usuń wszystkie pakiety Nuget, które mogą być już pod kontrolą źródła. Lub po prostu usuń folder pakietów. Pracowałem z tą konfiguracją od miesięcy i nigdy nie spotkałem się z tym błędem.
Pharylon
5
Fyi w VS2015, nuget.config nie musi znajdować się w /.nuget/. Działa świetnie w katalogu głównym rozwiązania.
jnm2
141
Dla każdego, kto zastanawia się, jak utworzyć folder i plik, który zaczyna się od kropki, należy zakończyć nazwę inną kropką. To by był .tignignore. i .nuget.
Derek Ziemba
16
@DerekZiemba Neat trick! Robiłem to przez linię poleceń przez te wszystkie lata. Myślę, że warto wspomnieć, że kiedy to robisz, końcowe „.” zostaną usunięte, początkowo myślałem, że twoja sugestia to po prostu żyć z dodatkowym „”. na końcu.
53

Alternatywne rozwiązanie powyższego jest następujące.

  • Dodaj folder pakietów do TFS (bez żadnych plików lub podfolderów)
  • Kliknij folder folderów prawym przyciskiem myszy
  • Kliknij lewym przyciskiem myszy Zaawansowane
  • Kliknij opcję Płaszcz

Warto zauważyć, że to rozwiązanie musiałoby zostać zastosowane dla obszaru roboczego TFS. Działa o wiele bardziej niezawodnie dla mnie niż przy użyciu .tfignorepliku.

Możesz przeczytać więcej o tym podejściu w artykule na blogu Zapobiegaj dodawaniu przez TFS zainstalowanych pakietów NuGet do kontroli źródła .

Ryan Gates
źródło
23

dla osób zgłaszających, że opcja .tfignore nie działa z ustawieniem nuget.config, może być interesujące - te kroki w końcu dla mnie zadziałały:

  1. Usuń wszystko z folderu moich paczek
  2. Upewnij się, że TFS nie oczekuje żadnych zmian w tym folderze
  3. Zamknij VS
  4. Ponownie otwórz VS i przeładuj rozwiązanie - używając przywracania Nuget do ponownego zapełniania pakietów Uwaga: nie czekają żadne zmiany dla kontroli źródła TFS
Adam Stewart
źródło
3
Działa to dla mnie po zastosowaniu rozwiązania Pharylon, które zrobiłem po przywróceniu pakietów.
user849924,
1
Naprawdę pomocne, musimy to zrobić po raz pierwszy (pierwsze zatwierdzenie pliku .tfignore do TFS), ale nie każdy. jeśli mam rację.
RajeshKdev
Myślę, że to podejście będzie działać tylko na maszynie, która tworzy płaszcz. Mam rację? więc to nie rozwiązuje głównego problemu wszystkich członków zespołu.
panox
Odmiana tego działała dla mnie - upewniłem się, że nic z pakietów nie zostało już zatwierdzone, a następnie usunąłem katalog pakietów z dysku. W tym momencie nadal wyświetlał się jako oczekujące zmiany w eksploratorze zespołu VS, więc postanowiłem Cofnąć zmiany, które były w toku w katalogu pakietów. To wyczyściło (bez konieczności zamykania / ponownego otwierania) i nie wracają =)
frax
8

Dodaj plik nuget.config do folderu .nuget w swoim rozwiązaniu. Dodaj następujące pliki do pliku nuget.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

WyłączenieSourceControlIntegration jest tym, co czyni sztuczkę kontroli wersji TFS.

Terje Sandstrøm
źródło
Nie ma żadnego efektu - również nie jest rozwiązaniem globalnym.
Jaster
@So Many Goblins: Czy próbowałeś tego w zupełnie nowym projekcie / sln? (Tylko dla sprawdzenia) Jestem ciekawy, co w twojej konfiguracji sprawia, że ​​to nie działa, ponieważ działa za każdym razem, gdy robię to sam, i jest to zalecany sposób robienia tego z TFS / nuget. Także w jakiej wersji VS / TFS to widzisz?
Terje Sandstrøm,
Visual studio 2013. Nowe rozwiązanie, tak. Obejrzałem ten problem, dodając .tfignore, ignorując jawnie każdy pakiet.
So Many Goblins,
2
Okej, właściwie to właśnie robi „Włącz przywracanie pakietu NuGet”. Pamiętaj, aby ZAMKNĄĆ i ponownie otworzyć swoje rozwiązanie! Plik NuGet.config jest odczytywany dopiero po otwarciu rozwiązania.
Heliac
Nie działało to dla mnie całkiem dobrze w studiu wizualnym online i VS2013. Użyłem rozwiązania Kliknij prawym przyciskiem myszy> Włącz przywracanie pakietu NuGet. Spowoduje to dodanie pliku Nuget.config do katalogu głównego rozwiązania. Dodaj plik .tignign. Zwykle robię to, dodając plik tekstowy do katalogu głównego rozwiązania, pozwalając mu to wykryć, a następnie wykluczając, klikając „wykryto dodanie”> kliknij prawym przyciskiem myszy, aby zignorować. Następnie sprawdź wszystko, w tym wszystkie pakiety. Następnie usuń wszystkie pakiety ze swojego rozwiązania i sprawdź tę zmianę (spowoduje to usunięcie pakietów z TFS) Otwórz rozwiązanie i kompilację, która doda pakiety, ale TFS ich nie odbierze.
David Wilton
7

Do pracy musisz używać lokalnych obszarów .tfignoreroboczych. .tfignorePlik musi znajdować się w folderze, który zawiera pliki lub foldery, które chcesz ignorować.

Więc jeśli struktura rozwiązania wygląda następująco:

\Project
   \Packages
   \OtherStuff
   foo.cs

Umieścisz plik .tfignore w \ Project:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

Zawartość .tfignore w twoim przypadku to:

\packages

Oto dokumentacja dla Ciebie: http://msdn.microsoft.com/library/vstudio/ms245454(v=vs.110).aspx#tfignore

Daniel Mann
źródło
2
Dodałem pliki .tfignore, a kiedy tworzę projekt, nadal próbuję dodawać pakiety do tfs. Wydaje się, że niewiele mogę zrobić, aby to zatrzymać.
Matt
Czy możesz opublikować dodany plik ignorowania?
MrHinsh - Martin Hinshelwood
2
Zobacz docs.nuget.org/docs/reference/package-restore-with-team-build - jest to błąd NuGet z .tfignore, ale można go naprawić, mówiąc NuGet, aby sam sprawdził się pod kątem integracji SCM.
user2864740,
1
Wygląda na to, że twój przykład może się mylić. Sądzi, że powinien być, packagesa \packagesnie względny.
Martin
6

Możesz na stałe ustawić to jednorazowo we AppData\Roamingwszystkich rozwiązaniach (starych i nowych)!

W swoim %AppData%\NuGet\NuGet.Configpliku dodaj następujące przed </configuration>tagiem XML ...

<config>
  <add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
  <add key="disableSourceControlIntegration" value="true" />
</solution>

... możesz podać dowolną ścieżkę - ważne jest, aby umieścić ją NA ZEWNĄTRZ obszaru roboczego TFS!

Teraz już nigdy nie będziesz musiał się o to martwić. Folder rozwiązania nie będzie już zawierał żadnych pakietów; zamiast tego wszystkie rozwiązania będą domyślnie używać lokalizacji niestandardowych pakietów.

UWAGA - Działa to dla poszczególnych użytkowników.

Heliak
źródło
1
Brzmi dobrze i być może znacznie prościej. Musisz wymusić tę konfigurację w całym zespole, a zwłaszcza login / konfigurację serwerów kompilacji, jeśli zastosujesz takie podejście?
Chris F Carroll
Tak sobie wyobrażam. Przepraszam, nie testowałem serwerów kompilacji WRT. Wyobrażam sobie również, że różne ścieżki folderów do folderów lib mogą powodować problemy (myślę, że niektóre pakiety NuGet zawierają twarde odniesienia do ścieżek lib, jeśli poprawnie je przypominam).
Heliac,
2

Ustaw rozwiązanie, aby przywrócić podczas kompilacji, folder pakietu i plik paczek zostaną pobrane, ale pakiety nie.

Po prostu TFS
źródło
1
Wyjaśnij „przywróć na kompilacji”.
user2864740,
10
Funkcjonalność Visual Studio po kliknięciu prawym przyciskiem myszy „włącz przywracanie pakietu NuGet” jest przestarzała od wersji NuGet 2.7 - TFS 2013 natywnie obsługuje przywracanie pakietów NuGet bez pliku NuGet.targets i modyfikacji plików proj.
Daniel Mann
1

Jeśli używasz Git z TFS, musisz dodać plik „.gitignore”. Możesz to zrobić w „projekcie zespołu | Ustawienia |„ dodaj plik zignoruj ​​””. Następnie otwórz plik i usuń komentarz z wbudowanej instrukcji ignorowania dla pakietów Nuget.

Jeśli używasz TFVC i masz skonfigurowane lokalne obszary robocze, możesz użyć pliku „.tfignore”, który honoruje identyczny format jak plik Git. Myślę, że potrzebujesz „paczek /”.

MrHinsh - Martin Hinshelwood
źródło
my nam TFSVC i jak już wspomniano w pierwszym poście - plik .tfignore nie działa.
Jaster
Jak już wspomniałem, musisz użyć poprawnego formatu .tfignore. Wierzę, że masz ukośnik w niewłaściwy sposób okrągłe
MrHinsh - Martin Hinshelwood
@MrHinsh po rozmowie z Edem Thompsonem plik .tfignore nie działa poprawnie. Jednak robi to .gitignore.
DaveShaw
@Ed musi to naprawić;)
MrHinsh - Martin Hinshelwood
1

Nie działało to dla mnie całkiem dobrze w studiu wizualnym online i VS2013.

  • Kliknij prawym przyciskiem myszy Rozwiązanie> Włącz przywracanie pakietu NuGet. Spowoduje to dodanie pliku Nuget.config do rozwiązania

wprowadź opis zdjęcia tutaj

  • Dodaj .tfignore. Zwykle robię to, dodając plik tekstowy do katalogu głównego rozwiązania, pozwalając mu to wykryć, a następnie wykluczając, klikając „wykryto dodanie”> kliknij prawym przyciskiem myszy, aby zignorować.

wprowadź opis zdjęcia tutaj

  • Dodaj pakiety do .tfignore i powiedz, aby zawierało repositories.config

wprowadź opis zdjęcia tutaj

Z innych komentarzy wynika, że ​​twój przebieg może się w tym momencie różnić. To jest to, co robie:

  • Sprawdź wszystko, w tym wszystkie pakiety.

  • Usuń wszystkie pakiety ze swojego rozwiązania, a następnie sprawdź tę zmianę (spowoduje to usunięcie pakietów z TFS)

  • Otwórz rozwiązanie i kompilację, która doda pakiety do projektu, ale TFS ich nie odbierze.

David Wilton
źródło
2
Po pierwsze, Włącz przywracanie Nuget jest przestarzałe i nie ma go w VS 2015, jeśli wybierzesz tę trasę później. Po drugie: sprawdzanie pakietów i bibliotek DLL doda je do kontroli źródła, usunie je w rozwiązaniu i sprawdzenie, że NIE spowoduje ich usunięcia z SC, tylko z wierzchołka twojej gałęzi. -
Terje Sandstrøm,
1
@ Podjęto punkt TerjeSandstrøm, ale pytanie dotyczy 2013 roku. Tak, masz rację, musisz użyć tf zniszczyć, aby trwale usunąć go z kontroli źródła, ale nie znalazłem innego sposobu, aby TFS przylegał do pliku .tfignore
David Wilton
1

Rozwiązaniem, które działało dla mnie, było utworzenie zarówno pliku .tfignore, jak i następującego ustawienia w Nuget.Config:

<configuration>
  ...
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>  
  ...
</configuration>

Mój .tfignore zawiera następujący wiersz:

\packages

[Używam Visual Studio 2015 Update 2]

To nie jest idealne i jest obecnie rejestrowane jako otwarty problem na github / nuget:

Ułatw pominięcie pakietów z TFVC # 493

redcalx
źródło
0

Odpowiedź Terje nie działa dla mnie cały czas, czasem będzie działała przez jakiś czas, ale potem znów będzie mnie obciążać „dodawaniem”.

Jedynym sposobem, w jaki znalazłem rozwiązanie tego problemu na stałe, jest Ukrywanie folderu paczek w moim obszarze roboczym.

Na przykład:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages
DaveShaw
źródło
To było bardzo dziwne. Czy dzieje się tak w przypadku najnowszych wersji Visual Studio i NuGet?
Terje Sandstrøm
Tak, uruchamiam VS 2013.4 i NuGet 2.8 na lokalnych obszarach roboczych TFS 2012.
DaveShaw
Musisz zamaskować KAŻDY folder pakietu dla kilkudziesięciu projektów i działań. Również każdy członek zespołu musi powtórzyć procedurę dla każdego obszaru roboczego
Jaster
Płaszcz nie jest dobrą odpowiedzią, a dwie pozostałe odpowiedzi powyżej działają i są z założenia. W twoim otoczeniu musi być coś jeszcze.
MrHinsh - Martin Hinshelwood
@MrHinsh - różne osoby w dziale przyjrzały się temu i jest po prostu zepsute. Z Gitem wydaje się to w porządku, ale przy użyciu TFVC robi to cały czas.
DaveShaw
0

Miałem ten sam problem. /packagespowinien działać, ale nie dla mnie. packages*.*zadziałało.

coding4fun
źródło