Какие части решения Xamarin следует хранить вне хранилища?

Я работаю с дизайнером в приложении Xamarin.Android, и у нас возникают проблемы с синхронизацией. Мы используем Mercurial, но мой вопрос должен быть таким же релевантным для Git или любого другого DVCS. Мой файл .hgignore выглядит следующим образом:

^bin/
^obj/
^Components/
\.keystore$

Я не уверен в этих файлах:

^Resources/Resource.designer.cs
\.sln$
\.userprefs$
\.csproj$

Спасибо!

Обновление
Нашел эту замечательную вики сообщества, которая подтвердила исключение *.pidb и *.userprefs и подразумевается, в том числе *.sln и *.csproj
См. .gitignore для проектов и решений Visual Studio

Я не продаюсь, включая файл Resource.designer.cs. Он автоматически восстанавливается после изменений в ресурсах и включает это уведомление:

// ------------------------------------------------------------------------------
//  <autogenerated>
//      This code was generated by a tool.
//      Mono Runtime Version: 4.0.30319.17020
// 
//      Changes to this file may cause incorrect behavior and will be lost if 
//      the code is regenerated.
//  </autogenerated>
// ------------------------------------------------------------------------------

При слиянии вы можете отклонить изменение имени идентификатора в файле макета, но принять этот файл, содержащий новое имя.

Ответ 1

Чтобы ответить на ваш вопрос, вам интересно об этом:

^Resources/Resource.designer.cs
\.sln$
\.userprefs$
\.csproj$

Файл Resource.designer.cs не должен игнорироваться. Конечно, в некоторых случаях он будет регенерироваться, особенно если вы измените файл resx, из которого он создан, но просто для его управления версиями удаляет эту проблему со всех остальных, им не нужно ее регенерировать.

Файлы .sln и .csproj должны игнорироваться определенно не. Файл решения содержит, какие проекты являются частью решения, а файл csproj содержит информацию о проекте, которую вы обязательно должны зафиксировать.

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

Вот мой собственный файл игнорирования Xamarin, с комментариями ниже:

syntax: glob
_ReSharper.*/
[Bb]in/
[Oo]bj/
*.user
*.userprefs
*.suo
.DS_Store

Первая строка говорит Mercurial использовать библиотеку glob для обработки масок файлов.

Следующая строка игнорирует временные файлы ReSharper, которые добавляются в их собственный подкаталог в соответствии с именем проекта или решения. Обратите внимание, что вы можете попросить ReSharper использовать временную папку на компьютере для этого, вместо того, чтобы хранить ее в каталоге решений, но это может быть настройка для каждого пользователя, чтобы гарантировать, что эта папка случайно не зафиксирована, просто проигнорируйте это папку.

Затем я игнорирую папки bin и obj, обрабатывая как верхнюю, так и строчную первую букву, т.е. Бин игнорируется, а также bin.

Затем я игнорирую все с помощью расширения пользователя, userprefs и suo, так как все они сохраняют настройки локального пользователя.

Последняя запись игнорирует папку ресурсов Mac.

Если у вас есть NCrunch, TeamCity или FinalBuilder, есть дополнительные записи, которые вы, вероятно, захотите добавить:

_NCrunch_*/
_TeamCity.*/
*.fb7lck
*.fbl7
*.fbpInf

Ответ 2

Это примерно так, как выглядят мои файлы .gitignore:

*.pidb
*.userprefs
bin
obj
.DS_Store
*.suo

В более общих терминах это файлы, которые вам не нужны (и, как следствие, вам понадобятся остальные файлы).