Dapatkan TFS untuk mengabaikan folder paket saya

332

Saya mencoba membuat TFS (2013) mengabaikan packagesfolder saya . Saya tidak ingin sumbernya dikendalikan karena saya menggunakan NuGet dan itu hebat!

Saya sudah mencoba penyelubungan (sepertinya tidak berfungsi), saya sudah mencoba menambahkan .tfignorefile - tidak ada yang diabaikan. Mengapa tim TFS tidak menambahkan opsi untuk mengabaikan folder atau file secara permanen seperti yang dilakukan banyak klien Subversion ?!

Mat
sumber
Versi TFS dan Visual studio apa yang Anda gunakan? Apakah Anda menggunakan ruang kerja lokal atau server?
James Reed
Ini adalah bug NuGet, tampaknya: docs.nuget.org/docs/reference/package-restore-with-team-build
user2864740
kemungkinan rangkap dari tfIgnore tidak berfungsi untuk saya di Visual Studio 2013
Edward Brey
1
Anda harus mengubah jawaban untuk pertanyaan ini
Chris Marisic
3
Jika Anda menggunakan NuGet folder paket diperlukan. Anda dapat mengatur NuGet untuk mengembalikan binari yang hilang pada build (sehingga Anda sumber mengontrol folder paket, tetapi mengabaikan binari). - Tapi ada masalah dengan itu: Ada kemungkinan biner NuGet untuk mendapatkan pembaruan (tanpa mengubah nomor versi), atau untuk dihapus, dll. - Mungkin saja semua jenis keanehan aneh terjadi. Jangan biarkan bangunan Anda kebetulan - periksa di folder seluruh paket. Anda akan menghemat banyak sakit kepala.
BrainSlugs83

Jawaban:

497

Inilah kesepakatannya: Kita harus memberi tahu NuGet dan TFS untuk mengabaikan paket-paket itu, karena NuGet sedang mencoba melakukan hal-hal yang berhubungan dengan sumber-kontrol yang seharusnya tidak dilakukan (bentuk buruk, Microsoft!). Jadi, Anda harus melakukan dua hal.

Pertama, tambahkan file yang bernama .tfignoreke folder solusi (perhatikan kurangnya ssetelah tf). Isinya harus sebagai berikut:

\packages

Itu memberitahu TFS untuk mengabaikan folder paket Anda. Sekarang, Anda akan berpikir bahwa ini juga akan mengabaikan repositories.configfile. Tapi itu tidak akan terjadi. Mengapa? Siapa tahu, cara-cara Microsoft aneh dan misterius. Sebenarnya, saya pikir itu adalah bagian dari hal-hal NuGet yang saya uraikan di bawah, tetapi jika hal itu diperbaiki di masa mendatang dan Anda ingin menyimpan repositories.configfile alih-alih membiarkan VS memperbaruinya, Anda harus dapat menggunakan ini:

\packages
!\packages\repositories.config

OK, jadi sekarang berkat .tfignorefile kami , TFS mengabaikan paket Anda. Semuanya baik-baik saja, bukan? SALAH , karena NuGet sedang mondar-mandir dengan kontrol sumber Anda dan menambahkan paket ke perubahan yang tertunda. Jadi sekarang mari kita katakan pada NuGet untuk menghentikannya.

Buat folder bernama .nugetdi root folder solusi Anda. 1 Sekarang, buat file bernama NuGet.config, dan letakkan di folder baru ini 2 . Isinya akan terlihat seperti ini:

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

Dan sekarang paket Anda harus di luar kendali sumber. Ingatlah untuk menambahkan NuGet.configdan .tfignorefile ke kontrol sumber sehingga mereka tidak pernah hilang.

EDIT: Jika Anda mengalami masalah, Anda mungkin ingin menghapus folder paket Anda, periksa perubahan itu, dan kemudian ikuti langkah-langkah di atas.

EDIT JUGA: Sepertinya ini tidak akan terjadi dengan versi Nuget yang lebih baru. Jadi mungkin jika Anda beralih ke VS / TFS 2017 masalah ini akan hilang tanpa melompat melalui lingkaran di atas.

1 . Tambahkan folder menggunakan Source Control Explorer; klik kanan solusi-> Tambah folder ->. nuget
2 . Ketika saya menemukan ini menggunakan VS 2013, saya menemukan NuGet.config harus masuk ke folder .nuget. Bahkan jika Anda sudah memiliki file NuGet.config di root folder solusi Anda (karena, katakanlah, perusahaan Anda memiliki umpan nuget internal). Namun, beberapa di komentar telah menunjukkan bahwa ia berfungsi dengan baik di root solusi di VS 2015. Secara pribadi, saya beralih menggunakan TFS dalam mode git, jadi saya tidak bisa menguji. Selain itu, jika Anda memiliki feed kustom, pastikan Anda memiliki feed kustom dan nuget.org sebagai kunci dalam file Nuget.config, atau kadang-kadang TFS akan secara acak memutuskan tidak dapat mengembalikan paket.

