Как заставить git игнорировать пакеты nuget при переключении веток

Я пометил папку пакетов как игнорируемую в .gitignore, но при переключении ветвей git частично удаляет содержимое, и требуется некоторое время, прежде чем восстановление пакета обновит пакеты во время следующего строить. В идеале я бы хотел, чтобы папка пакетов не трогалась при переключении ветвей (особенно когда идентичные пакеты nuget присутствуют в обеих ветвях в файле repositories.config). Мне интересно, что я должен сделать, чтобы git игнорировал пакеты во время переключения ветвей?

Вот пример моего файла .gitignore:

    # NuGet Packages
    *.nupkg
    # The packages folder can be ignored because of Package Restore
    **/packages/*
    # except build/, which is used as an MSBuild target.
    !**/packages/build/    
    !**/packages/repositories.config

person arviman    schedule 18.02.2016    source источник
comment
Не уверен, почему вы не игнорируете файл repositories.config и каталог сборки. Я бы полностью проигнорировал каталог пакетов, что, я думаю, решит проблему, которую вы видите. Восстановление пакета NuGet восстановит каталог сборки и файл repositories.config перед выполнением сборки, если это необходимо, если вы используете Visual Studio или Xamarin Studio с последней версией NuGet.   -  person Matt Ward    schedule 18.02.2016
comment
Спасибо за предложение. Попробую в следующий раз, когда столкнусь с проблемой.   -  person arviman    schedule 17.03.2016


Ответы (1)


Вы можете попробовать использовать флаг assume-unchanged
https://git-scm.com/docs/git-update-index

Когда вы переключаете ветки, установите его, и когда вы хотите, чтобы он снова отслеживал ваши файлы, включите его.


--[no-]предполагать-без изменений

Если этот флаг установлен, имена объектов, записанные для путей, не обновляются.

Вместо этого этот параметр устанавливает/сбрасывает бит «предполагать неизменным» для путей.

Когда установлен бит «предполагать неизменное», пользователь обещает не изменять файл и позволяет Git предположить, что файл рабочего дерева соответствует тому, что записано в индексе.
Если вы хотите изменить рабочее дерево файл, вам нужно сбросить бит, чтобы сообщить об этом Git.

Иногда это полезно при работе с большим проектом в файловой системе с очень медленным системным вызовом lstat(2) (например, cifs).

Git потерпит неудачу (изящно), если ему нужно изменить этот файл в индексе, например. при слиянии в коммит; таким образом, в случае изменения предполагаемого неотслеживаемого файла вверх по течению, вам придется обрабатывать ситуацию вручную.

введите здесь описание изображения

person CodeWizard    schedule 18.02.2016