TFSを取得してパッケージフォルダーを無視する


332

TFS(2013)にpackagesフォルダーを無視させようとしています。NuGetを使用しているので、ソース管理したくないので情熱を注いでいます。

私はクローキングを試みました(動作しないようです)、私は.tfignoreファイルを追加しようとしました-何も無視されません。多くのSubversionクライアントが行うように、TFSチームがフォルダーまたはファイルを完全に無視するオプションを追加しないのはなぜですか?


TFSとVisual Studioのどのバージョンを使用していますか?ローカルまたはサーバーのワークスペースを使用していますか?
James Reed



1
この質問の答えを変更する必要があります
Chris Marisic

3
NuGetを使用している場合は、packagesフォルダーが必要です。ただし、ビルド時に不足しているバイナリを復元するようにNuGetを設定できます(パッケージフォルダーをソース管理し、バイナリは無視します)。-しかし、それには問題があります。NuGetバイナリが更新される(バージョン番号が変更されない)か、削除される可能性があります。-あらゆる種類の奇妙な奇妙な現象が発生する可能性があります。ビルドを偶然に任せないでください。パッケージフォルダー全体を確認してください。あなたは頭痛の多くをあなた自身から救うでしょう。
BrainSlugs83

回答:


497

ここでの取り決めは次のとおりです。NuGetは絶対に実行してはならないソース管理関連のこと(不正な形式、Microsoft!)を実行しようとしているため、パッケージを無視するようにNuGet TFSの両方に指示する必要があります。したがって、2つのことを行う必要があります。

まず、という名前のファイル.tfignoreをソリューションフォルダーに追加します(のs後にないことに注意してくださいtf)。その内容は次のようになります。

\packages

これは、TFSにパッケージフォルダーを無視するように指示します。さて、これもファイルを無視すると思いrepositories.configます。しかし、そうではありません。どうして?Microsoftのやり方は奇妙で神秘的です。実際、これは以下で概説するNuGetの一部だと思いますが、将来的に修正され、repositories.configVSに再生成させるのではなくファイルを保持したい場合は、これを使用できるはずです。

\packages
!\packages\repositories.config

では、.tfignoreファイルのおかげで、TFSはパッケージを無視しています。すべて元気ですよね?WRONG、NuGetがあなたのソースコントロールの周りいじくるとあなたの保留中の変更にパッケージを追加しているので。それでは、NuGetにすでに切り取るように伝えましょう。

.nugetソリューションフォルダーのルートにというフォルダーを作成します。1次に、というファイルを作成NuGet.configし、この新しいフォルダーに配置します2。その内容は次のようになります。

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

そして、あなたのパッケージはソース管理の外にとどまるべきです。NuGet.config.tfignoreファイルをソース管理に追加して、紛失しないようにしてください。

編集:問題が発生している場合は、パッケージフォルダーを削除し、その変更をチェックインしてから、上記の手順を実行します。

また編集:これはNugetの新しいバージョンでは発生しないようです。したがって、VS / TFS 2017に切り替えると、この問題は上記の問題を回避することなく解決するでしょう。

。ソース管理エクスプローラーを使用してフォルダーを追加します。ソリューションを右クリックして、[フォルダを追加]、[。nuget 2 ]の順にクリックしますVS 2013を使用してこれを見つけたとき、NuGet.configは.nugetフォルダーに移動する必要があることがわかりました。ソリューションフォルダーのルートに既にNuGet.configファイルがある場合でも(たとえば、会社に内部nugetフィードがあるため)。ただし、コメントの一部は、VS 2015のソリューションルートで正常に機能することを示しています。個人的には、gitモードでTFSを使用するように切り替えたため、テストできません。さらに、カスタムフィードがある場合は、カスタムフィードとnuget.orgの両方がNuget.configファイルのキーとしてあることを確認してください。そうしないと、TFSがランダムにパッケージを復元できないと判断します。


1
これには少なくともTFS 2012が必要だと思います。 stackoverflow.com/questions/14365929/…–
ClearCloud8