Faring
sumber
1
Saya percaya ini membutuhkan setidaknya TFS 2012. stackoverflow.com/questions/14365929/…
ClearCloud8
2
@zespri File apa yang menunggu penghapusan? Paket NuGet? Itu seharusnya tidak menunggu penghapusan ... itu harus dihapus! Setelah Anda melakukan apa yang saya sarankan di atas, buka Team Explorer dan hapus semua paket Nuget yang mungkin sudah ada dalam kendali sumber. Atau cukup hapus folder paket sama sekali. Saya telah menjalankan pengaturan ini selama berbulan-bulan dan tidak pernah mengalami kesalahan itu.
Pharylon
5
Fyi di VS2015, nuget.config tidak harus berada di dalam /.nuget/. Ia bekerja sangat baik di root solusi.
jnm2
141
Bagi siapa pun yang bertanya-tanya bagaimana cara membuat folder dan file yang dimulai dengan titik, akhiri nama dengan titik lain. Jadi itu akan menjadi .tfignore. dan .nuget.
Derek Ziemba
16
@DerekZiemba Trik rapi! Saya telah melakukannya melalui baris perintah selama bertahun-tahun. Saya pikir ada baiknya menyebutkan bahwa ketika Anda melakukan itu, trailing '.' akan dihapus, saya awalnya mengira saran Anda hanya tinggal dengan tambahan '.' pada akhirnya.
53

Solusi alternatif untuk hal di atas adalah sebagai berikut.

  • Tambahkan folder paket ke TFS (tanpa file atau sub-folder)
  • Klik Kanan Folder Paket
  • Klik Kiri Lanjut
  • Klik Cloak

Perlu dicatat bahwa solusi ini perlu diterapkan per ruang kerja TFS. Ini telah bekerja jauh lebih andal bagi saya daripada menggunakan .tfignorefile.

Anda dapat membaca lebih lanjut tentang pendekatan ini di artikel blog Cegah TFS dari menambahkan paket NuGet yang terinstal ke kontrol sumber .

Ryan Gates
sumber
23

untuk orang yang melaporkan bahwa opsi .tfignore tidak berfungsi dengan pengaturan nuget.config mungkin menarik - langkah-langkah ini akhirnya berhasil untuk saya:

  1. Hapus semua yang ada di folder paket saya
  2. Pastikan TFS tidak memiliki perubahan di sekitar folder yang tertunda
  3. Tutup VS
  4. Buka kembali VS, dan muat ulang solusi - menggunakan Nuget restore untuk mengisi kembali paket Catatan tidak ada perubahan yang tertunda untuk kontrol sumber TFS
Adam Stewart
sumber
3
Ini bekerja untuk saya setelah menerapkan solusi Pharylon, yang saya lakukan setelah mengembalikan paket.
user849924
1
Sangat Bermanfaat, Kita harus melakukan ini untuk Waktu Awal (Komit Pertama dari file .tfignore ke TFS), Tapi Tidak Semua Orang. jika saya benar
RajeshKdev
Saya pikir pendekatan ini hanya akan bekerja pada mesin yang membuat jubah. Aku benar? jadi ini tidak menyelesaikan masalah root untuk semua anggota tim.
panox
Variasi dari ini berhasil bagi saya - saya memastikan bahwa tidak ada dari Paket yang sudah dikomit, kemudian menghapus direktori paket dari disk. Pada titik ini, masih ditampilkan sebagai perubahan yang tertunda di tim explorer VS, jadi saya memilih untuk Membatalkan perubahan yang tertunda di direktori paket. Ini membersihkannya (tanpa saya perlu menutup / membuka kembali), dan mereka tidak akan kembali =)
frax
8

Tambahkan file nuget.config di folder .nuget di solusi Anda. Tambahkan berikut ini ke file nuget.config:

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

DisableSourceControlIntegration adalah apa yang membuat trik untuk Kontrol Versi TFS.

