2016-12-22 5 views
2

У меня есть большой репозиторий, содержащий множество проектов VS dll и пару веб-папок. Я хочу, чтобы обложка игнорировала все папки bin и obj, созданные всеми этими DLL-проектами. Однако я не хочу игнорировать папку bin в веб-папках. Здесь намного упрощена secenario, список папок может выглядеть следующим образом:Не игнорировать определенный каталог bin

/DllProject1 
/DllProject1/someInnerNamespace 
/DllProject1/properties 
/DllProject1/bin 
/DllProject1/bin/debug 
/DllProject1/obj/ 
/DllProject1/obj/debug 

/DllProject2 
/DllProject2/someInnerNamespace 
/DllProject2/properties 
/DllProject2/bin 
/DllProject2/bin/debug 
/DllProject2/obj/ 
/DllProject2/obj/debug 

/Web 
/Web/App_Code 
/Web/assets 
/Web/clientBin 
/Web/bin 
/Web/someModule 

Принимая во внимание, что в реальном мире есть много других проектов DLL, которые могут быть найдены его различные уровни структуры папок. Я хотел бы использовать .gitignore, который будет выглядеть примерно так:

bin 
obj 
!/Web/bin 

Это «должны» игнорировать все бин и OBJ папке, где они когда-либо появляются в повторении, но «должен» явно не-игнорировать/Папка Web/bin. Однако это не работает, папка Web/bin исчезает в любом случае.

+0

Я буду стоять на том, что я сказал ниже, а именно, что артефакты сборки не должны быть там, где находится исходный код. Но, возможно, гуру, подобный @VonC, может дать вам ответ, который вы ищете. –

ответ

0

Я не специалист по написанию файлов .gitignore, но я вижу несколько проблем с вашим текущим подходом. Во-первых, почему ваш объект и двоичные файлы внутри репозитория в первую очередь? Они не должны быть там, и ни один из ваших артефактов сборки. Вместо этого вставьте за пределы, где хранится исходный код.

Что касается вашего файла .gitignore, правильный порядок состоит в том, чтобы исключить родительскую папку, но затем включить в качестве исключения подпапку. Итак, если вы хотите, чтобы исключить папку web, но включают его bin подкаталог, вы могли бы сделать что-то вроде этого:

/web/* 
!/web/bin/ 

Я не уверен, что при использовании одеяло игнорировать на bin даст вам результаты, которые вы хотите. Но, как я уже сказал, вы должны перенести свои артефакты сборки за пределы родительской папки .git.

+0

Спасибо за ответ. Цель здесь - это «просто работающая» среда, которая не требует от разработчиков запоминания набора правил для выполнения работы. Проект VS dll по умолчанию создает папки bin и obj в каталоге проекта, и для меня это имеет смысл. Поэтому я не согласен с вашим утверждением о том, где должны быть временные «артефакты сборки». Также ваше предложение будет игнорировать все в веб-папке, кроме папки bin, которая явно не может быть желательной. Я думаю, что я слишком подробно изложил свой вопрос. – AnthonyWJones

+0

Обычно ручное игнорирование артефактов сборки не является общим прецедентом, по крайней мере, не для языков/проектов, с которыми я подвергался. Возможно, ваша ситуация другая. Я просто пытаюсь дать вам полезную информацию. –

1

.gitignore пример, который вы написали, прекрасно работает, как вы его указали, я только что протестировал его. Однако я бы добавил трейлинг-косые черты только для соответствия каталогам, а не файлам.

Возможно, ваша проблема в том, что у вас нет файла в /Web/bin и вы не знаете, что Git не отслеживает папки? Git отслеживает содержимое, которое хранится в файлах, но оно не отслеживает файлы или папки, поэтому вы не можете добавить пустую папку в репозиторий Git.

+0

Спасибо. В папках bin определенно есть контент. Интересно, относится ли это к VS и Team Explorer. – AnthonyWJones

+0

Я бы так не ожидал. Попробуйте, как ведет себя обычный клиент командной строки Git. Если он ведет себя по-другому, откройте запись об ошибке для инструмента, который неправильно его обрабатывает. – Vampire