2
@zespriどのファイルが削除を保留していますか?NuGetパッケージ?それは削除を保留するべきではありません...削除する必要があります!上記で提案したことを実行した後、チームエクスプローラーに移動し、既にソース管理に含まれている可能性があるすべてのNugetパッケージを削除します。または、packagesフォルダーを完全に削除します。私はこのセットアップを何ヶ月も続けてきましたが、そのエラーを経験したことはありません。
ファリロン

5
VS2015のFyiでは、nuget.configは/.nuget/内にある必要はありませ。ソリューションのルートでうまく機能します。
jnm2 2015年

141
ピリオドで始まるフォルダとファイルを作成する方法を知りたい場合は、名前の最後にピリオドを付けてください。したがって、それは.tfignoreになります。と.nuget。
Derek Ziemba

16
@DerekZiembaきちんとしたトリック!私はここ数年、コマンドラインを使用してそれを行っています。あなたがそれをするとき、最後の「。」は言及する価値があると思います。削除されますが、私はあなたの提案は余分な '。終わりに。

53

上記の代替ソリューションは次のとおりです。

  • パッケージフォルダーをTFSに追加します(ファイルやサブフォルダーなしで)
  • パッケージフォルダを右クリックします
  • 左クリック詳細
  • マントをクリック

このソリューションはTFSワークスペースごとに適用する必要があることに注意してください。.tfignoreファイルを使用するよりも、はるかに確実に機能しました。

このアプローチの詳細については、ブログ記事「TFSがインストールされているNuGetパッケージをソース管理に追加できないようにする」を参照してください。


23

.tfignoreオプションがnuget.config設定で機能しなかったと報告している人にとっては、興味深いかもしれません-これらの手順は最終的に私のために機能しました:

  1. パッケージフォルダー内のすべてを削除する
  2. TFSが保留中のフォルダの周りに変更がないことを確認してください
  3. VSを閉じる
  4. VSを再度開き、ソリューションをリロードします-Nuget復元を使用してパッケージを再生成しますTFSソース管理の保留中の変更はありません

3
これは、パッケージを復元した後、ファリロンのソリューションを適用した後に私にとってうまくいきました。
user849924 2015

1
本当に役に立ちます。これは最初の時間(.tfignoreファイルのTFSへの最初のコミット)に行う必要がありますが、すべてではありません。私が正しい場合。
RajeshKdev 2016

このアプローチは、マントを作るマシンでのみ機能すると思います。私は正しいですか?したがって、これはすべてのチームメンバーの根本的な問題を解決するわけではありません。
panox 2017年

これのバリエーションは私のために働きました-私はパッケージからの何も既にコミットされていないことを確認してから、ディスクからパッケージディレクトリを削除しました。この時点では、VSチームエクスプローラーで保留中の変更として表示されていたため、パッケージディレクトリで保留中だった変更を元に戻すことを選択しました。これはそれをクリーンアップしました(私が閉じたり再開したりする必要はありません)、そして彼らは戻ってきません=)
frax

8

ソリューションの.nugetフォルダーにnuget.configファイルを追加します。以下をnuget.configファイルに追加します。

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

disableSourceControlIntegrationは、TFSバージョンコントロールの秘訣です。


効果はありません。グローバルソリューションでもありません。
ジャスター2014年

@So Many Goblins:これを完全に新しいプロジェクト/ slnで試しましたか?(ちょうどそれをチェックするために)私はあなたが自分でそれを行うたびに機能するので、あなたの設定でこれが機能しないのはなぜだろうと私は興味があります、そしてそれはTFS / nugetでこれを行う推奨される方法です。また、どのバージョンのVS / TFSを使用していますか?
TerjeSandstrøm、2015年

Visual studio2013。新しいソリューションです。この問題を回避するには、各パッケージを明示的に無視して.tfignoreを追加しました。
多数のゴブリン2015年

2
わかりました、これは「NuGetパッケージの復元を有効にする」の効果です。ソリューションを閉じて、再度開いてください。NuGet.configファイルは、ソリューションを開いたときにのみ読み取られます。
Heliac 2015年