Terje Sandstrøm
sumber
Tidak berpengaruh - juga bukan solusi global sama sekali.
Jaster
@Jadi Banyak Goblin: Sudahkah Anda mencoba ini pada proyek yang benar-benar baru / sln? (Hanya untuk memeriksanya) Saya ingin tahu apa yang ada di setup Anda membuat ini tidak berfungsi, karena berfungsi setiap kali saya melakukannya sendiri, dan itu adalah cara yang disarankan untuk melakukan ini dengan TFS / nuget. Juga, versi VS / TFS mana yang Anda lihat ini?
Terje Sandstrøm
Visual studio 2013. Solusi baru, ya. Saya mengatasi masalah ini dengan menambahkan .tfignore mengabaikan setiap paket secara eksplisit.
So Many Goblins
2
Oke, ini efektif apa yang "Aktifkan Pemulihan Paket NuGet". Pastikan untuk TUTUP dan buka kembali solusi Anda! File NuGet.config hanya bisa dibaca saat membuka solusi Anda.
Heliac
Ini tidak berhasil bagi saya cukup di visual studio online dan VS2013. Saya menggunakan Solusi Klik Kanan> Aktifkan Pemulihan Paket NuGet. Ini akan menambahkan file Nuget.config ke root solusi Tambahkan .tfignore. Saya biasanya melakukan ini dengan menambahkan file teks ke root solusi, membiarkannya mendeteksi itu dan kemudian mengecualikan dengan mengklik 'terdeteksi add'> abaikan klik kanan. Kemudian periksa semuanya, termasuk paket apa pun. Hapus semua paket dalam solusi Anda dan centang perubahan ini (ini akan menghapus paket dari TFS) Buka solusi dan bangun yang akan menambahkan paket tetapi TFS tidak akan mengambilnya.
David Wilton
7

Anda harus menggunakan ruang kerja lokal untuk .tfignorebekerja. The .tfignorefile harus dalam folder yang berisi file atau folder yang ingin Anda abaikan.

Jadi jika struktur solusi Anda terlihat seperti ini:

\Project
   \Packages
   \OtherStuff
   foo.cs

Anda akan meletakkan file .tfignore Anda di \ Project:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

Isi .tfignore dalam kasus Anda adalah:

\packages

Berikut beberapa dokumentasi untuk Anda: http://msdn.microsoft.com/library/vstudio/ms245454(v=vs.110).aspx#tfignore

Daniel Mann
sumber
2
Saya telah menambahkan file .tfignore dan ketika saya membangun proyek itu masih mencoba untuk menambahkan paket ke tfs. Tampaknya sedikit yang bisa saya lakukan untuk menghentikannya.
Matt
Bisakah Anda memposting file abaikan yang Anda tambahkan?
MrHinsh - Martin Hinshelwood
2
Lihat docs.nuget.org/docs/reference/package-restore-with-team-build - ini adalah bug NuGet dengan .tfignore, tetapi dapat diperbaiki dengan memberi tahu NuGet untuk mendorong diri sendiri untuk integrasi SCM.
user2864740
1
Sepertinya Anda adalah contoh yang mungkin salah, Itu berpikir itu seharusnya packagesbukan \packageskarena itu relatif.
Martin
6

Anda dapat secara permanen mengatur ini sekali dalam AppData\Roaminguntuk semua solusi (lama & baru)!

Di %AppData%\NuGet\NuGet.Configfile Anda , tambahkan berikut ini tepat sebelum </configuration>tag XML ...

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

... Anda dapat menentukan jalur apa pun yang Anda inginkan - yang terpenting adalah meletakkannya DI LUAR ruang kerja TFS Anda!

Sekarang Anda tidak perlu khawatir tentang hal itu lagi. Folder solusi Anda tidak akan berisi paket apa pun lagi; semua solusi akan menggunakan lokasi paket khusus Anda sebagai gantinya.

CATATAN - Ini berfungsi berdasarkan per pengguna.

Matahari
sumber
1
Kedengarannya bagus dan mungkin jauh lebih sederhana. Anda harus menerapkan pengaturan ini di tim Anda, dan terutama login / setup server build Anda juga jika Anda mengambil pendekatan ini?
Chris F Carroll
Saya akan membayangkannya. Saya belum menguji server build WRT ini, maaf. Saya juga akan membayangkan bahwa jalur folder yang berbeda ke folder lib dapat menyebabkan masalah (saya pikir beberapa paket NuGet memiliki referensi keras ke jalur lib jika saya ingat dengan benar).
Heliac
2

Tetapkan solusi Anda untuk memulihkan saat dibangun, folder paket dan file paket akan diperiksa tetapi paket tidak.

Hanya TFS
sumber
1
Tolong jelaskan "restore on build".
user2864740
10
Fungsi Visual Studio klik kanan "aktifkan pengembalian paket NuGet" sudah tidak berlaku lagi pada NuGet 2.7 - TFS 2013 secara asli mendukung memulihkan paket NuGet tanpa file NuGet.targets dan modifikasi pada file proj.
Daniel Mann
1

Jika Anda menggunakan Git dengan TFS, Anda perlu menambahkan file ".gitignore". Anda dapat melakukan ini di "proyek tim | Pengaturan | 'tambahkan file diabaikan'". Kemudian buka file dan batalkan komentar pada pernyataan diabaikan bawaan untuk Paket Nuget.