これは、オンラインのビジュアルスタジオやVS2013ではうまく機能しませんでした。右クリックソリューション> NuGetパッケージの復元を有効にするを使用しました。これにより、ソリューションのルートにNuget.configファイルが追加されます。.tfignoreを追加します。私は通常、ソリューションルートにテキストファイルを追加してこれを検出し、「検出された追加」をクリックして除外します>右クリックして無視します。次に、パッケージを含むすべてをチェックインします。次に、ソリューション内のすべてのパッケージを削除し、この変更をチェックインします(これにより、TFSからパッケージが削除されます)ソリューションを開いてビルドすると、パッケージが追加されますが、TFSはそれらを取得しません。
David Wilton、2015

7

を使用するには、ローカルワークスペースを使用する必要があります.tfignore.tfignoreファイルには、無視したいファイルやフォルダを含むフォルダになければなりません。

したがって、ソリューションの構造が次のようになっているとします。

\Project
   \Packages
   \OtherStuff
   foo.cs

.tfignoreファイルを\ Projectに配置します。

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

あなたの場合の.tfignoreの内容は次のようになります:

\packages

ここにあなたのためのいくつかのドキュメントがあります:http : //msdn.microsoft.com/library/vstudio/ms245454(v=vs.110).aspx#tfignore


2
私は.tfignoreファイルを追加しましたが、プロジェクトをビルドするときに、パッケージをtfsに追加しようとしています。それを止めるために私にできることはほとんどないようです。
Matt

追加した無視ファイルを投稿できますか?
MrHinsh-Martin Hinshelwood、2014年

2
docs.nuget.org/docs/reference/package-restore-with-team-buildを参照してください。これは.tfignoreのNuGetバグですが、SCM統合のために自分自身を駆り立てるようにNuGetに指示することで修正できます。
user2864740 2014

1
あなたの例は間違っているかもしれないようです、それはそれが相対的であるのではpackagesなく、それであるはずだと思います\packages
マーティン

6

AppData\Roamingすべてのソリューション(古いものと新しいもの)に対してこれを一度だけ永久に設定できます!

あなたには%AppData%\NuGet\NuGet.Config、ファイル、直前に以下を追加する</configuration>XMLタグ...

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

...任意のパスを指定できます-重要なことは、TFSワークスペースの外にそれを置くことです!

今、あなたは再びそのことについて心配する必要はありません。ソリューションフォルダーにはパッケージが含まれなくなります。すべてのソリューションは、代わりにカスタムパッケージの場所をデフォルトで使用します。

注-これはユーザーごとに機能します。


1
良さそうで、おそらくもっと簡単に聞こえます。このセットアップをチーム全体に適用する必要があります。このアプローチを採用する場合は、特にビルドサーバーのログイン/セットアップも適用する必要がありますか?
クリスFキャロル

私はそう思います。このWRTビルドサーバーはテストしていません。libフォルダーへの異なるフォルダーパスが問題を引き起こす可能性があることも想像します(正しく思い出せば、一部のNuGetパッケージにはlibパスへのハード参照があると思います)。
ヘリアック

2

ビルド時に復元するようにソリューションを設定すると、パッケージフォルダーとパッケージファイルがチェックインされますが、パッケージはチェックインされません。


1
「ビルド時に復元」について説明してください。
user2864740 14

10
Visual Studioの右クリックの「NuGetパッケージの復元を有効にする」機能は、NuGet 2.7で廃止されました。TFS2013は、NuGet.targetsファイルとprojファイルへの変更なしで、NuGetパッケージの復元をネイティブでサポートしています。
Daniel Mann 14

1

TFSでGitを使用している場合は、「。gitignore」ファイルを追加する必要があります。これは、「チームプロジェクト|設定| '無視ファイルを追加'」で実行できます。次にファイルを開き、Nuget Packagesの組み込みのignoreステートメントのコメントを外します。

TFVCを使用していて、ローカルワークスペースが構成されている場合は、Gitファイルと同じ形式を尊重する「.tfignore」ファイルを使用できます。「packages /」が必要だと思います。


私たちはTFSVCを使用しており、最初の投稿で既に述べたように、.tfignoreファイルは機能していません。
ジャスター2014年

前述のとおり、.tfignoreの正しい形式を使用する必要があります。私はあなたがスラッシュを間違った方法で持っていると信じています
MrHinsh-Martin Hinshelwood 2014年

@MrHinshがEd Thompsonと話した後、.tfignoreファイルが正しく機能しません。.gitignoreはそうします。
DaveShaw 2014年

@Edはそれを修正する必要があります;)
MrHinsh-Martin Hinshelwood 2014年

1

これは、オンラインのビジュアルスタジオやVS2013ではうまく機能しませんでした。

  • [ソリューションを右クリック]> [NuGetパッケージの復元を有効にする]をクリックします。これにより、ソリューションにNuget.configファイルが追加されます

ここに画像の説明を入力してください

  • .tfignoreを追加します。私は通常、ソリューションルートにテキストファイルを追加してこれを検出し、「検出された追加」をクリックして除外します>右クリックして無視します。

ここに画像の説明を入力してください

  • パッケージを.tfignoreに追加し、repositories.configを含めるように伝えます。

ここに画像の説明を入力してください

他のコメントから、あなたの距離はこの時点で異なるかもしれません。これが私がすることです:

  • パッケージを含め、すべてをチェックインします。

  • ソリューション内のすべてのパッケージを削除してから、この変更をチェックインします(これにより、TFSからパッケージが削除されます)

  • ソリューションを開いてビルドすると、プロジェクトにパッケージが追加されますが、TFSはそれらを取得しません。


2
最初に、後でそのルートに進む場合、Nuget復元の有効化は廃止され、VS 2015にはありません。2番目:パッケージとdllをチェックインすると、それらがソース管理に追加され、ソリューションで削除され、チェックすると、ブランチの先端からのみSCから削除されません。–
TerjeSandstrøm2015

1
@TerjeSandstrømポイントが取られましたが、質問は2013年に固有です。はい、そうです。tfdestroyを使用してソース管理から永久に削除する必要がありますが、TFSに.tfignoreファイルを遵守させる他の方法はありませんでした
デビッドウィルトン

1

私にとってうまくいった解決策は、.tfignore 次の設定の両方をNuget.Configに作成することでした。

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

私の.tfignoreには次の行が含まれています。

\packages

[私はVisual Studio 2015 Update 2を使用しています]

これは理想的ではなく、現在github / nugetで未解決の問題として記録されています。

TFVC#493からパッケージを省略しやすくする


0

Terjeの答えは、私にとって常に機能するわけではありません。しばらくは機能することもありますが、それでも、「追加」の負荷が何度も発生します。

これを恒久的に解決する唯一の方法は、ワークスペースのパッケージフォルダーをクロークすることです。

例えば:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages

それはとても奇妙でした。これは、最新のVisual StudioおよびNuGetバージョンで発生しますか?
TerjeSandstrøm2014年

はい、TFS 2012ローカルワークスペースでVS 2013.4とNuGet 2.8を実行しています。
DaveShaw 2014年

多数のプロジェクトと汚染のために、すべてのパッケージフォルダをクロークする必要があります。また、チームのすべてのメンバーは、すべてのワークスペースについて手順を繰り返す必要があります
Jaster

クロークは良い答えではなく、上記の2つの答えはうまくいき、設計によるものです。環境内で何か他のことが起こっているはずです。
MrHinsh-Martin Hinshelwood 2014年

@MrHinsh-部門のさまざまな人々がこれを見てきましたが、壊れています。Gitで問題ないように見えますが、TFVCを使用する場合は常にこれを行います。
DaveShaw 2014年

0

同じ問題がありました。/packagesうまくいくはずですが、私にはうまくいきませんでした。packages*.*仕事をしました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.