Jika Anda menggunakan TFVC dan Anda telah mengonfigurasi Ruang Kerja Lokal, Anda dapat menggunakan file ".tfignore" yang menghormati format yang identik dengan file Git. Saya pikir Anda perlu "paket /".

MrHinsh - Martin Hinshelwood
sumber
kita kita TFSVC dan sebagaimana telah disebutkan dalam posting awal - file .tfignore tidak berfungsi.
Jaster
Seperti yang saya katakan, Anda harus menggunakan format .tfignore yang benar. Saya percaya Anda memiliki tebasan yang salah
MrHinsh - Martin Hinshelwood
@MrHinsh setelah berbicara dengan Ed Thompson, file .tfignore tidak berfungsi dengan benar. Namun .gitignore melakukannya.
DaveShaw
@ Ed perlu memperbaikinya;)
MrHinsh - Martin Hinshelwood
1

Ini tidak berhasil bagi saya cukup di visual studio online dan VS2013.

  • Solusi Klik Kanan> Aktifkan Pemulihan Paket NuGet. Ini akan menambahkan file Nuget.config ke solusi

masukkan deskripsi gambar di sini

  • Tambahkan .tfignore. Saya biasanya melakukan ini dengan menambahkan file teks ke root solusi, membiarkannya mendeteksi itu dan kemudian mengecualikan dengan mengklik 'terdeteksi add'> abaikan klik kanan.

masukkan deskripsi gambar di sini

  • Tambahkan paket ke .tfignore dan kirim untuk menyertakan repositori.config

masukkan deskripsi gambar di sini

Dari komentar lain, tampaknya jarak tempuh Anda mungkin berbeda pada saat ini. Inilah yang saya lakukan:

  • Periksa semuanya, termasuk semua paket.

  • Hapus semua paket dalam solusi Anda dan kemudian periksa perubahan ini (ini akan menghapus paket dari TFS)

  • Buka solusi dan build yang akan menambahkan paket ke proyek tetapi TFS tidak akan mengambilnya.

David Wilton
sumber
2
Pertama, Enable Nuget restore sudah rusak, dan tidak ada di VS 2015, jika Anda pergi rute itu nanti. Kedua: Memeriksa paket dan lain-lain akan menambahkannya ke kontrol sumber, menghapusnya dalam solusi dan memeriksa bahwa tidak akan menghapusnya dari SC, hanya dari ujung cabang Anda. -
Terje Sandstrøm
1
@ Titik TerjeSandstrøm diambil, tetapi pertanyaannya khusus untuk 2013. Ya Anda benar, Anda harus menggunakan tf destroy untuk menghapusnya secara permanen dari kontrol sumber, tapi saya tidak menemukan cara lain untuk mendapatkan TFS untuk mematuhi file .tfignore
David Wilton
1

Solusi yang berhasil bagi saya adalah membuat .tfignore dan pengaturan berikut di Nuget.Config:

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

.Tfignore saya berisi baris ini:

\packages

[Saya menggunakan Visual Studio 2015 Pembaruan 2]

Ini tidak ideal, dan saat ini dicatat sebagai masalah terbuka di github / nuget:

Buat lebih mudah untuk menghilangkan paket dari TFVC # 493

redcalx
sumber
0

Jawaban Terje tidak bekerja sepanjang waktu untuk saya, kadang-kadang akan bekerja untuk sementara waktu, tetapi kemudian akan menunggu banyak "menambahkan" untuk saya lagi.

Satu-satunya cara yang saya temukan untuk menyelesaikan ini secara permanen adalah dengan Jubah folder paket di Workspace saya.

Sebagai contoh:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages
DaveShaw
sumber
Itu sangat aneh. Apakah ini terjadi dengan versi Visual Studio dan NuGet terbaru?
Terje Sandstrøm
Ya, saya menjalankan VS 2013.4 dan NuGet 2.8 di ruang kerja lokal TFS 2012.
DaveShaw
Anda harus menyelubungi folder SETIAP paket untuk proyek proyek dan polusi. Juga setiap anggota Tim harus mengulangi prosedur untuk setiap ruang kerja
Jaster
Jubah bukanlah jawaban yang baik dan dua jawaban lain di atas berfungsi dan dirancang. Pasti ada hal lain yang terjadi di lingkungan Anda.
MrHinsh - Martin Hinshelwood
@ MrHinsh - berbagai orang di departemen telah melihat ini dan itu baru saja rusak. Tampaknya oke dengan Git, tetapi ketika menggunakan TFVC, ia melakukan ini sepanjang waktu.
DaveShaw
0

Saya memiliki masalah yang sama. /packagesharus bekerja tetapi tidak untuk saya. packages*.*berhasil.

coding4fun
sumber